autodiff.py
46 lines
| 1.3 KiB
| text/x-python
|
PythonLexer
/ tests / autodiff.py
Patrick Mezard
|
r10189 | # Extension dedicated to test patch.diff() upgrade modes | ||
# | ||||
# | ||||
Matt Mackall
|
r14322 | from mercurial import scmutil, patch, util | ||
Patrick Mezard
|
r10189 | |||
def autodiff(ui, repo, *pats, **opts): | ||||
diffopts = patch.diffopts(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 util.Abort('losing data for %s' % fn) | ||||
else: | ||||
raise util.Abort('--git must be yes, no or auto') | ||||
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)) | ||
Patrick Mezard
|
r10189 | |||
cmdtable = { | ||||
"autodiff": | ||||
(autodiff, | ||||
[('', 'git', '', 'git upgrade mode (yes/no/auto/warn/abort)'), | ||||
], | ||||
'[OPTION]... [FILE]...'), | ||||
} | ||||