|
1 # Extension dedicated to test patch.diff() upgrade modes |
|
2 # |
|
3 # |
|
4 from mercurial import cmdutil, patch, util |
|
5 |
|
6 def autodiff(ui, repo, *pats, **opts): |
|
7 diffopts = patch.diffopts(ui, opts) |
|
8 git = opts.get('git', 'no') |
|
9 brokenfiles = set() |
|
10 losedatafn = None |
|
11 if git in ('yes', 'no'): |
|
12 diffopts.git = git == 'yes' |
|
13 diffopts.upgrade = False |
|
14 elif git == 'auto': |
|
15 diffopts.git = False |
|
16 diffopts.upgrade = True |
|
17 elif git == 'warn': |
|
18 diffopts.git = False |
|
19 diffopts.upgrade = True |
|
20 def losedatafn(fn=None, **kwargs): |
|
21 brokenfiles.add(fn) |
|
22 return True |
|
23 elif git == 'abort': |
|
24 diffopts.git = False |
|
25 diffopts.upgrade = True |
|
26 def losedatafn(fn=None, **kwargs): |
|
27 raise util.Abort('losing data for %s' % fn) |
|
28 else: |
|
29 raise util.Abort('--git must be yes, no or auto') |
|
30 |
|
31 node1, node2 = cmdutil.revpair(repo, []) |
|
32 m = cmdutil.match(repo, pats, opts) |
|
33 it = patch.diff(repo, node1, node2, match=m, opts=diffopts, |
|
34 losedatafn=losedatafn) |
|
35 for chunk in it: |
|
36 ui.write(chunk) |
|
37 for fn in sorted(brokenfiles): |
|
38 ui.write('data lost for: %s\n' % fn) |
|
39 |
|
40 cmdtable = { |
|
41 "autodiff": |
|
42 (autodiff, |
|
43 [('', 'git', '', 'git upgrade mode (yes/no/auto/warn/abort)'), |
|
44 ], |
|
45 '[OPTION]... [FILE]...'), |
|
46 } |