Mercurial > hg-stable
changeset 4108:226df1808f16
merge with crew-stable
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Tue, 20 Feb 2007 20:55:23 +0100 |
parents | e2ed92f4c0f7 (current diff) f5f171785e29 (diff) |
children | c097b6f4f082 20af6a2f0b0e |
files | mercurial/mdiff.py mercurial/patch.py |
diffstat | 5 files changed, 74 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/mdiff.py Sat Feb 17 04:50:06 2007 -0200 +++ b/mercurial/mdiff.py Tue Feb 20 20:55:23 2007 +0100 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms # of the GNU General Public License, incorporated herein by reference. -import bdiff, mpatch, re, struct, util +import bdiff, mpatch, re, struct, util, md5 def splitnewlines(text): '''like str.splitlines, but only split on newlines.''' @@ -57,6 +57,11 @@ epoch = util.datestr((0, 0)) if not opts.text and (util.binary(a) or util.binary(b)): + def h(v): + # md5 is used instead of sha1 because md5 is supposedly faster + return md5.new(v).digest() + if a and b and len(a) == len(b) and h(a) == h(b): + return "" l = ['Binary file %s has changed\n' % fn] elif not a: b = splitnewlines(b)
--- a/mercurial/patch.py Sat Feb 17 04:50:06 2007 -0200 +++ b/mercurial/patch.py Tue Feb 20 20:55:23 2007 +0100 @@ -412,16 +412,18 @@ 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 @@ 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)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-diff-binary-file Tue Feb 20 20:55:23 2007 +0100 @@ -0,0 +1,25 @@ +#!/bin/sh + +hg init a +cd a +cp $TESTDIR/binfile.bin . +hg add binfile.bin +hg ci -m 'add binfile.bin' -d '0 0' + +echo >> binfile.bin +hg ci -m 'change binfile.bin' -d '0 0' + +hg revert -r 0 binfile.bin +hg ci -m 'revert binfile.bin' -d '0 0' + +echo % diff -r 0 -r 1 +hg diff --nodates -r 0 -r 1 + +echo % diff -r 0 -r 2 +hg diff --nodates -r 0 -r 2 + +echo % diff --git -r 0 -r 1 +hg diff --git -r 0 -r 1 + +echo % diff --git -r 0 -r 2 +hg diff --git -r 0 -r 2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-diff-binary-file.out Tue Feb 20 20:55:23 2007 +0100 @@ -0,0 +1,23 @@ +% diff -r 0 -r 1 +diff -r 48b371597640 -r acea2ab458c8 binfile.bin +Binary file binfile.bin has changed +% diff -r 0 -r 2 +% diff --git -r 0 -r 1 +diff --git a/binfile.bin b/binfile.bin +index 37ba3d1c6f17137d9c5f5776fa040caf5fe73ff9..58dc31a9e2f40f74ff3b45903f7d620b8e5b7356 +GIT binary patch +literal 594 +zc$@)J0<HatP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000XU +z000XU0RWnu7ytkO2XskIMF-Uh9TW;VpMjwv0005-Nkl<ZD9@FWPs=e;7{<>W$NUkd +zX$nnYLt$-$V!?uy+1V%`z&Eh=ah|duER<4|QWhju3gb^nF*8iYobxWG-qqXl=2~5M +z*IoDB)sG^CfNuoBmqLTVU^<;@nwHP!1wrWd`{(mHo6VNXWtyh{alzqmsH*yYzpvLT +zLdY<T=ks|woh-`&01!ej#(xbV1f|pI*=%;d-%F*E*X#ZH`4I%6SS+$EJDE&ct=8po +ziN#{?_j|kD%Cd|oiqds`xm@;oJ-^?NG3Gdqrs?5u*zI;{nogxsx~^|Fn^Y?Gdc6<; +zfMJ+iF1J`LMx&A2?dEwNW8ClebzPTbIh{@$hS6*`kH@1d%Lo7fA#}N1)oN7`gm$~V +z+wDx#)OFqMcE{s!JN0-xhG8ItAjVkJwEcb`3WWlJfU2r?;Pd%dmR+q@mSri5q9_W- +zaR2~ECX?B2w+zELozC0s*6Z~|QG^f{3I#<`?)Q7U-JZ|q5W;9Q8i_=pBuSzunx=U; +z9C)5jBoYw9^?EHyQl(M}1OlQcCX>lXB*ODN003Z&P17_@)3Pi=i0wb04<W?v-u}7K +zXmmQA+wDgE!qR9o8jr`%=ab_&uh(l?R=r;Tjiqon91I2-hIu?57~@*4h7h9uORK#= +gQItJW-{SoTm)8|5##k|m00000NkvXXu0mjf3JwksH2?qr + +% diff --git -r 0 -r 2
--- a/tests/test-notify Sat Feb 17 04:50:06 2007 -0200 +++ b/tests/test-notify Tue Feb 20 20:55:23 2007 +0100 @@ -33,7 +33,7 @@ echo '% pull (minimal config)' hg --traceback --cwd b pull ../a 2>&1 | sed -e 's/\(Message-Id:\).*/\1/' \ - -e 's/changeset \([0-9a-f]* \)\?in .*test-notif/changeset \1in test-notif/' \ + -e 's/changeset \([0-9a-f]* \)*in .*test-notif/changeset \1in test-notif/' \ -e 's/^details: .*test-notify/details: test-notify/' cat <<EOF >> $HGRCPATH