diff -r f8c5225b9054 -r b1bc6e5f5249 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sun Mar 03 20:16:22 2019 +0530 +++ b/mercurial/cmdutil.py Tue Mar 19 16:36:59 2019 +0300 @@ -7,6 +7,7 @@ from __future__ import absolute_import +import copy as copymod import errno import os import re @@ -270,6 +271,28 @@ 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 @@ 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,