Mercurial > hg
changeset 19523:f37b5a17e6a0 stable 2.7
bookmarks: pull --update updates to active bookmark if it moved (issue4007)
This makes `hg pull --update` behave the same wrt the active bookmark as
`hg pull && hg update` does as of 2096e025a728. A helper function,
bookmarks.calculateupdate, is added to prevent code duplication between
postincoming and update.
author | Kevin Bullock <kbullock@ringworld.org> |
---|---|
date | Thu, 01 Aug 2013 21:43:14 -0500 |
parents | 3d19b8136641 |
children | f3381f365bd1 |
files | mercurial/bookmarks.py mercurial/commands.py tests/test-bookmarks.t |
diffstat | 3 files changed, 35 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bookmarks.py Thu Aug 01 20:06:00 2013 -0500 +++ b/mercurial/bookmarks.py Thu Aug 01 21:43:14 2013 -0500 @@ -170,6 +170,19 @@ deleted = True return deleted +def calculateupdate(ui, repo, checkout): + '''Return a tuple (targetrev, movemarkfrom) indicating the rev to + check out and where to move the active bookmark from, if needed.''' + movemarkfrom = None + if checkout is None: + curmark = repo._bookmarkcurrent + if iscurrent(repo): + movemarkfrom = repo['.'].node() + elif curmark: + ui.status(_("updating to active bookmark %s\n") % curmark) + checkout = curmark + return (checkout, movemarkfrom) + def update(repo, parents, node): deletefrom = parents marks = repo._bookmarks
--- a/mercurial/commands.py Thu Aug 01 20:06:00 2013 -0500 +++ b/mercurial/commands.py Thu Aug 01 21:43:14 2013 -0500 @@ -4520,7 +4520,7 @@ if modheads == 0: return if optupdate: - movemarkfrom = repo['.'].node() + checkout, movemarkfrom = bookmarks.calculateupdate(ui, repo, checkout) try: ret = hg.update(repo, checkout) except util.Abort, inst: @@ -5829,14 +5829,7 @@ cmdutil.clearunfinished(repo) # with no argument, we also move the current bookmark, if any - movemarkfrom = None - if rev is None: - curmark = repo._bookmarkcurrent - if bookmarks.iscurrent(repo): - movemarkfrom = repo['.'].node() - elif curmark: - ui.status(_("updating to active bookmark %s\n") % curmark) - rev = curmark + rev, movemarkfrom = bookmarks.calculateupdate(ui, repo, rev) # if we defined a bookmark, we have to remember the original bookmark name brev = rev
--- a/tests/test-bookmarks.t Thu Aug 01 20:06:00 2013 -0500 +++ b/tests/test-bookmarks.t Thu Aug 01 21:43:14 2013 -0500 @@ -507,19 +507,37 @@ * Z 3:125c9a1d6df6 x y 2:db815d6d32e6 +pull --update works the same as pull && update + + $ hg bookmark -r3 Y + moving bookmark 'Y' forward from db815d6d32e6 + $ hg -R cloned-bookmarks-update update Y + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg -R cloned-bookmarks-update pull --update . + pulling from . + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 2 files (+1 heads) + updating bookmark Y + updating bookmark Z + updating to active bookmark Y + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + test wrongly formated bookmark $ echo '' >> .hg/bookmarks $ hg bookmarks X2 1:925d80f479bb - Y 2:db815d6d32e6 + Y 3:125c9a1d6df6 * Z 3:125c9a1d6df6 x y 2:db815d6d32e6 $ echo "Ican'thasformatedlines" >> .hg/bookmarks $ hg bookmarks malformed line in .hg/bookmarks: "Ican'thasformatedlines" X2 1:925d80f479bb - Y 2:db815d6d32e6 + Y 3:125c9a1d6df6 * Z 3:125c9a1d6df6 x y 2:db815d6d32e6