Comments
Patch
@@ -834,14 +834,16 @@
# that contains a divergent bookmark
if bmctx.rev() not in anc and target in divs:
bookmarks.deletedivergent(repo, [target], mark)
return
+ # consider successor changesets as well
+ foreground = obsolete.foreground(repo, [marks[mark]])
deletefrom = [b for b in divs
if repo[b].rev() in anc or b == target]
bookmarks.deletedivergent(repo, deletefrom, mark)
- if bmctx.rev() in anc:
+ if bmctx.rev() in anc or target in foreground:
ui.status(_("moving bookmark '%s' forward from %s\n") %
(mark, short(bmctx.node())))
return
raise util.Abort(_("bookmark '%s' already exists "
"(use -f to force)") % mark)
@@ -204,10 +204,11 @@
| |/
| @ 1:0786582aa4b1 1
|/
o 0:60829823a42a 0
+ $ hg book bm -r 3
$ hg status
M foo
We add simple obsolescence marker between 3 and 4 (indirect successors)
@@ -216,14 +217,20 @@
$ hg id --debug -i -r 4
d047485b3896813b2a624e86201983520f003206
$ hg debugobsolete 6efa171f091b00a3c35edc15d48c52a498929953 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa d047485b3896813b2a624e86201983520f003206
-Test that 5 is detected as a valid destination from 3
+Test that 5 is detected as a valid destination from 3 and also accepts moving
+the bookmark (issue4015)
+
$ hg up --quiet --hidden 3
$ hg up 5
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg book bm
+ moving bookmark 'bm' forward from 6efa171f091b
+ $ hg bookmarks
+ * bm 5:ff252e8273df
Test that 5 is detected as a valid destination from 1
$ hg up --quiet 0 # we should be able to update to 3 directly
$ hg up --quiet --hidden 3 # but not implemented yet.
$ hg up 5