@@ -7,6 +7,7 @@
from __future__ import absolute_import
+import copy as copymod
import errno
import os
import re
@@ -270,6 +271,28 @@ def dorecord(ui, repo, commitfunc, cmdsu
raise error.Abort(_('cannot partially commit a merge '
'(use "hg commit" instead)'))
+ status = repo.status(match=match)
+
+ overrides = {(b'ui', b'commitsubrepos'): True}
+
+ with repo.ui.configoverride(overrides, b'record'):
+ # subrepoutil.precommit() modifies the status
+ tmpstatus = scmutil.status(copymod.copy(status[0]),
+ copymod.copy(status[1]),
+ copymod.copy(status[2]),
+ copymod.copy(status[3]),
+ copymod.copy(status[4]),
+ copymod.copy(status[5]),
+ copymod.copy(status[6]))
+
+ # Force allows -X subrepo to skip the subrepo.
+ subs, commitsubs, newstate = subrepoutil.precommit(
+ repo.ui, wctx, tmpstatus, match, force=True)
+ for s in subs:
+ if s in commitsubs:
+ dirtyreason = wctx.sub(s).dirtyreason(True)
+ raise error.Abort(dirtyreason)
+
def fail(f, msg):
raise error.Abort('%s: %s' % (f, msg))
@@ -279,7 +302,6 @@ def dorecord(ui, repo, commitfunc, cmdsu
match.explicitdir = vdirs.append
match.bad = fail
- status = repo.status(match=match)
if not force:
repo.checkcommitpatterns(wctx, vdirs, match, status, fail)
diffopts = patch.difffeatureopts(ui, opts=opts, whitespace=True)
@@ -121,9 +121,22 @@ add new commit to be amended
$ echo a >> a
$ hg ci -m3
+ $ echo 't = t' > .hgsub
+
+--interactive won't silently ignore dirty subrepos
+
+ $ echo modified > t/b
+ $ hg amend --interactive --config ui.interactive=True
+ abort: uncommitted changes in subrepository "t"
+ [255]
+ $ hg amend --interactive --config ui.interactive=True --config ui.commitsubrepos=True
+ abort: uncommitted changes in subrepository "t"
+ [255]
+
+ $ hg -R t revert -q --all --no-backup
+
amend with one subrepo dropped
- $ echo 't = t' > .hgsub
$ hg amend
saved backup bundle to * (glob) (obsstore-off !)
$ hg status --change .
@@ -295,16 +295,6 @@ handle subrepos safely on qrecord
A .hgsub
A sub/a
% qrecord --config ui.interactive=1 -m0 0.diff
- diff --git a/.hgsub b/.hgsub
- new file mode 100644
- examine changes to '.hgsub'? [Ynesfdaq?] y
-
- @@ -0,0 +1,1 @@
- +sub = sub
- record this change to '.hgsub'? [Ynesfdaq?] y
-
- warning: subrepo spec file '.hgsub' not found
- warning: subrepo spec file '.hgsub' not found
abort: uncommitted changes in subrepository "sub"
[255]
% update substate when adding .hgsub w/clean updated subrepo
@@ -333,15 +323,6 @@ handle subrepos safely on qrecord
M .hgsub
A sub2/a
% qrecord --config ui.interactive=1 -m1 1.diff
- diff --git a/.hgsub b/.hgsub
- 1 hunks, 1 lines changed
- examine changes to '.hgsub'? [Ynesfdaq?] y
-
- @@ -1,1 +1,2 @@
- sub = sub
- +sub2 = sub2
- record this change to '.hgsub'? [Ynesfdaq?] y
-
abort: uncommitted changes in subrepository "sub2"
[255]
% update substate when modifying .hgsub w/clean updated subrepo