commit: abort if a subrepo is modified and ui.commitsubrepos=no
The default behaviour is to commit subrepositories with uncommitted changes. In
my experience this is usually undesirable:
- Changes to dependencies are often debugging leftovers
- Real changes should generally be applied on the source project directly,
tested then committed. This is not always possible, subversion subrepos may
include only a small part of the source project, without the tests.
Setting ui.commitsubrepos=no will now abort commits containing such modified
subrepositories like:
$ hg --config ui.commitsubrepos=no ci -m msg
abort: uncommitted changes in subrepo sub
I ruled out the hook solution because it does not easily take --include/exclude
options in account. Also, my main concern is whether this flag could cause
problems with extensions. If there are legitimate reasons for callers to
override this behaviour (I could not find any), they might either override at ui
level, or we could add an argument to localrepo.commit() later.
v2:
- Renamed ui.commitsubs to ui.commitsubrepos
- Mention the configuration entry in hg help subrepos
$ echo "[extensions]" >> $HGRCPATH
$ echo "bookmarks=" >> $HGRCPATH
$ echo "mq=" >> $HGRCPATH
$ hg init
$ echo qqq>qqq.txt
rollback dry run without rollback information
$ hg rollback
no rollback information available
[1]
add file
$ hg add
adding qqq.txt
commit first revision
$ hg ci -m 1
set bookmark
$ hg book test
$ echo www>>qqq.txt
commit second revision
$ hg ci -m 2
set bookmark
$ hg book test2
update to -2
$ hg update -r -2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo eee>>qqq.txt
commit new head
$ hg ci -m 3
created new head
bookmarks updated?
$ hg book
test 1:25e1ee7a0081
test2 1:25e1ee7a0081
strip to revision 1
$ hg strip 1
saved backup bundle to $TESTTMP/.hg/strip-backup/*-backup.hg (glob)
list bookmarks
$ hg book
* test 1:8cf31af87a2b
* test2 1:8cf31af87a2b
immediate rollback and reentrancy issue
$ echo "mq=!" >> $HGRCPATH
$ hg init repo
$ cd repo
$ echo a > a
$ hg ci -Am adda
adding a
$ echo b > b
$ hg ci -Am addb
adding b
$ hg bookmarks markb
$ hg rollback
rolling back to revision 0 (undo commit)
are you there?
$ hg bookmarks
no bookmarks set
can you be added again?
$ hg bookmarks markb
$ hg bookmarks
* markb 0:07f494440405
rollback dry run with rollback information
$ hg rollback -n
no rollback information available
[1]
$ hg bookmarks
* markb 0:07f494440405
$ cd ..