##// END OF EJS Templates
pull: improved message issued in case of failed update...
pull: improved message issued in case of failed update When running `hg pull --update`, the update step may fail. Nothing in the error message help to understand the abort is related to the secondary step (update) instead of the primary step (pull). We now add some information to the error message to clarify it comes from the update part. It is useful in various situation (uncommitted changes blocking the update, update to hidden destination, etc...) The pull output is updated from: $ hg pull ../repo-Bob --rev 956063ac4557 --update pulling from ../repo-Bob searching for changes adding changesets adding manifests adding file changes added 2 changesets with 0 changes to 2 files (+1 heads) (2 other changesets obsolete on arrival) abort: filtered revision '6'! to: $ hg pull ../repo-Bob --rev 956063ac4557 --update pulling from ../repo-Bob searching for changes adding changesets adding manifests adding file changes added 2 changesets with 0 changes to 2 files (+1 heads) (2 other changesets obsolete on arrival) abort: cannot update to target: filtered revision '6'! (I am not sure why the actual error, "filtered revision '6'", is not using the more modern format mentioning the obsolescence fate of '6')

File last commit:

r41401:876494fd default
r42299:a362b0b9 default
Show More
storefactory.py
85 lines | 2.5 KiB | text/x-python | PythonLexer
liscju
largefiles: move basestore._openstore into new module to remove cycle
r29305 # This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
import re
from mercurial.i18n import _
from mercurial import (
error,
hg,
util,
)
from . import (
lfutil,
localstore,
wirestore,
)
# During clone this function is passed the src's ui object
# but it needs the dest's ui object so it can read out of
# the config file. Use repo.ui instead.
Boris Feld
largefiles: add support for 'largefiles://' url scheme...
r35580 def openstore(repo=None, remote=None, put=False, ui=None):
if ui is None:
ui = repo.ui
liscju
largefiles: move basestore._openstore into new module to remove cycle
r29305
if not remote:
lfpullsource = getattr(repo, 'lfpullsource', None)
if lfpullsource:
path = ui.expandpath(lfpullsource)
elif put:
path = ui.expandpath('default-push', 'default')
else:
path = ui.expandpath('default')
# ui.expandpath() leaves 'default-push' and 'default' alone if
# they cannot be expanded: fallback to the empty string,
# meaning the current directory.
Boris Feld
largefiles: add support for 'largefiles://' url scheme...
r35580 if repo is None:
path = ui.expandpath('default')
path, _branches = hg.parseurl(path)
remote = hg.peer(repo or ui, {}, path)
elif path == 'default-push' or path == 'default':
liscju
largefiles: move basestore._openstore into new module to remove cycle
r29305 remote = repo
else:
path, _branches = hg.parseurl(path)
Boris Feld
largefiles: add support for 'largefiles://' url scheme...
r35580 remote = hg.peer(repo or ui, {}, path)
liscju
largefiles: move basestore._openstore into new module to remove cycle
r29305
# The path could be a scheme so use Mercurial's normal functionality
# to resolve the scheme to a repository and use its path
path = util.safehasattr(remote, 'url') and remote.url() or remote.path
match = _scheme_re.match(path)
if not match: # regular filesystem path
scheme = 'file'
else:
scheme = match.group(1)
try:
storeproviders = _storeprovider[scheme]
except KeyError:
raise error.Abort(_('unsupported URL scheme %r') % scheme)
for classobj in storeproviders:
try:
return classobj(ui, repo, remote)
except lfutil.storeprotonotcapable:
pass
raise error.Abort(_('%s does not appear to be a largefile store') %
util.hidepassword(path))
_storeprovider = {
'file': [localstore.localstore],
'http': [wirestore.wirestore],
'https': [wirestore.wirestore],
'ssh': [wirestore.wirestore],
}
Augie Fackler
largefiles: make scheme regex a bytes regex...
r36328 _scheme_re = re.compile(br'^([a-zA-Z0-9+-.]+)://')
Boris Feld
largefiles: add support for 'largefiles://' url scheme...
r35580
def getlfile(ui, hash):
return util.chunkbuffer(openstore(ui=ui)._get(hash))