push: refuse to push bumped changeset
This applies the same logic as used for `obsolete` and `unstable` changesets.
Refuse to push them without force.
We'll probably want to factor this logic with two new functions
`pctx.troubled()` and `ctx.troubles()`. But I'm waiting for the third
"trouble" to make it into core.
--- a/mercurial/localrepo.py Fri Oct 19 00:46:39 2012 +0200
+++ b/mercurial/localrepo.py Fri Oct 19 00:50:12 2012 +0200
@@ -1872,6 +1872,7 @@
# 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 @@
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))
--- a/tests/test-obsolete-checkheads.t Fri Oct 19 00:46:39 2012 +0200
+++ b/tests/test-obsolete-checkheads.t Fri Oct 19 00:50:12 2012 +0200
@@ -38,6 +38,7 @@
==========================
setup
+(we add the 1 flags to prevent bumped error during the test)
$ mkcommit old
$ hg push
@@ -50,7 +51,7 @@
$ 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
|
--- a/tests/test-obsolete.t Fri Oct 19 00:46:39 2012 +0200
+++ b/tests/test-obsolete.t Fri Oct 19 00:50:12 2012 +0200
@@ -171,6 +171,14 @@
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