[PATCH] bookmarks: allow moving a bookmark forward to a descendant
Augie Fackler
raf at durin42.com
Sat Mar 16 02:45:24 CDT 2013
On Mar 15, 2013, at 9:40 PM, Kevin Bullock <kbullock+mercurial at ringworld.org> wrote:
> # HG changeset patch
> # User Kevin Bullock <kbullock at ringworld.org>
> # Date 1363408747 18000
> # Node ID 56dd55da2f7d3168d553fa01e38cb26244d2ee3f
> # Parent 0bba1ff2ac7b26187a583ca53c08ec4baa372606
> bookmarks: allow moving a bookmark forward to a descendant
LGTM
>
> 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.
>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -808,8 +808,15 @@ def bookmark(ui, repo, mark=None, rev=No
> 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=No
> 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()
> diff --git a/tests/test-bookmarks.t b/tests/test-bookmarks.t
> --- a/tests/test-bookmarks.t
> +++ b/tests/test-bookmarks.t
> @@ -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
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list