[PATCH 2 of 2 remotenames-ext] remotenames: selectivepull, add _listremotebookmarks
Stanislau Hlebik
stash at fb.com
Tue Feb 21 15:23:24 UTC 2017
# HG changeset patch
# User Stanislau Hlebik <stash at fb.com>
# Date 1487690190 28800
# Tue Feb 21 07:16:30 2017 -0800
# Node ID f49560facf4802449ab15aaf9b12287754619990
# Parent cf04161615a48d42a2bb6181060ae9be8ceaa467
remotenames: selectivepull, add _listremotebookmarks
Adding a separate function to fetch only selected bookmarks from the server
allows extensions to wrap it. For example, infinitepush extensions
(https://bitbucket.org/facebook/hg-experimental/src/
98384e8d1db6534f7e5df08080f8ebf57688d380/infinitepush/?at=default) can wrap
this function and return bookmarks that are not present on hg server but
stored in a separate storage.
diff --git a/remotenames.py b/remotenames.py
--- a/remotenames.py
+++ b/remotenames.py
@@ -85,19 +85,18 @@
def _isselectivepull(ui):
return ui.configbool('remotenames', 'selectivepull', False)
-def _getselectivepulldefaultbookmarks(ui, remotebookmarks):
+def _getselectivepulldefaultbookmarks(ui):
default_books = ui.configlist('remotenames', 'selectivepulldefault')
if not default_books:
raise error.Abort(_('no default bookmarks specified for selectivepull'))
+ return default_books
+def _listremotebookmarks(remote, bookmarks):
+ remotebookmarks = remote.listkeys('bookmarks')
result = {}
- for default_book in default_books:
- if default_book in remotebookmarks:
- result[default_book] = remotebookmarks[default_book]
-
- if not default_books:
- raise error.Abort(
- _('default bookmarks %s are not found on remote') % default_books)
+ for book in bookmarks:
+ if book in remotebookmarks:
+ result[book] = remotebookmarks[book]
return result
def _trypullremotebookmark(mayberemotebookmark, repo, ui):
@@ -122,7 +121,6 @@
ui.warn(_('`%s` found remotely\n') % mayberemotebookmark)
def expull(orig, repo, remote, *args, **kwargs):
- remotebookmarks = remote.listkeys('bookmarks')
if _isselectivepull(repo.ui):
# if selectivepull is enabled then we don't save all of the remote
# bookmarks in remotenames file. Instead we save only bookmarks that
@@ -135,23 +133,21 @@
# Selectivepull is helpful when server has too many remote bookmarks
# because it may slow down clients.
path = activepath(repo.ui, remote)
- bookmarks = {}
+ remotebookmarkslist = []
if repo.vfs.exists(_selectivepullenabledfile):
# 'selectivepullenabled' file is used for transition between
# non-selectivepull repo to selectivepull repo. It is used as
# indicator to whether "non-interesting" bookmarks were removed
# from remotenames file.
- for bookmark in readbookmarknames(repo, path):
- if bookmark in remotebookmarks:
- bookmarks[bookmark] = remotebookmarks[bookmark]
- if not bookmarks:
- bookmarks = _getselectivepulldefaultbookmarks(repo.ui,
- remotebookmarks)
+ remotebookmarkslist = list(readbookmarknames(repo, path))
+ if not remotebookmarkslist:
+ remotebookmarkslist = _getselectivepulldefaultbookmarks(repo.ui)
if kwargs.get('bookmarks'):
- for bookmark in kwargs['bookmarks']:
- bookmarks[bookmark] = remotebookmarks[bookmark]
+ remotebookmarkslist.extend(kwargs['bookmarks'])
+ bookmarks = _listremotebookmarks(remote, remotebookmarkslist)
else:
+ bookmarks = _listremotebookmarks(remote, remotebookmarkslist)
heads = kwargs.get('heads') or []
# heads may be passed as positional args
if len(args) > 0:
@@ -163,7 +159,7 @@
kwargs['bookmarks'] = bookmarks
kwargs['heads'] = heads
else:
- bookmarks = remotebookmarks
+ bookmarks = remote.listkeys('bookmarks')
res = orig(repo, remote, *args, **kwargs)
pullremotenames(repo, remote, bookmarks)
More information about the Mercurial-devel
mailing list