mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
30913031d4
The home of 'Abort' is 'error' not 'util' however, a lot of code seems to be confused about that and gives all the credit to 'util' instead of the hardworking 'error'. In a spirit of equity, we break the cycle of injustice and give back to 'error' the respect it deserves. And screw that 'util' poser. For great justice.
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
# Extension dedicated to test patch.diff() upgrade modes
|
|
|
|
from __future__ import absolute_import
|
|
|
|
from mercurial import (
|
|
error,
|
|
patch,
|
|
registrar,
|
|
scmutil,
|
|
)
|
|
|
|
cmdtable = {}
|
|
command = registrar.command(cmdtable)
|
|
|
|
@command('autodiff',
|
|
[('', 'git', '', 'git upgrade mode (yes/no/auto/warn/abort)')],
|
|
'[OPTION]... [FILE]...')
|
|
def autodiff(ui, repo, *pats, **opts):
|
|
diffopts = patch.difffeatureopts(ui, opts)
|
|
git = opts.get('git', 'no')
|
|
brokenfiles = set()
|
|
losedatafn = None
|
|
if git in ('yes', 'no'):
|
|
diffopts.git = git == 'yes'
|
|
diffopts.upgrade = False
|
|
elif git == 'auto':
|
|
diffopts.git = False
|
|
diffopts.upgrade = True
|
|
elif git == 'warn':
|
|
diffopts.git = False
|
|
diffopts.upgrade = True
|
|
def losedatafn(fn=None, **kwargs):
|
|
brokenfiles.add(fn)
|
|
return True
|
|
elif git == 'abort':
|
|
diffopts.git = False
|
|
diffopts.upgrade = True
|
|
def losedatafn(fn=None, **kwargs):
|
|
raise error.Abort('losing data for %s' % fn)
|
|
else:
|
|
raise error.Abort('--git must be yes, no or auto')
|
|
|
|
node1, node2 = scmutil.revpair(repo, [])
|
|
m = scmutil.match(repo[node2], pats, opts)
|
|
it = patch.diff(repo, node1, node2, match=m, opts=diffopts,
|
|
losedatafn=losedatafn)
|
|
for chunk in it:
|
|
ui.write(chunk)
|
|
for fn in sorted(brokenfiles):
|
|
ui.write(('data lost for: %s\n' % fn))
|