Patchwork [2,of,3,V2] pull: activate a bookmark matching with the destination of the update

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Feb. 26, 2016, 11:25 a.m.
Message ID <8bc889107331ed73969e.1456485927@feefifofum>
Download mbox | patch
Permalink /patch/13404/
State Accepted
Delegated to: Pierre-Yves David
Headers show

Comments

Katsunori FUJIWARA - Feb. 26, 2016, 11:25 a.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1456485725 -32400
#      Fri Feb 26 20:22:05 2016 +0900
# Node ID 8bc889107331ed73969ec1e5364bdd380f736299
# Parent  da6d9ca7f33b1f27c36b9cc6165eac6358f0aee9
pull: activate a bookmark matching with the destination of the update

Before this patch, "hg pull -u" doesn't activate a bookmark, which
matches with the explicit destination of the update, even though bare
"hg update" does so.
Pierre-Yves David - Feb. 27, 2016, 1:38 p.m.
On 02/26/2016 12:25 PM, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1456485725 -32400
> #      Fri Feb 26 20:22:05 2016 +0900
> # Node ID 8bc889107331ed73969ec1e5364bdd380f736299
> # Parent  da6d9ca7f33b1f27c36b9cc6165eac6358f0aee9
> pull: activate a bookmark matching with the destination of the update
>
> Before this patch, "hg pull -u" doesn't activate a bookmark, which
> matches with the explicit destination of the update, even though bare
> "hg update" does so.

In practice, it looks like your are talking about:

   'hg pull -u --rev bmname'

am I right? if so, we should probably update the commit message to have 
the '--rev bmname' bits

This seems to also apply to `hg pull -u URL#bmname too.

If so, I think the change make sense (probably requires a BC) flagging.

If you agree with the aboves, we can probably update the message in flight.

> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -5566,6 +5566,10 @@ def postincoming(ui, repo, modheads, opt
>                   pass # no-op update
>               elif bookmarks.update(repo, [movemarkfrom], repo['.'].node()):
>                   ui.status(_("updating bookmark %s\n") % repo._activebookmark)
> +        elif brev in repo._bookmarks:
> +            if brev != repo._activebookmark:
> +                ui.status(_("(activating bookmark %s)\n") % brev)
> +            bookmarks.activate(repo, brev)
>           return ret
>       if modheads > 1:
>           currentbranchheads = len(repo.branchheads())
> diff --git a/tests/test-pull-update.t b/tests/test-pull-update.t
> --- a/tests/test-pull-update.t
> +++ b/tests/test-pull-update.t
> @@ -61,4 +61,66 @@ Should work:
>     added 1 changesets with 1 changes to 1 files (-1 heads)
>     1 files updated, 0 files merged, 0 files removed, 0 files unresolved
>
> +Similarity between "hg update" and "hg pull -u" in handling bookmark
> +====================================================================
> +
> +Test that updating activates the bookmark, which matches with the
> +explicit destination of the update.
> +
> +  $ echo 4 >> foo
> +  $ hg commit -m "#4"
> +  $ hg bookmark active-after-pull
> +  $ cd ../tt
> +
> +(1) activating by --rev BOOKMARK
> +
> +  $ hg bookmark -f active-before-pull
> +  $ hg bookmarks
> +   * active-before-pull        3:483b76ad4309
> +
> +  $ hg pull -u -r active-after-pull
> +  pulling from $TESTTMP/t (glob)
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +  adding remote bookmark active-after-pull
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  (activating bookmark active-after-pull)
> +
> +  $ hg parents -q
> +  4:f815b3da6163
> +  $ hg bookmarks
> +   * active-after-pull         4:f815b3da6163
> +     active-before-pull        3:483b76ad4309
> +
> +(discard pulled changes)
> +
> +  $ hg update -q 483b76ad4309
> +  $ hg rollback -q
> +
> +(2) activating by URL#BOOKMARK
> +
> +  $ hg bookmark -f active-before-pull
> +  $ hg bookmarks
> +   * active-before-pull        3:483b76ad4309
> +
> +  $ hg pull -u $TESTTMP/t#active-after-pull
> +  pulling from $TESTTMP/t (glob)
> +  searching for changes
> +  adding changesets
> +  adding manifests
> +  adding file changes
> +  added 1 changesets with 1 changes to 1 files
> +  adding remote bookmark active-after-pull
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  (activating bookmark active-after-pull)
> +
> +  $ hg parents -q
> +  4:f815b3da6163
> +  $ hg bookmarks
> +   * active-after-pull         4:f815b3da6163
> +     active-before-pull        3:483b76ad4309
> +
>     $ cd ..
Katsunori FUJIWARA - Feb. 27, 2016, 3:46 p.m.
At Sat, 27 Feb 2016 14:38:28 +0100,
Pierre-Yves David wrote:
> 
> On 02/26/2016 12:25 PM, FUJIWARA Katsunori wrote:
> > # HG changeset patch
> > # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> > # Date 1456485725 -32400
> > #      Fri Feb 26 20:22:05 2016 +0900
> > # Node ID 8bc889107331ed73969ec1e5364bdd380f736299
> > # Parent  da6d9ca7f33b1f27c36b9cc6165eac6358f0aee9
> > pull: activate a bookmark matching with the destination of the update
> >
> > Before this patch, "hg pull -u" doesn't activate a bookmark, which
> > matches with the explicit destination of the update, even though bare
> > "hg update" does so.
> 
> In practice, it looks like your are talking about:
> 
>    'hg pull -u --rev bmname'
> 
> am I right? if so, we should probably update the commit message to have 
> the '--rev bmname' bits
> 
> This seems to also apply to `hg pull -u URL#bmname too.

