autodiff.py
50 lines
| 1.4 KiB
| text/x-python
|
PythonLexer
/ tests / autodiff.py
Patrick Mezard
|
r10189 | # Extension dedicated to test patch.diff() upgrade modes | ||
Gregory Szorc
|
r27281 | |||
from __future__ import absolute_import | ||||
from mercurial import ( | ||||
cmdutil, | ||||
error, | ||||
patch, | ||||
scmutil, | ||||
) | ||||
Patrick Mezard
|
r10189 | |||
Gregory Szorc
|
r21254 | cmdtable = {} | ||
command = cmdutil.command(cmdtable) | ||||
@command('autodiff', | ||||
[('', 'git', '', 'git upgrade mode (yes/no/auto/warn/abort)')], | ||||
'[OPTION]... [FILE]...') | ||||
Patrick Mezard
|
r10189 | def autodiff(ui, repo, *pats, **opts): | ||
Siddharth Agarwal
|
r23692 | diffopts = patch.difffeatureopts(ui, opts) | ||
Patrick Mezard
|
r10189 | 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): | ||||
Pierre-Yves David
|
r26587 | raise error.Abort('losing data for %s' % fn) | ||
Patrick Mezard
|
r10189 | else: | ||
Pierre-Yves David
|
r26587 | raise error.Abort('--git must be yes, no or auto') | ||
Patrick Mezard
|
r10189 | |||
Matt Mackall
|
r14319 | node1, node2 = scmutil.revpair(repo, []) | ||
Matt Mackall
|
r14671 | m = scmutil.match(repo[node2], pats, opts) | ||
Patrick Mezard
|
r10189 | it = patch.diff(repo, node1, node2, match=m, opts=diffopts, | ||
losedatafn=losedatafn) | ||||
for chunk in it: | ||||
ui.write(chunk) | ||||
for fn in sorted(brokenfiles): | ||||
Matt Mackall
|
r17956 | ui.write(('data lost for: %s\n' % fn)) | ||