mercurial/mdiff.py
changeset 3023 d838bfac668d
parent 2892 8b02af865990
child 3192 096f1c73cdc3
equal deleted inserted replaced
3018:b9dbbcf8a488 3023:d838bfac668d
    48             setattr(self, k, v)
    48             setattr(self, k, v)
    49 
    49 
    50 defaultopts = diffopts()
    50 defaultopts = diffopts()
    51 
    51 
    52 def unidiff(a, ad, b, bd, fn, r=None, opts=defaultopts):
    52 def unidiff(a, ad, b, bd, fn, r=None, opts=defaultopts):
       
    53     def datetag(date):
       
    54         return opts.git and '\n' or '\t%s\n' % date
       
    55 
    53     if not a and not b: return ""
    56     if not a and not b: return ""
    54     epoch = util.datestr((0, 0))
    57     epoch = util.datestr((0, 0))
    55 
    58 
    56     if not opts.text and (util.binary(a) or util.binary(b)):
    59     if not opts.text and (util.binary(a) or util.binary(b)):
    57         l = ['Binary file %s has changed\n' % fn]
    60         l = ['Binary file %s has changed\n' % fn]
    58     elif not a:
    61     elif not a:
    59         b = splitnewlines(b)
    62         b = splitnewlines(b)
    60         if a is None:
    63         if a is None:
    61             l1 = "--- %s\t%s\n" % ("/dev/null", epoch)
    64             l1 = '--- /dev/null%s' % datetag(epoch)
    62         else:
    65         else:
    63             l1 = "--- %s\t%s\n" % ("a/" + fn, ad)
    66             l1 = "--- %s%s" % ("a/" + fn, datetag(ad))
    64         l2 = "+++ %s\t%s\n" % ("b/" + fn, bd)
    67         l2 = "+++ %s%s" % ("b/" + fn, datetag(bd))
    65         l3 = "@@ -0,0 +1,%d @@\n" % len(b)
    68         l3 = "@@ -0,0 +1,%d @@\n" % len(b)
    66         l = [l1, l2, l3] + ["+" + e for e in b]
    69         l = [l1, l2, l3] + ["+" + e for e in b]
    67     elif not b:
    70     elif not b:
    68         a = splitnewlines(a)
    71         a = splitnewlines(a)
    69         l1 = "--- %s\t%s\n" % ("a/" + fn, ad)
    72         l1 = "--- %s%s" % ("a/" + fn, datetag(ad))
    70         if b is None:
    73         if b is None:
    71             l2 = "+++ %s\t%s\n" % ("/dev/null", epoch)
    74             l2 = '+++ /dev/null%s' % datetag(epoch)
    72         else:
    75         else:
    73             l2 = "+++ %s\t%s\n" % ("b/" + fn, bd)
    76             l2 = "+++ %s%s" % ("b/" + fn, datetag(bd))
    74         l3 = "@@ -1,%d +0,0 @@\n" % len(a)
    77         l3 = "@@ -1,%d +0,0 @@\n" % len(a)
    75         l = [l1, l2, l3] + ["-" + e for e in a]
    78         l = [l1, l2, l3] + ["-" + e for e in a]
    76     else:
    79     else:
    77         al = splitnewlines(a)
    80         al = splitnewlines(a)
    78         bl = splitnewlines(b)
    81         bl = splitnewlines(b)
    79         l = list(bunidiff(a, b, al, bl, "a/" + fn, "b/" + fn, opts=opts))
    82         l = list(bunidiff(a, b, al, bl, "a/" + fn, "b/" + fn, opts=opts))
    80         if not l: return ""
    83         if not l: return ""
    81         # difflib uses a space, rather than a tab
    84         # difflib uses a space, rather than a tab
    82         l[0] = "%s\t%s\n" % (l[0][:-2], ad)
    85         l[0] = "%s%s" % (l[0][:-2], datetag(ad))
    83         l[1] = "%s\t%s\n" % (l[1][:-2], bd)
    86         l[1] = "%s%s" % (l[1][:-2], datetag(bd))
    84 
    87 
    85     for ln in xrange(len(l)):
    88     for ln in xrange(len(l)):
    86         if l[ln][-1] != '\n':
    89         if l[ln][-1] != '\n':
    87             l[ln] += "\n\ No newline at end of file\n"
    90             l[ln] += "\n\ No newline at end of file\n"
    88 
    91