diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -412,16 +412,18 @@ def b85diff(fp, to, tn): yield text[i:i+csize] i += csize - if to == tn: - return + tohash = gitindex(to) + tnhash = gitindex(tn) + if tohash == tnhash: + return "" + # TODO: deltas - l = len(tn) - fp.write('index %s..%s\nGIT binary patch\nliteral %s\n' % - (gitindex(to), gitindex(tn), len(tn))) - - tn = ''.join([fmtline(l) for l in chunk(zlib.compress(tn))]) - fp.write(tn) - fp.write('\n') + ret = ['index %s..%s\nGIT binary patch\nliteral %s\n' % + (tohash, tnhash, len(tn))] + for l in chunk(zlib.compress(tn)): + ret.append(fmtline(l)) + ret.append('\n') + return ''.join(ret) def diff(repo, node1=None, node2=None, files=None, match=util.always, fp=None, changes=None, opts=None): @@ -578,14 +580,14 @@ def diff(repo, node1=None, node2=None, f dodiff = 'binary' r = None header.insert(0, 'diff --git a/%s b/%s\n' % (a, b)) - if dodiff == 'binary': - fp.write(''.join(header)) - b85diff(fp, to, tn) - elif dodiff: - text = mdiff.unidiff(to, date1, - # ctx2 date may be dynamic - tn, util.datestr(ctx2.date()), - f, r, opts=opts) + if dodiff: + if dodiff == 'binary': + text = b85diff(fp, to, tn) + else: + text = mdiff.unidiff(to, date1, + # ctx2 date may be dynamic + tn, util.datestr(ctx2.date()), + f, r, opts=opts) if text or len(header) > 1: fp.write(''.join(header)) fp.write(text)