Comments
Patch
@@ -76,6 +76,22 @@
def _isselectivepull(ui):
return ui.configbool('remotenames', 'selectivepull', False)
+def _trypullremotebookmark(mayberemotebookmark, repo, ui):
+ ui.status(_('`%s` not found: assuming it is a remote bookmark '
+ 'and trying to pull it\n') % mayberemotebookmark)
+ sourcerenames = dict((v, k) for k, v in _getrenames(ui).iteritems())
+ remote, bookmarkname = splitremotename(mayberemotebookmark)
+ paths = dict((path, url) for path, url in ui.configitems('paths'))
+ if remote in sourcerenames:
+ source = sourcerenames[remote]
+ elif remote in paths:
+ source = remote
+ else:
+ source = 'default'
+ bookmarkname = mayberemotebookmark
+ commands.pull(ui, repo, source=source, bookmark=[bookmarkname])
+ ui.status(_('`%s` found remotely\n') % mayberemotebookmark)
+
def expull(orig, repo, remote, *args, **kwargs):
remotebookmarks = remote.listkeys('bookmarks')
if _isselectivepull(repo.ui):
@@ -217,6 +233,17 @@
return bookmarks
def updatecmd(orig, ui, repo, node=None, rev=None, **kwargs):
+ if rev and node:
+ raise error.Abort(_("please specify just one revision"))
+
+ if _isselectivepull(repo.ui) and not kwargs.get('date'):
+ # Make sure that rev or node is present in the repo.
+ # Otherwise pull it from remote
+ try:
+ scmutil.revsingle(repo, rev or node)
+ except (error.RepoLookupError, error.Abort):
+ _trypullremotebookmark(rev or node, repo, ui)
+
book = kwargs.get('bookmark')
if book:
del kwargs['bookmark']
@@ -156,3 +156,46 @@
$ hg bookmarks --remote
default/master 1:0238718db2b1
secondremote/master 1:0238718db2b1
+
+Update to the remote bookmark
+ $ hg update thirdbook
+ `thirdbook` not found: assuming it is a remote bookmark and trying to pull it
+ pulling from ssh://user@dummy/remoterepo
+ no changes found
+ `thirdbook` found remotely
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg book --verbose
+ no bookmarks set
+ $ hg book --remote
+ default/master 1:0238718db2b1
+ default/thirdbook 0:1449e7934ec1
+ secondremote/master 1:0238718db2b1
+
+Trying to update to unknown bookmark
+ $ hg update unknownbook
+ `unknownbook` not found: assuming it is a remote bookmark and trying to pull it
+ pulling from ssh://user@dummy/remoterepo
+ abort: remote bookmark unknownbook not found!
+ [255]
+
+Update to the remote bookmark from secondremote
+ $ hg update secondremote/secondbook
+ `secondremote/secondbook` not found: assuming it is a remote bookmark and trying to pull it
+ pulling from ssh://user@dummy/secondremoterepo
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ (run 'hg update' to get a working copy)
+ `secondremote/secondbook` found remotely
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg book --remote
+ default/master 1:0238718db2b1
+ default/thirdbook 0:1449e7934ec1
+ secondremote/master 1:0238718db2b1
+ secondremote/secondbook 4:0022441e80e5
+
+Update make sure revsets work
+ $ hg up '.^'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved