diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1872,6 +1872,7 @@ class localrepository(object): # this message are here for 80 char limit reason mso = _("push includes obsolete changeset: %s!") msu = _("push includes unstable changeset: %s!") + msb = _("push includes bumped changeset: %s!") # If we are to push if there is at least one # obsolete or unstable changeset in missing, at # least one of the missinghead will be obsolete or @@ -1882,6 +1883,8 @@ class localrepository(object): raise util.Abort(_(mso) % ctx) elif ctx.unstable(): raise util.Abort(_(msu) % ctx) + elif ctx.bumped(): + raise util.Abort(_(msb) % ctx) discovery.checkheads(self, remote, outgoing, remoteheads, newbranch, bool(inc)) diff --git a/tests/test-obsolete-checkheads.t b/tests/test-obsolete-checkheads.t --- a/tests/test-obsolete-checkheads.t +++ b/tests/test-obsolete-checkheads.t @@ -38,6 +38,7 @@ New head replaces old head ========================== setup +(we add the 1 flags to prevent bumped error during the test) $ mkcommit old $ hg push @@ -50,7 +51,7 @@ setup $ hg up -q '.^' $ mkcommit new created new head - $ hg debugobsolete `getid old` `getid new` + $ hg debugobsolete --flags 1 `getid old` `getid new` $ hg glog --hidden @ 71e3228bffe1 (draft) add new | diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t --- a/tests/test-obsolete.t +++ b/tests/test-obsolete.t @@ -171,6 +171,14 @@ the public changeset summary: add new_3_c +And that we can't push bumped changeset + + $ hg push ../tmpa + pushing to ../tmpa + searching for changes + abort: push includes bumped changeset: 5601fb93a350! + [255] + Fixing "bumped" situation We need to create a clone of 5 and add a special marker with a flag