tests/autodiff.py
changeset 10189 e451e599fbcf
child 14319 b33f3e35efb0
equal deleted inserted replaced
10188:fd6e9c7cd98c 10189:e451e599fbcf
       
     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 }