mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
bookmarks: allow moving a bookmark forward to a descendant
Allow 'hg bookmark MARK', with an existing bookmark MARK, to move the bookmark forward to the current or specified revision, if the target revision is a descendant of the revision the bookmark currently points to. Prints a status message including the revision the bookmark was formerly at: $ hg bookmark Z moving bookmark 'Z' forward from 663762316562 Test coverage is added.
This commit is contained in:
parent
8d01e97626
commit
f416be4da5
@ -808,8 +808,15 @@ def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False,
|
||||
scmutil.checknewlabel(repo, mark, 'bookmark')
|
||||
return mark
|
||||
|
||||
def checkconflict(repo, mark, force=False):
|
||||
def checkconflict(repo, mark, force=False, target=None):
|
||||
if mark in marks and not force:
|
||||
if target:
|
||||
anc = repo.changelog.ancestors([repo[target].rev()])
|
||||
bmctx = repo[marks[mark]]
|
||||
if bmctx.rev() in anc:
|
||||
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)
|
||||
if ((mark in repo.branchmap() or mark == repo.dirstate.branch())
|
||||
@ -852,11 +859,11 @@ def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False,
|
||||
if inactive and mark == repo._bookmarkcurrent:
|
||||
bookmarks.setcurrent(repo, None)
|
||||
return
|
||||
checkconflict(repo, mark, force)
|
||||
tgt = cur
|
||||
if rev:
|
||||
marks[mark] = scmutil.revsingle(repo, rev).node()
|
||||
else:
|
||||
marks[mark] = cur
|
||||
tgt = scmutil.revsingle(repo, rev).node()
|
||||
checkconflict(repo, mark, force, tgt)
|
||||
marks[mark] = tgt
|
||||
if not inactive and cur == marks[mark]:
|
||||
bookmarks.setcurrent(repo, mark)
|
||||
marks.write()
|
||||
|
@ -239,8 +239,8 @@ bookmark with reserved name
|
||||
|
||||
bookmark with existing name
|
||||
|
||||
$ hg bookmark Z
|
||||
abort: bookmark 'Z' already exists (use -f to force)
|
||||
$ hg bookmark X2
|
||||
abort: bookmark 'X2' already exists (use -f to force)
|
||||
[255]
|
||||
|
||||
$ hg bookmark -m Y Z
|
||||
@ -279,7 +279,13 @@ incompatible options
|
||||
|
||||
force bookmark with existing name
|
||||
|
||||
$ hg bookmark -f Z
|
||||
$ hg bookmark -f X2
|
||||
$ hg bookmark -fr1 X2
|
||||
|
||||
forward bookmark to descendant without --force
|
||||
|
||||
$ hg bookmark Z
|
||||
moving bookmark 'Z' forward from 663762316562
|
||||
|
||||
list bookmarks
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user