Re: [PATCH 2 of 2] bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

2016-12-20 Thread Stanislau Hlebik
Excerpts from Pierre-Yves David's message of 2016-12-17 08:33:20 +0100:
> 
> On 12/09/2016 12:31 PM, Stanislau Hlebik wrote:
> > # HG changeset patch
> > # User Stanislau Hlebik 
> > # Date 1481282546 28800
> > #  Fri Dec 09 03:22:26 2016 -0800
> > # Node ID df861963a18c00d72362b415a77a62d2c18660bf
> > # Parent  08ab8f9d0abcbd1b2405ecb0a8670d212866af1f
> > bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)
> >
> > Binary bookmark format should be used internally. It doesn't make sense to 
> > have
> > optional parameters `srchex` and `dsthex`. This patch removes them. It will
> > also be useful for `bookmarks` bundle2 part because unnecessary conversions
> > between hex and bin nodes will be avoided.
> 
> Great, I've put a second acceptance stamp on this changeset and it 
> should show as public shortly.
> 
> There is a couple thing in this patch that highlight the need for extra 
> work on that topic to remove all list key call from the client/server 
> exchange. I'm not sure if we should have something special to track 
> these, but see my comment below.
> 
> > diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
> > --- a/mercurial/bookmarks.py
> > +++ b/mercurial/bookmarks.py
> > @@ -391,8 +391,7 @@
> >  finally:
> >  lockmod.release(tr, l, w)
> >
> > -def comparebookmarks(repo, srcmarks, dstmarks,
> > - srchex=None, dsthex=None, targets=None):
> > +def comparebookmarks(repo, srcmarks, dstmarks, targets=None):
> >  '''Compare bookmarks between srcmarks and dstmarks
> >
> >  This returns tuple "(addsrc, adddst, advsrc, advdst, diverge,
> > @@ -415,19 +414,9 @@
> >  Changeset IDs of tuples in "addsrc", "adddst", "differ" or
> >   "invalid" list may be unknown for repo.
> >
> > -This function expects that "srcmarks" and "dstmarks" return
> > -changeset ID in 40 hexadecimal digit string for specified
> > -bookmark. If not so (e.g. bmstore "repo._bookmarks" returning
> > -binary value), "srchex" or "dsthex" should be specified to convert
> > -into such form.
> > -
> >  If "targets" is specified, only bookmarks listed in it are
> >  examined.
> >  '''
> > -if not srchex:
> > -srchex = lambda x: x
> > -if not dsthex:
> > -dsthex = lambda x: x
> >
> >  if targets:
> >  bset = set(targets)
> > @@ -449,14 +438,14 @@
> >  for b in sorted(bset):
> >  if b not in srcmarks:
> >  if b in dstmarks:
> > -adddst((b, None, dsthex(dstmarks[b])))
> > +adddst((b, None, dstmarks[b]))
> >  else:
> >  invalid((b, None, None))
> >  elif b not in dstmarks:
> > -addsrc((b, srchex(srcmarks[b]), None))
> > +addsrc((b, srcmarks[b], None))
> >  else:
> > -scid = srchex(srcmarks[b])
> > -dcid = dsthex(dstmarks[b])
> > +scid = srcmarks[b]
> > +dcid = dstmarks[b]
> >  if scid == dcid:
> >  same((b, scid, dcid))
> >  elif scid in repo and dcid in repo:
> > @@ -507,11 +496,17 @@
> >
> >  return None
> >
> > +def unhexlifybookmarks(marks):
> > +binremotemarks = {}
> > +for name, node in marks.items():
> > +binremotemarks[name] = bin(node)
> > +return binremotemarks
> > +
> 
> This function looked suspicious and was the start of my quest to know 
> more. My thinking seeing this was, "wait", if we moved internal to 
> binary why do we still needs it?
> 
> Keep scrolling for the result of that investigation.
> 
> >  def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()):
> >  ui.debug("checking for updated bookmarks\n")
> >  localmarks = repo._bookmarks
> >  (addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same
> > - ) = comparebookmarks(repo, remotemarks, localmarks, dsthex=hex)
> > +) = comparebookmarks(repo, remotemarks, localmarks)
> >
> >  status = ui.status
> >  warn = ui.warn
> > @@ -522,15 +517,15 @@
> >  changed = []
> >  for b, scid, dcid in addsrc:
> >  if scid in repo: # add remote bookmarks for changes we already have
> > -changed.append((b, bin(scid), status,
> > +changed.append((b, scid, status,
> >  _("adding remote bookmark %s\n") % (b)))
> >  elif b in explicit:
> >  explicit.remove(b)
> >  ui.warn(_("remote bookmark %s points to locally missing %s\n")
> > -% (b, scid[:12]))
> > +% (b, hex(scid)[:12]))
> >
> >  for b, scid, dcid in advsrc:
> > -changed.append((b, bin(scid), status,
> > +changed.append((b, scid, status,
> >  _("updating bookmark %s\n") % (b)))
> >  # remove normal movement from explicit set
> >  explicit.difference_update(d[0] for d in changed)
> > @@ -538,13 +533,12 @@
> >  for b, scid, d

Re: [PATCH 2 of 2] bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

2016-12-16 Thread Pierre-Yves David



On 12/09/2016 12:31 PM, Stanislau Hlebik wrote:

# HG changeset patch
# User Stanislau Hlebik 
# Date 1481282546 28800
#  Fri Dec 09 03:22:26 2016 -0800
# Node ID df861963a18c00d72362b415a77a62d2c18660bf
# Parent  08ab8f9d0abcbd1b2405ecb0a8670d212866af1f
bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

Binary bookmark format should be used internally. It doesn't make sense to have
optional parameters `srchex` and `dsthex`. This patch removes them. It will
also be useful for `bookmarks` bundle2 part because unnecessary conversions
between hex and bin nodes will be avoided.


Great, I've put a second acceptance stamp on this changeset and it 
should show as public shortly.


There is a couple thing in this patch that highlight the need for extra 
work on that topic to remove all list key call from the client/server 
exchange. I'm not sure if we should have something special to track 
these, but see my comment below.



diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
--- a/mercurial/bookmarks.py
+++ b/mercurial/bookmarks.py
@@ -391,8 +391,7 @@
 finally:
 lockmod.release(tr, l, w)

-def comparebookmarks(repo, srcmarks, dstmarks,
- srchex=None, dsthex=None, targets=None):
+def comparebookmarks(repo, srcmarks, dstmarks, targets=None):
 '''Compare bookmarks between srcmarks and dstmarks

 This returns tuple "(addsrc, adddst, advsrc, advdst, diverge,
@@ -415,19 +414,9 @@
 Changeset IDs of tuples in "addsrc", "adddst", "differ" or
  "invalid" list may be unknown for repo.

-This function expects that "srcmarks" and "dstmarks" return
-changeset ID in 40 hexadecimal digit string for specified
-bookmark. If not so (e.g. bmstore "repo._bookmarks" returning
-binary value), "srchex" or "dsthex" should be specified to convert
-into such form.
-
 If "targets" is specified, only bookmarks listed in it are
 examined.
 '''
-if not srchex:
-srchex = lambda x: x
-if not dsthex:
-dsthex = lambda x: x

 if targets:
 bset = set(targets)
@@ -449,14 +438,14 @@
 for b in sorted(bset):
 if b not in srcmarks:
 if b in dstmarks:
-adddst((b, None, dsthex(dstmarks[b])))
+adddst((b, None, dstmarks[b]))
 else:
 invalid((b, None, None))
 elif b not in dstmarks:
-addsrc((b, srchex(srcmarks[b]), None))
+addsrc((b, srcmarks[b], None))
 else:
-scid = srchex(srcmarks[b])
-dcid = dsthex(dstmarks[b])
+scid = srcmarks[b]
+dcid = dstmarks[b]
 if scid == dcid:
 same((b, scid, dcid))
 elif scid in repo and dcid in repo:
@@ -507,11 +496,17 @@

 return None

+def unhexlifybookmarks(marks):
+binremotemarks = {}
+for name, node in marks.items():
+binremotemarks[name] = bin(node)
+return binremotemarks
+


This function looked suspicious and was the start of my quest to know 
more. My thinking seeing this was, "wait", if we moved internal to 
binary why do we still needs it?


Keep scrolling for the result of that investigation.


 def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()):
 ui.debug("checking for updated bookmarks\n")
 localmarks = repo._bookmarks
 (addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same
- ) = comparebookmarks(repo, remotemarks, localmarks, dsthex=hex)
+) = comparebookmarks(repo, remotemarks, localmarks)

 status = ui.status
 warn = ui.warn
@@ -522,15 +517,15 @@
 changed = []
 for b, scid, dcid in addsrc:
 if scid in repo: # add remote bookmarks for changes we already have
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("adding remote bookmark %s\n") % (b)))
 elif b in explicit:
 explicit.remove(b)
 ui.warn(_("remote bookmark %s points to locally missing %s\n")
-% (b, scid[:12]))
+% (b, hex(scid)[:12]))

 for b, scid, dcid in advsrc:
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("updating bookmark %s\n") % (b)))
 # remove normal movement from explicit set
 explicit.difference_update(d[0] for d in changed)
