Mercurial > public > mercurial-scm > hg-stable
diff mercurial/patch.py @ 17939:d587925680d9
diff: move b85diff to mdiff module
b85diff generates a binary diff, so we move this code to mdiff module
along with unidiff for text diffs. All diffing mechanisms will be in the
same place.
In an upcoming patch we will remove the responsibility to print the
index header from b85diff and move it back to patch, since it's
a patch metadata header, not part of the diff generation.
author | Guillermo P?rez <bisho at fb.com> |
---|---|
date | Tue, 06 Nov 2012 14:04:05 -0800 |
parents | e51d4aedace9 |
children | c84ef0047a94 |
line wrap: on
line diff
--- a/mercurial/patch.py Thu Nov 15 10:55:32 2012 -0800 +++ b/mercurial/patch.py Tue Nov 06 14:04:05 2012 -0800 @@ -10,7 +10,7 @@ import tempfile, zlib, shutil from i18n import _ -from node import hex, nullid, short +from node import hex, short import base85, mdiff, scmutil, util, diffhelpers, copies, encoding, error import context @@ -1514,44 +1514,6 @@ finally: fp.close() -def b85diff(to, tn): - '''print base85-encoded binary diff''' - def gitindex(text): - if not text: - return hex(nullid) - l = len(text) - s = util.sha1('blob %d\0' % l) - s.update(text) - return s.hexdigest() - - def fmtline(line): - l = len(line) - if l <= 26: - l = chr(ord('A') + l - 1) - else: - l = chr(l - 26 + ord('a') - 1) - return '%c%s\n' % (l, base85.b85encode(line, True)) - - def chunk(text, csize=52): - l = len(text) - i = 0 - while i < l: - yield text[i:i + csize] - i += csize - - tohash = gitindex(to) - tnhash = gitindex(tn) - if tohash == tnhash: - return "" - - # TODO: deltas - 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) - class GitDiffRequired(Exception): pass @@ -1789,7 +1751,7 @@ if dodiff: if dodiff == 'binary': - text = b85diff(to, tn) + text = mdiff.b85diff(to, tn) else: text = mdiff.unidiff(to, date1, # ctx2 date may be dynamic