##// END OF EJS Templates
errors: raise InputError on bad revset to revrange() iff provided by the user...
errors: raise InputError on bad revset to revrange() iff provided by the user Most callers of `scmutil.revrange()` pass in a revset provided by the user. If there are problems resolving that, it should result in an `InputError` and exit code 10 (when using detailed exit codes). However, there are also some callers that pass in revsets not provided by the user. `InputError` is not appropriate in those cases. This patch therefore introduces a wrapper around `scmutil.revrange()` that simply converts the exception type. I put it in `logcmdutil.py` since that seems to be the lowest-level module in the (poorly defined) UI layer. Differential Revision: https://phab.mercurial-scm.org/D11560

File last commit:

r43346:2372284d default
r48928:5ced12cf default
Show More
autodiff.py
65 lines | 1.5 KiB | text/x-python | PythonLexer
# Extension dedicated to test patch.diff() upgrade modes
from __future__ import absolute_import
from mercurial import (
error,
patch,
pycompat,
registrar,
scmutil,
)
cmdtable = {}
command = registrar.command(cmdtable)
@command(
b'autodiff',
[(b'', b'git', b'', b'git upgrade mode (yes/no/auto/warn/abort)')],
b'[OPTION]... [FILE]...',
)
def autodiff(ui, repo, *pats, **opts):
opts = pycompat.byteskwargs(opts)
diffopts = patch.difffeatureopts(ui, opts)
git = opts.get(b'git', b'no')
brokenfiles = set()
losedatafn = None
if git in (b'yes', b'no'):
diffopts.git = git == b'yes'
diffopts.upgrade = False
elif git == b'auto':
diffopts.git = False
diffopts.upgrade = True
elif git == b'warn':
diffopts.git = False
diffopts.upgrade = True
def losedatafn(fn=None, **kwargs):
brokenfiles.add(fn)
return True
elif git == b'abort':
diffopts.git = False
diffopts.upgrade = True
def losedatafn(fn=None, **kwargs):
raise error.Abort(b'losing data for %s' % fn)
else:
raise error.Abort(b'--git must be yes, no or auto')
ctx1, ctx2 = scmutil.revpair(repo, [])
m = scmutil.match(ctx2, pats, opts)
it = patch.diff(
repo,
ctx1.node(),
ctx2.node(),
match=m,
opts=diffopts,
losedatafn=losedatafn,
)
for chunk in it:
ui.write(chunk)
for fn in sorted(brokenfiles):
ui.write((b'data lost for: %s\n' % fn))