@@ -538,13 +533,12 @@
 for b, scid, dcid in diverge:
 if b in explicit:
 explicit.discard(b)
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("importing bookmark %s\n") % (b)))
 else:
-snode = bin(scid)
-db = _diverge(ui, b, path, localmarks, snode)
+db = _diverge(ui, b, path, localmarks, scid)
 if db:
-changed.append((db, snode, warn,
+changed.append((db, s

Re: [PATCH 2 of 2] bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

2016-12-13 Thread Augie Fackler
On Fri, Dec 09, 2016 at 03:31:45AM -0800, Stanislau Hlebik wrote:
> # HG changeset patch
> # User Stanislau Hlebik 
> # Date 1481282546 28800
> #  Fri Dec 09 03:22:26 2016 -0800
> # Node ID df861963a18c00d72362b415a77a62d2c18660bf
> # Parent  08ab8f9d0abcbd1b2405ecb0a8670d212866af1f
> bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

I've queued these two, thanks.
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH 2 of 2] bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

2016-12-09 Thread Stanislau Hlebik
# HG changeset patch
# User Stanislau Hlebik 
# Date 1481282546 28800
#  Fri Dec 09 03:22:26 2016 -0800
# Node ID df861963a18c00d72362b415a77a62d2c18660bf
# Parent  08ab8f9d0abcbd1b2405ecb0a8670d212866af1f
bookmarks: make bookmarks.comparebookmarks accept binary nodes (API)

Binary bookmark format should be used internally. It doesn't make sense to have
optional parameters `srchex` and `dsthex`. This patch removes them. It will
also be useful for `bookmarks` bundle2 part because unnecessary conversions
between hex and bin nodes will be avoided.

diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py
--- a/mercurial/bookmarks.py
+++ b/mercurial/bookmarks.py
@@ -391,8 +391,7 @@
 finally:
 lockmod.release(tr, l, w)
 
-def comparebookmarks(repo, srcmarks, dstmarks,
- srchex=None, dsthex=None, targets=None):
+def comparebookmarks(repo, srcmarks, dstmarks, targets=None):
 '''Compare bookmarks between srcmarks and dstmarks
 
 This returns tuple "(addsrc, adddst, advsrc, advdst, diverge,
@@ -415,19 +414,9 @@
 Changeset IDs of tuples in "addsrc", "adddst", "differ" or
  "invalid" list may be unknown for repo.
 
-This function expects that "srcmarks" and "dstmarks" return
-changeset ID in 40 hexadecimal digit string for specified
-bookmark. If not so (e.g. bmstore "repo._bookmarks" returning
-binary value), "srchex" or "dsthex" should be specified to convert
-into such form.
-
 If "targets" is specified, only bookmarks listed in it are
 examined.
 '''
-if not srchex:
-srchex = lambda x: x
-if not dsthex:
-dsthex = lambda x: x
 
 if targets:
 bset = set(targets)
@@ -449,14 +438,14 @@
 for b in sorted(bset):
 if b not in srcmarks:
 if b in dstmarks:
-adddst((b, None, dsthex(dstmarks[b])))
+adddst((b, None, dstmarks[b]))
 else:
 invalid((b, None, None))
 elif b not in dstmarks:
-addsrc((b, srchex(srcmarks[b]), None))
+addsrc((b, srcmarks[b], None))
 else:
-scid = srchex(srcmarks[b])
-dcid = dsthex(dstmarks[b])
+scid = srcmarks[b]
+dcid = dstmarks[b]
 if scid == dcid:
 same((b, scid, dcid))
 elif scid in repo and dcid in repo:
@@ -507,11 +496,17 @@
 
 return None
 
+def unhexlifybookmarks(marks):
+binremotemarks = {}
+for name, node in marks.items():
+binremotemarks[name] = bin(node)
+return binremotemarks
+
 def updatefromremote(ui, repo, remotemarks, path, trfunc, explicit=()):
 ui.debug("checking for updated bookmarks\n")
 localmarks = repo._bookmarks
 (addsrc, adddst, advsrc, advdst, diverge, differ, invalid, same
- ) = comparebookmarks(repo, remotemarks, localmarks, dsthex=hex)
+) = comparebookmarks(repo, remotemarks, localmarks)
 
 status = ui.status
 warn = ui.warn
@@ -522,15 +517,15 @@
 changed = []
 for b, scid, dcid in addsrc:
 if scid in repo: # add remote bookmarks for changes we already have
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("adding remote bookmark %s\n") % (b)))
 elif b in explicit:
 explicit.remove(b)
 ui.warn(_("remote bookmark %s points to locally missing %s\n")
-% (b, scid[:12]))
+% (b, hex(scid)[:12]))
 
 for b, scid, dcid in advsrc:
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("updating bookmark %s\n") % (b)))
 # remove normal movement from explicit set
 explicit.difference_update(d[0] for d in changed)
@@ -538,13 +533,12 @@
 for b, scid, dcid in diverge:
 if b in explicit:
 explicit.discard(b)
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("importing bookmark %s\n") % (b)))
 else:
-snode = bin(scid)
-db = _diverge(ui, b, path, localmarks, snode)
+db = _diverge(ui, b, path, localmarks, scid)
 if db:
-changed.append((db, snode, warn,
+changed.append((db, scid, warn,
 _("divergent bookmark %s stored as %s\n") %
 (b, db)))
 else:
@@ -553,13 +547,13 @@
 for b, scid, dcid in adddst + advdst:
 if b in explicit:
 explicit.discard(b)
-changed.append((b, bin(scid), status,
+changed.append((b, scid, status,
 _("importing bookmark %s\n") % (b)))
 for b, scid, dcid in differ:
 if b in explicit:
 explicit.remove(b)
 ui.warn(_("remote bookmark %s points to locally missing %s\n")
-