diff --git a/mercurial/discovery.py b/mercurial/discovery.py index a50606327538219ec833d6855809f4621ff7e830_bWVyY3VyaWFsL2Rpc2NvdmVyeS5weQ==..91cb08a9e7fb2c98db04210c17342bc3c6efcee1_bWVyY3VyaWFsL2Rpc2NvdmVyeS5weQ== 100644 --- a/mercurial/discovery.py +++ b/mercurial/discovery.py @@ -278,5 +278,6 @@ # 5. Check for new heads. # If there are more heads after the push than before, a suitable - # warning, depending on unsynced status, is displayed. + # error message, depending on unsynced status, is displayed. + error = None for branch in branches: @@ -282,3 +283,17 @@ for branch in branches: - if len(newmap[branch]) > len(oldmap[branch]): + newhs = set(newmap[branch]) + oldhs = set(oldmap[branch]) + if len(newhs) > len(oldhs): + if error is None: + if branch: + error = _("push creates new remote heads " + "on branch '%s'!") % branch + else: + error = _("push creates new remote heads!") + if branch in unsynced: + hint = _("you should pull and merge or " + "use push -f to force") + else: + hint = _("did you forget to merge? " + "use push -f to force") if branch: @@ -284,14 +299,9 @@ if branch: - msg = _("push creates new remote heads " - "on branch '%s'!") % branch - else: - msg = _("push creates new remote heads!") - - if branch in unsynced: - hint = _("you should pull and merge or use push -f to force") - else: - hint = _("did you forget to merge? use push -f to force") - raise util.Abort(msg, hint=hint) + repo.ui.debug("new remote heads on branch '%s'\n" % branch) + for h in (newhs - oldhs): + repo.ui.debug("new remote head %s\n" % short(h)) + if error: + raise util.Abort(error, hint=hint) # 6. Check for unsynced changes on involved branches. if unsynced: diff --git a/tests/test-push-warn.t b/tests/test-push-warn.t index a50606327538219ec833d6855809f4621ff7e830_dGVzdHMvdGVzdC1wdXNoLXdhcm4udA==..91cb08a9e7fb2c98db04210c17342bc3c6efcee1_dGVzdHMvdGVzdC1wdXNoLXdhcm4udA== 100644 --- a/tests/test-push-warn.t +++ b/tests/test-push-warn.t @@ -30,6 +30,23 @@ (you should pull and merge or use push -f to force) [255] + $ hg push --debug ../a + pushing to ../a + searching for changes + examining 1c9246a22a0a:d8d565842d04 + found incomplete branch 1c9246a22a0a:d8d565842d04 + searching: 1 queries + narrowing 1:1 d8d565842d04 + found new branch changeset 1c9246a22a0a + found new changesets starting at 1c9246a22a0a + 1 total queries + common changesets up to d8d565842d04 + new remote heads on branch 'default' + new remote head 1e108cc5548c + abort: push creates new remote heads on branch 'default'! + (you should pull and merge or use push -f to force) + [255] + $ hg pull ../a pulling from ../a searching for changes