Yes, this patch focuses on "hg pull -u" with argument below:

  - option --rev BOOKMARK
  - source URL#BOOKMARK

> If so, I think the change make sense (probably requires a BC) flagging.
> 
> If you agree with the aboves, we can probably update the message in flight.

Please do so.

> > diff --git a/mercurial/commands.py b/mercurial/commands.py
> > --- a/mercurial/commands.py
> > +++ b/mercurial/commands.py
> > @@ -5566,6 +5566,10 @@ def postincoming(ui, repo, modheads, opt
> >                   pass # no-op update
> >               elif bookmarks.update(repo, [movemarkfrom], repo['.'].node()):
> >                   ui.status(_("updating bookmark %s\n") % repo._activebookmark)
> > +        elif brev in repo._bookmarks:
> > +            if brev != repo._activebookmark:
> > +                ui.status(_("(activating bookmark %s)\n") % brev)
> > +            bookmarks.activate(repo, brev)
> >           return ret
> >       if modheads > 1:
> >           currentbranchheads = len(repo.branchheads())
> > diff --git a/tests/test-pull-update.t b/tests/test-pull-update.t
> > --- a/tests/test-pull-update.t
> > +++ b/tests/test-pull-update.t
> > @@ -61,4 +61,66 @@ Should work:
> >     added 1 changesets with 1 changes to 1 files (-1 heads)
> >     1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> >
> > +Similarity between "hg update" and "hg pull -u" in handling bookmark
> > +====================================================================
> > +
> > +Test that updating activates the bookmark, which matches with the
> > +explicit destination of the update.
> > +
> > +  $ echo 4 >> foo
> > +  $ hg commit -m "#4"
> > +  $ hg bookmark active-after-pull
> > +  $ cd ../tt
> > +
> > +(1) activating by --rev BOOKMARK
> > +
> > +  $ hg bookmark -f active-before-pull
> > +  $ hg bookmarks
> > +   * active-before-pull        3:483b76ad4309
> > +
> > +  $ hg pull -u -r active-after-pull
> > +  pulling from $TESTTMP/t (glob)
> > +  searching for changes
> > +  adding changesets
> > +  adding manifests
> > +  adding file changes
> > +  added 1 changesets with 1 changes to 1 files
> > +  adding remote bookmark active-after-pull
> > +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > +  (activating bookmark active-after-pull)
> > +
> > +  $ hg parents -q
> > +  4:f815b3da6163
> > +  $ hg bookmarks
> > +   * active-after-pull         4:f815b3da6163
> > +     active-before-pull        3:483b76ad4309
> > +
> > +(discard pulled changes)
> > +
> > +  $ hg update -q 483b76ad4309
> > +  $ hg rollback -q
> > +
> > +(2) activating by URL#BOOKMARK
> > +
> > +  $ hg bookmark -f active-before-pull
> > +  $ hg bookmarks
> > +   * active-before-pull        3:483b76ad4309
> > +
> > +  $ hg pull -u $TESTTMP/t#active-after-pull
> > +  pulling from $TESTTMP/t (glob)
> > +  searching for changes
> > +  adding changesets
> > +  adding manifests
> > +  adding file changes
> > +  added 1 changesets with 1 changes to 1 files
> > +  adding remote bookmark active-after-pull
> > +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > +  (activating bookmark active-after-pull)
> > +
> > +  $ hg parents -q
> > +  4:f815b3da6163
> > +  $ hg bookmarks
> > +   * active-after-pull         4:f815b3da6163
> > +     active-before-pull        3:483b76ad4309
> > +
> >     $ cd ..
> 
> -- 
> Pierre-Yves David
> 

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5566,6 +5566,10 @@  def postincoming(ui, repo, modheads, opt
                 pass # no-op update
             elif bookmarks.update(repo, [movemarkfrom], repo['.'].node()):
                 ui.status(_("updating bookmark %s\n") % repo._activebookmark)
+        elif brev in repo._bookmarks:
+            if brev != repo._activebookmark:
+                ui.status(_("(activating bookmark %s)\n") % brev)
+            bookmarks.activate(repo, brev)
         return ret
     if modheads > 1:
         currentbranchheads = len(repo.branchheads())
diff --git a/tests/test-pull-update.t b/tests/test-pull-update.t
--- a/tests/test-pull-update.t
+++ b/tests/test-pull-update.t
@@ -61,4 +61,66 @@  Should work:
   added 1 changesets with 1 changes to 1 files (-1 heads)
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 
+Similarity between "hg update" and "hg pull -u" in handling bookmark
+====================================================================
+
+Test that updating activates the bookmark, which matches with the
+explicit destination of the update.
+
+  $ echo 4 >> foo
+  $ hg commit -m "#4"
+  $ hg bookmark active-after-pull
+  $ cd ../tt
+
+(1) activating by --rev BOOKMARK
+
+  $ hg bookmark -f active-before-pull
+  $ hg bookmarks
+   * active-before-pull        3:483b76ad4309
+
+  $ hg pull -u -r active-after-pull
+  pulling from $TESTTMP/t (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  adding remote bookmark active-after-pull
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (activating bookmark active-after-pull)
+
+  $ hg parents -q
+  4:f815b3da6163
+  $ hg bookmarks
+   * active-after-pull         4:f815b3da6163
+     active-before-pull        3:483b76ad4309
+
+(discard pulled changes)
+
+  $ hg update -q 483b76ad4309
+  $ hg rollback -q
+
+(2) activating by URL#BOOKMARK
+
+  $ hg bookmark -f active-before-pull
+  $ hg bookmarks
+   * active-before-pull        3:483b76ad4309
+
+  $ hg pull -u $TESTTMP/t#active-after-pull
+  pulling from $TESTTMP/t (glob)
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  adding remote bookmark active-after-pull
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (activating bookmark active-after-pull)
+
+  $ hg parents -q
+  4:f815b3da6163
+  $ hg bookmarks
+   * active-after-pull         4:f815b3da6163
+     active-before-pull        3:483b76ad4309
+
   $ cd ..