Patchwork [01,of,15,V2] pull: store binary node in pullop.remotebookmarks

login
register
mail settings
Submitter Boris Feld
Date Nov. 2, 2017, 1:17 p.m.
Message ID <8c9a9eecdcd61401a160.1509628678@FB>
Download mbox | patch
Permalink /patch/25329/
State Accepted
Headers show

Comments

Boris Feld - Nov. 2, 2017, 1:17 p.m.
# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1508230905 -7200
#      Tue Oct 17 11:01:45 2017 +0200
# Node ID 8c9a9eecdcd61401a1604a08a5272f7dabd4b912
# Parent  3ce0e4b51f789eff195ec900a07c1fa5e8d5c5f2
# EXP-Topic b2.bookmarks
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 8c9a9eecdcd6
pull: store binary node in pullop.remotebookmarks

The internal representation of bookmark value is binary. The fact we stored
'hex' was an implementation detail from using pushkey.

We move the values in 'pullop.remotebookmarks' to binary before adding a way to
exchange bookmarks not based on pushkey.
Augie Fackler - Nov. 10, 2017, 10:31 p.m.
On Thu, Nov 02, 2017 at 02:17:58PM +0100, Boris Feld wrote:
> # HG changeset patch
> # User Boris Feld <boris.feld@octobus.net>
> # Date 1508230905 -7200
> #      Tue Oct 17 11:01:45 2017 +0200
> # Node ID 8c9a9eecdcd61401a1604a08a5272f7dabd4b912
> # Parent  3ce0e4b51f789eff195ec900a07c1fa5e8d5c5f2
> # EXP-Topic b2.bookmarks
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 8c9a9eecdcd6
> pull: store binary node in pullop.remotebookmarks

I've taken this one, thanks.

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -3973,12 +3973,13 @@  def pull(ui, repo, source="default", **o
             # not ending up with the name of the bookmark because of a race
             # condition on the server. (See issue 4689 for details)
             remotebookmarks = other.listkeys('bookmarks')
+            remotebookmarks = bookmarks.unhexlifybookmarks(remotebookmarks)
             pullopargs['remotebookmarks'] = remotebookmarks
             for b in opts['bookmark']:
                 b = repo._bookmarks.expandname(b)
                 if b not in remotebookmarks:
                     raise error.Abort(_('remote bookmark %s not found!') % b)
-                revs.append(remotebookmarks[b])
+                revs.append(hex(remotebookmarks[b]))
 
         if revs:
             try:
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1348,7 +1348,8 @@  def _pullbookmarkbundle1(pullop):
         # all known bundle2 servers now support listkeys, but lets be nice with
         # new implementation.
         return
-    pullop.remotebookmarks = pullop.remote.listkeys('bookmarks')
+    books = pullop.remote.listkeys('bookmarks')
+    pullop.remotebookmarks = bookmod.unhexlifybookmarks(books)
 
 
 @pulldiscovery('changegroup')
@@ -1459,7 +1460,7 @@  def _pullbundle2(pullop):
     # processing bookmark update
     for namespace, value in op.records['listkeys']:
         if namespace == 'bookmarks':
-            pullop.remotebookmarks = value
+            pullop.remotebookmarks = bookmod.unhexlifybookmarks(value)
 
     # bookmark data were either already there or pulled in the bundle
     if pullop.remotebookmarks is not None:
@@ -1552,7 +1553,6 @@  def _pullbookmarks(pullop):
     pullop.stepsdone.add('bookmarks')
     repo = pullop.repo
     remotebookmarks = pullop.remotebookmarks
-    remotebookmarks = bookmod.unhexlifybookmarks(remotebookmarks)
     bookmod.updatefromremote(repo.ui, repo, remotebookmarks,
                              pullop.remote.url(),
                              pullop.gettransaction,