Le samedi 02 août 2008 à 14:07 -0700, Guido van Rossum a écrit : > On Sat, Aug 2, 2008 at 12:58 PM, Antoine Pitrou <[EMAIL PROTECTED]> wrote: > > It is also used by git for diffs of binary files, and those diffs are > > supposedly > > understood by other VCSes like Mercurial... > > I'm very interested in this (for Rietveld). Where can I learn more > about how git handles diffs of binary files? Does it actually show > adds and deletes of sections of the file? >
Well, I'm not sure. I just tried with Mercurial, first committing a binary file with the following structure: part1 part3 and then changing it to the following structure: part1 part2 part3 part2 (part{1,2,3} being some binary chunks of 400 bytes each from /dev/urandom) The "git-style" diff given by Mercurial is then: diff --git a/binfile b/binfile index acfa6ffc5287c6e9cd400af7b8ab09d072a28b02..5b9a69212ae8f39bf41fbf2194db2b730dcb0ae9 GIT binary patch literal 1600 zc%1Fi`#%#1003~2SQat~^D2)~Q>OB2Y-`ijkz&}wZbC#-o=0t7jaVepQ|D0_8*3gJ [EMAIL PROTECTED]|_rrbvhcAJotX5m|hB+RX(Aa5xSa4Y^GkS%y10Hva z3^q{I&[EMAIL PROTECTED]&+M&87%65P%egC&>7+Bgzx0-lUziyCW?%ELc z;eHsAnXOY+YY~y3f6~CD+?JujZGa*JV=V-x-twhC^~z}e+->VcW=&UqfNg97Mxf3d zP2!VM#<4|n+(B|5rOUMBfQ=w}vEdoi_TK&[EMAIL PROTECTED] z<g>qYkn__U%akFI([EMAIL PROTECTED]<}W8T2DXa{`gkjO1RO?{-Yz3 z-yd-sVx%pSu0elCXI*-RPErV~&bEbl*yk6ff?mV<[EMAIL PROTECTED] zvw~4tJo7xMUB<[EMAIL PROTECTED]<JySyN4MA5V)G1_~N92FPXjkyeyjjlF2Cwdfx=~ zrIy88pZDkmmlT6BVEB&HsO>pWHk^!$4x~AJ$M!$>LrjA^UDjlQD0igDHf?>kfTL8C zT`$ToUViVhgSRSdJij81#v>3jDpj>m&hGZ(a4UQqYSc{FI)@&=mHL-D&8&McIqHsU zfI-aCDfNmLo!AZjn=0JV{sMJcsTSiO;$}r>P(?>*s6&cpc-Lu5__+c38NPW>O=Ze3 zuFNT^b+XahK^P*sIU93zA4b<Bi<K+TWMzdB4}W%epKy!i*d>tzW?3CiviE&Xi9>Bo zUeM*=71Le)&!sv725-*vg<uCI_{^T8FxI^)[EMAIL PROTECTED]@*)iWzn066>S1naIlau zItQO-*hG^8yP=|O<[EMAIL PROTECTED] zL(7(rp`ZFnuqIS(+L{IckNZ%BsAvS7nS6!Qvhd<7{m}yj9>[EMAIL PROTECTED];vRo8VN z{7^{BvC^#ss2zI20|7B%d7&`+;}M|Lb4kcpnT&a>ztw$PNWnC?zuEIbUm<$TLPu{@ zFY}#Iu~hB^StZra*ohA%zVI_1hLduWZa6S~5X9x-A^(HQYtpfwIrX2BO0ucP;atl( [EMAIL PROTECTED]&U#BnZ>E7FQ)[EMAIL PROTECTED] zBp#{xc{d%j`Q}GwfJ*5YN5L1jO$egiqV_Dr=2I4()xVmuAhxjtq%Tv8Xpj0eNbDC` zr)~pTMOKjpr4)Ts!=w3K?TKMAmsB;SKU4G([EMAIL PROTECTED] zz=K?Re2pPf)sp-XNp`QKAIQ}l7Qjr5SbMa;Q&#UT4(|#}kQ>Zx58&XEdwZV}rT}gi zAJ(u*feBc}#SFv;[EMAIL PROTECTED];Ya([EMAIL PROTECTED])ms1` zEe~IK=-G~B2d_gQ&0mTKxO#ub8Q)9wI!6xVMVM}&lvlFHsV+BT+H~fhnnW~!EEnc+ zD=DAs=Y01@@>AfcR=Yz7$Z5mZ8P~c0<c+6^Ln)%3kuKh-Dp%rRlz3?{E)fP1KT406 [EMAIL PROTECTED]&=uAM*jcfzxCr^k_Znj >From that I don't know what can be done with the diff. Looking at the Mercurial source code suggests that you can encode deltas in the patch, but that Mercurial doesn't support it (see "# TODO: deltas"): http://www.selenic.com/hg/index.cgi/file/cbdfd08eabc9/mercurial/patch.py#l1117 A basic explanation of binary diffs here: http://www.selenic.com/pipermail/mercurial/2008-July/020184.html The explanation mentions base-64 but it was corrected in a later message here: http://www.selenic.com/pipermail/mercurial/2008-July/020192.html Regards Antoine. PS: here are the commands I've typed: $ hg init bindiff $ cd bindiff/ $ dd if=/dev/urandom of=part1 bs=1 count=400 [snip output] $ dd if=/dev/urandom of=part2 bs=1 count=400 [snip output] $ dd if=/dev/urandom of=part3 bs=1 count=400 [snip output] $ cat part1 part3 > binfile $ hg add binfile $ hg ci -m "added binfile" $ cat part1 part2 part3 > binfile $ hg di diff -r 19cfb10c4a01 binfile Binary file binfile has changed $ hg di --git [produces the patch above] _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com