[PATCH 06 of 10 V10] bundle2: add `bookmarks` part handler
Gregory Szorc
gregory.szorc at gmail.com
Mon Nov 21 22:22:43 EST 2016
On Sun, Nov 20, 2016 at 4:13 AM, Stanislau Hlebik <stash at fb.com> wrote:
> # HG changeset patch
> # User Stanislau Hlebik <stash at fb.com>
> # Date 1479643450 28800
> # Sun Nov 20 04:04:10 2016 -0800
> # Node ID 866281dae2407308c19c7c3109bb5501b940ee67
> # Parent 57d7f92db34461da87850e26d831d2d235282356
> bundle2: add `bookmarks` part handler
>
> Applies bookmarks part to the local repo. `processbookmarksmode` determines
> how remote bookmarks are handled. They are either ignored ('ignore' mode),
> diverged ('diverge' mode) or applied ('apply' mode).
>
> diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
> --- a/mercurial/bundle2.py
> +++ b/mercurial/bundle2.py
> @@ -155,6 +155,7 @@
>
> from .i18n import _
> from . import (
> + bookmarks as bookmod,
> changegroup,
> error,
> obsolete,
> @@ -287,13 +288,19 @@
> * a way to construct a bundle response when applicable.
> """
>
> - def __init__(self, repo, transactiongetter, captureoutput=True):
> + def __init__(self, repo, transactiongetter, captureoutput=True,
> + behavior=None):
> + """
> + `behavior` is a dictionary that is passed to part handlers to
> tweak
> + their behaviour
> + """
> self.repo = repo
> self.ui = repo.ui
> self.records = unbundlerecords()
> self.gettransaction = transactiongetter
> self.reply = None
> self.captureoutput = captureoutput
> + self.behavior = behavior or {}
>
> class TransactionUnavailable(RuntimeError):
> pass
> @@ -1616,3 +1623,36 @@
>
> cache.write()
> op.ui.debug('applied %i hgtags fnodes cache entries\n' % count)
> +
> + at parthandler('bookmarks')
> +def handlebookmarks(op, inpart):
> + """Processes bookmarks part.
> +
> + `processbookmarksmode` determines how remote bookmarks are handled.
> They are
> + either ignored ('ignore' mode), diverged ('diverge' mode) or applied
> + ('apply' mode). 'ignore' mode is used to get bookmarks and process
> them
> + later, 'diverge' mode is used to process bookmarks during pull,
> 'apply'
> + mode is used during push.
> + """
> +
> + bookmarks = {}
> + bookmarks = bookmod.decodebookmarks(inpart.read())
>
The empty dict assignment line can be deleted.
> + processbookmarksmode = op.behavior.get('processbookmarksmode',
> 'ignore')
> + if processbookmarksmode == 'apply':
> + for bookmark, node in bookmarks.items():
> + if node:
> + op.repo._bookmarks[bookmark] = node
> + else:
> + try:
> + del op.repo._bookmarks[bookmark]
> + except KeyError:
> + # ignore if bookmark does not exist
> + pass
> + op.repo._bookmarks.recordchange(op.gettransaction())
> + elif processbookmarksmode == 'diverge':
> + remotepath = op.behavior.get('remotepath', '')
> + explicitbookmarks = op.behavior.get('explicitbookmarks', ())
> + bookmod.updatefromremote(op.ui, op.repo, bookmarks,
> + remotepath, op.gettransaction,
> + explicit=explicitbookmarks)
> + op.records.add('bookmarks', bookmarks)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20161121/44a88036/attachment.html>
More information about the Mercurial-devel
mailing list