[PATCH 3 of 8 V5] bundle2: add `bookmarks` part handler
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Fri Sep 16 15:53:14 UTC 2016
On 09/16/2016 01:10 PM, Stanislau Hlebik wrote:
> # HG changeset patch
> # User Stanislau Hlebik <stash at fb.com>
> # Date 1473954996 25200
> # Thu Sep 15 08:56:36 2016 -0700
> # Node ID 3456cba8a4879e74f3b928df321ce7e7c695fb4c
> # Parent f3fb030f0e4601561ac94137c7481694407db7b7
> bundle2: add `bookmarks` part handler
>
> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
> --- a/mercurial/bundle2.py
> +++ b/mercurial/bundle2.py
> @@ -154,8 +154,12 @@
> import sys
>
> from .i18n import _
> +from .node import (
> + bin,
> +)
> from . import (
> changegroup,
> + encoding,
> error,
> obsolete,
> pushkey,
> @@ -1614,3 +1618,20 @@
>
> cache.write()
> op.ui.debug('applied %i hgtags fnodes cache entries\n' % count)
> +
> + at parthandler('bookmarks')
> +def handlebookmarks(op, inpart):
Please add some docstring to this part.
Greg, do you think we should also update the technical documentation
specification of each part or should the docstring take care of this ?
> + dec = encoding.tolocal
> + bookmarks = {}
> + for bookmarknode in inpart.read().splitlines():
> + book, node = bookmarknode.rsplit(' ', 1)
We should probably stick on binary encoding for bookmark. This would
avoid the need to encode/decode the hex and probably be more extensible
in the future.
> + bookmarks[dec(book)] = node
> + if op.applybookmarks:
> + for bookmark, node in bookmarks.items():
> + if node:
> + op.repo._bookmarks[bookmark] = bin(node)
> + else:
> + del op.repo._bookmarks[bookmark]
> + op.repo._bookmarks.recordchange(op.gettransaction())
You wan to call gettransaction before doing any change. The pushrebase
extension delay the locking until the transaction is actually fetched
and this would expose you to a race here.
As you pointed on IRC, this is no longer trigger the pushkey hooks for
bookmarks. This highlight the fact that:
(1) We should most probably introduces some hook dedicated to bookmark
(2) unfortunatly, we probably need to trigger the pushkey hook even if
we are not using pushkey for BC reason :-(
> + else:
> + op.records.add('bookmarks', bookmarks)
We want to add record in all cases. The record are here to help other
part of the push (eg: handler, hooks) to understand and collaborate with
what happened.
Cheers,
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list