contrib/simplemerge
changeset 34051 d2fc88426d21
parent 34050 b4226ad98366
child 37120 a8a902d7176e
equal deleted inserted replaced
34050:b4226ad98366 34051:d2fc88426d21
     7 import hgdemandimport
     7 import hgdemandimport
     8 hgdemandimport.enable()
     8 hgdemandimport.enable()
     9 
     9 
    10 from mercurial.i18n import _
    10 from mercurial.i18n import _
    11 from mercurial import (
    11 from mercurial import (
       
    12     context,
    12     error,
    13     error,
    13     fancyopts,
    14     fancyopts,
    14     simplemerge,
    15     simplemerge,
    15     ui as uimod,
    16     ui as uimod,
    16     util,
    17     util,
    47                          '%s' % desc))
    48                          '%s' % desc))
    48     opts_len = max([len(opt[0]) for opt in out_opts])
    49     opts_len = max([len(opt[0]) for opt in out_opts])
    49     for first, second in out_opts:
    50     for first, second in out_opts:
    50         sys.stdout.write(' %-*s  %s\n' % (opts_len, first, second))
    51         sys.stdout.write(' %-*s  %s\n' % (opts_len, first, second))
    51 
    52 
    52 class filebackedctx(object):
       
    53     """simplemerge requires context-like objects"""
       
    54     def __init__(self, path):
       
    55         self._path = path
       
    56 
       
    57     def decodeddata(self):
       
    58         with open(self._path, "rb") as f:
       
    59             return f.read()
       
    60 
       
    61     def flags(self):
       
    62         return ''
       
    63 
       
    64     def path(self):
       
    65         return self._path
       
    66 
       
    67     def write(self, data, flags):
       
    68         assert not flags
       
    69         with open(self._path, "w") as f:
       
    70             f.write(data)
       
    71 
       
    72 try:
    53 try:
    73     for fp in (sys.stdin, sys.stdout, sys.stderr):
    54     for fp in (sys.stdin, sys.stdout, sys.stderr):
    74         util.setbinary(fp)
    55         util.setbinary(fp)
    75 
    56 
    76     opts = {}
    57     opts = {}
    83         sys.exit(0)
    64         sys.exit(0)
    84     if len(args) != 3:
    65     if len(args) != 3:
    85             raise ParseError(_('wrong number of arguments'))
    66             raise ParseError(_('wrong number of arguments'))
    86     local, base, other = args
    67     local, base, other = args
    87     sys.exit(simplemerge.simplemerge(uimod.ui.load(),
    68     sys.exit(simplemerge.simplemerge(uimod.ui.load(),
    88                                      filebackedctx(local),
    69                                      context.arbitraryfilectx(local),
    89                                      filebackedctx(base),
    70                                      context.arbitraryfilectx(base),
    90                                      filebackedctx(other),
    71                                      context.arbitraryfilectx(other),
    91                                      **opts))
    72                                      **opts))
    92 except ParseError as e:
    73 except ParseError as e:
    93     sys.stdout.write("%s: %s\n" % (sys.argv[0], e))
    74     sys.stdout.write("%s: %s\n" % (sys.argv[0], e))
    94     showhelp()
    75     showhelp()
    95     sys.exit(1)
    76     sys.exit(1)