--- a/mercurial/exchange.py Thu Dec 05 16:19:16 2019 -0500
+++ b/mercurial/exchange.py Thu Dec 12 12:30:15 2019 -0500
@@ -646,6 +646,8 @@
pushop.repo.checkpush(pushop)
_checkpublish(pushop)
_pushdiscovery(pushop)
+ if not pushop.force:
+ _checksubrepostate(pushop)
if not _forcebundle1(pushop):
_pushbundle2(pushop)
_pushchangeset(pushop)
@@ -694,6 +696,17 @@
step(pushop)
+def _checksubrepostate(pushop):
+ """Ensure all outgoing referenced subrepo revisions are present locally"""
+ for n in pushop.outgoing.missing:
+ ctx = pushop.repo[n]
+
+ if b'.hgsub' in ctx.manifest() and b'.hgsubstate' in ctx.files():
+ for subpath in sorted(ctx.substate):
+ sub = ctx.sub(subpath)
+ sub.verify(onpush=True)
+
+
@pushdiscovery(b'changeset')
def _pushdiscoverychangeset(pushop):
"""discover the changeset that need to be pushed"""