不安装git工具应用GIT binary patch

来源:互联网 发布:软件行业岗位调查报告 编辑:程序博客网 时间:2024/06/06 09:28

从网上得到一GIT binary patch文件, 却没办法把它恢复出来. google后发现可以用mercurial的hg工具还apply.

以下是在ubuntu下实际操作记录.

1) 先安装mercurial

sudo apt-get install mercurial

 

2) 用hg创建一个临时的代码库

hg init

 

3) vi .hg/hgrc 增加下面的内容,不然在后面的操作中会报"abort: no username supplied (see "hg help config")"的错误

[ui]username = j <a.b.com>


4) 预先建一空文件, 否则会报"unable to find 'xxx' for patching"的错误

touch rt2860.binhg add rt2860.bin


5) 打补丁,得到想要的文件

hg import -f a.patch



通过分析hg的代码(python写的)发现"GIT binary patch"文件就是一经过base85编码的zip文件.

将其中的代码抽出来做一个小脚本, 就不需要上面那么麻烦了.

 

通过查阅网上资料,用python写了个小程序显示解码的过程.

附python2.4写的例程

# vim: set ts=8 sw=4 sts=4 et ai:# Example base85 decoder, Walter Doekes 2012import sysimport zliben85 = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '!', '#', '$', '%', '&', '(', ')', '*', '+', '-', ';', '<', '=', '>', '?', '@', '^', '_','`', '{', '|', '}', '~']def _chunk(data):    # TODO: remove white space    idx = 0    while len(data) > idx:        next = data[idx:idx+5]        idx += len(next)        padding = 5 - len(next)        if padding:            next = next.ljust(5, 'u')        #if next >= '|NsC1':        #    print >> sys.stderr, 'Garbage in input: %s' % (next,)        #    sys.exit(0)        yield next, paddingdef _decode(chunk, padding):    assert len(chunk) == 5    num = 0    for c in chunk[:5] :      try :        num = num * 85        num += int(en85.index(c))      except ValueError:        print >> sys.stderr, 'Invalid base85 alphabet: "%c"' % (c)        sys.exit(0)    if num >= 2**32:        print >> sys.stderr, 'Garbage in input: %s' % (chunk)        sys.exit(0)    return ('%c%c%c%c' % (        chr(num >> 24),        chr((num >> 16) & 0xff),        chr((num >> 8) & 0xff),        chr(num & 0xff)    ))[0:4-padding]b85decode = (lambda x: ''.join(_decode(*i) for i in _chunk(x)))def _b85decode(data):    dec = []    for line in data.split():      l = line[0]      if l <= 'Z' and l >= 'A':          l = ord(l) - ord('A') + 1      else:          l = ord(l) - ord('a') + 27      dec.append(b85decode(line[1:])[:l])    return ''.join(dec)gitbp = (r'zcmeGh{cjY<^>%h|eg43{+uMWl*}$?r2V*d7z+juA#PMhNw83X=t0^oJQAq;o0=J<`'+'\n'         r'z<9KVZN-GjpHh(~BM{T1hvP7>^B--S(PEo2v>1k1<{t|V78=5u&uNpQXfPH<lcYrBv'+'\n'         r'z`dfdgPr8{m@4b2R=DnGDvu_alJ%oNK%eh<*F>9cN+PADwf11W=Cw($KlFsOvs5PZ@'+'\n'         r'zutKod<Q8M)Dw_;ACMRO)uPpL?m^2(y6R^9<<TxDvld6bnYy67ZC8~Y#6`D%=;&W<|'+'\n'         r'zs0QLl3k)$v?GQ5JrWV9*&*-KWn=zgseFs^UBYheNq~g&{Pua*=^>*LXCIO8YlE>O*'+'\n'         r'zY9Z{l3&9$L_YfV~S&wdWrWVeE0#MjfnM`IRb28&(@cIYpf0o97OXI(%@#ks$MH*jE'+'\n'         r'z;~Qx_lg5QP3D6DaGI%b7XEXS22H(lx+Zp^#2H*O(;`B_g(6dY#C?N@zizEzW4Jd;p'+'\n'         r'zqz4*3&=~xrw@3lF)8;(8Ramb+q@1bMVdZk0HDzkG*bG*K{;Qx~3UwXS%N)RAw-F#L'+'\n'         r'zUH+0bfDw>Op<V^`GN|hu%WqG~0{Xxkf>jt^Dh3}_D~Oj$09dZDyj1D|950mtAWPw5'+'\n'         r'zDa4c29cxtflEF-my(zHO#(P$q-H~-AcZJ*QcDk$GHCC&;+uh^#nOu~5my3bJt(X<H'+'\n'         r'zs^kx5KDc%}aBZ7f22kMI;;6<fo|do2bF*JG<N)<m;Nta*mt^q5$gS+SCM210ZPDc9'+'\n'         r'z_$>h3k<%x$$CGIMkUBFtIcfZ5=BBzlJ14L|z^R-7)r^y@Uh9rz8#MRibw@6Lm%A!I'+'\n'         r'zaHO6I6fDm_WKC;I@bLmF7SQFaE4y7L=L4<5Hu}#{);;6?+&%5S<9?=_QTvSkYrj0B'+'\n'         r'zvdfLzaxVQ?k_G7_>67|nCGz}MRQ7BdA(F;QK~@Q|Z9iq?k7qu<p$3L?0=l)#a6L<?'+'\n'         r'zES<dg)unukUwkc|`;9y;|7bY-)t_hepX^7>ACls|DakV?`{Qww^&KyXdfRNFSg^o?'+'\n'         r'z1r{u@V1We-ELdQ{0t*&cu)u-^7A){Tvj7U#qTqK?a0?3m4uyY@#A8T2J`EWGRJjes'+'\n'         r'zZlcIxB>qbA^U@+#U|v#qUMgpW>b0_b@AE%=!Ta{#OTYaE^i1%M60{!=j&BJ5q9K^t'+'\n'         r'z7<_9}sJJJzYj>!BPpH2))Sn2A_l2CjLYpQ$cT^ZV7JlM*_<#{UeKP#|DW5NV!H(Jo'+'\n'         r'z^o@1;`ci$vJF*ou84)LD9ohT*2PJ<?`ckNZ3@Dg4nMLqb3JC=?gr@dFssN}GVimUJ'+'\n'         r'zL7OyOI>)q>nM@gON6sW}=bX{KkY4cQ-PBkVzJOgt&a)MfK9yo<ejzcOd#_{>9W@o;'+'\n'         r'z^<9kKed-<>2^4)WpmI1R0gctWrL4Qs6B*Bqbv-O?D>Y0Fj(^|nrvh@xuA2T^7iTU~'+'\n'         r'z8M)-s`3B@N3KMupldYudV3E2M%7D5A%3?JHWr<n}WvS{XU8%AFm6ND&H$$U1KsKjX'+'\n'         r'zHtTjmql7jX+9(LOx%{MaRE_;mhH&4?Zc~dw&LITpgi5Ets6<#>1l}liSDI)Q2G&YE'+'\n'         r'zH?t35N9p3GRvH{xc{69C+8O6x=L(|dsJPkdx30PU|6x{CfdZF1^4du}kI@YJpqX_C'+'\n'         r'z+(9$Q;#93)A7G3v9;^V248?;t0L(!aiSleLGlK}HjsYrQgz~5o4>iu}13_3Tmn%(w'+'\n'         r'z0Jk&Ftm*gT#2p8g!S%!(Af2qc%k9=T=km!7x54zkkqkML$sGJypej}+tTWu+;^<p)'+'\n'         r'zZ})p{%9`4G$2gI9RVgf*q9Jx_FG3@9Vz2_n3x+fjd6q@MQcPKBI;*9?w9WPx#2NKj'+'\n'         r'zx4~5?{-(-ex8WW>Vpsatk#(sUcyXQ070|HpAh{uf<)_cFElcQr5Qw6dD{5(Swx-jC'+'\n'         r'zlvCF2CB3ke#iNS4;`~l!XLX)AM48KgIgn&2r-A&P7Du`}cBui<9qHCkWS0`#I=p`9'+'\n'         r'zotH}mw6TXbxnQ!z8QwUwUSOZ>DK>)~PJHdyJlS~ZTz!k8RMlHm6Vb7l6pNc&F;096'+'\n'         r'zxhW2}L$c_A&B|GKBPA-aB1&wRL2E^XiB`hOgH;v9-T!@sS)y!hw|0<rI9$X(`Xc>Y'+'\n'         r'zq&E=R5EMU^#91{`{<_Z>8617OZFF1f=#G7`F?g7GWYDN0PrncQqK#~$RV&#+E03-n'+'\n'         r'z=xwVoo*CWRHoCoabY~v76FO|oci5iqu=7C&g|sCq+JkPJ@fZxic{|U~x9#Kf)?(Od'+'\n'         r'ze9)sSK<Dl42C{c#-8$0xe!|I7Lbto$R%JUvy5g={8vjr&innOI6_JI?h!A<rida(?'+'\n'         r'z2gxc(20}_TQLb`!wGkk@I=W#kRofnRB0IJ;xy&K^VG{MEP75p5ezIR8rOMJ(fK(1D'+'\n'         r'z+6q8N@_sG`7yI=(zfq*ul^G~fXCJnY7!_o{a*ekr$k~UjBQO<KTcK>vqoUBARd$5H'+'\n'         r'z)O8wkF1pu`9xNhhm#&tQ%?A<89nKhzN}-2Lm>x2D0dU@Eo?Pj<BC=1y==>q+1qxk8'+'\n'         r'z=bx93Q0NLee^_7JB0a}V95OnTLp<r6xMFNkDywM+ZWxa8VIM5`O70Z^U-8}eVLWFn'+'\n'         r'zolombICJkh^T=bz$Bs!aa1+miyyqX1cllf7-KRY&PajK4N4SZ@o~uhVSvgFlUNx3@'+'\n'         r'zGxfk;(kW$Gg?JfM7}w*tKaVTlGVXoaqvIYO)9B%62G_tAV)67jrA3@LI(A}08+(zg'+'\n'         r'z4Tlp?x@)Zy_KRk49a-zpb*?qj(>XEckTzJVqFM%N_Odvug{>x|!frB3NvCoppXF^*'+'\n'         r'zy8KfsQDp@^xM@Y>3M~UFEMSN$EQ-G7NxSQi&7vxcYK^GY$M33J<KL)ayj<%com2<i'+'\n'         r'zVNVeUyt3JDhGCv446$_Dh*5A+q6rl5;a~BAFF7cEH|Qd6vYL(X18rze&I07TXp&c|'+'\n'         r'zOyxnHQtc&Amsw92NmN&e>T1xX19TBUmu>TPF;>~l#^!m#jrwoVq#1U>eXBG>qJF*('+'\n'         r'zg^1RbDh+z$f9{Z#iO)MaAhu@#;RU}A2!0*+g5TL5dr&@`um|9zYqX}wZc*JPsxQP5'+'\n'         r'z*faKtJ*f9FQmooU0qP}4<bTKH8gL3#PeQST7Q(P3RJM4h>X(kbn}J@WN8|NI+TRp>'+'\n'         r'zIKgTWk4J(tl*+jSY$(qLJQ*n#p=fxKL9vfat`Q%U>DV8c0+%dtAoN|0WKF*hf>{9m'+'\n'         r'zi~})km=RdT48ya77IVxnJUeJrP_KqshPoCf9JnY!L2-$XJRwU+gBB)RZkpjb6$0p&'+'\n'         r'z2HZLBIEGk2fnNXU*y0!v9Bw;QQ;xyyK_?&m;4p&o<V=gf>Sqi}f$JRQ5g<-*RJwPQ'+'\n'         r'z!|vmG_BCF(Wq=@EEh7yn*5jmoP)K6SDHVpM7dpV{jf~z0DgNC?G1$!yc5`==Mm1_N'+'\n'         r'zfU^drSozzHQ!PT(ZPJ)xk<EIitiqIgREvRoqDR~#s(VFsgXg!Zuk(5=pMPiclts=k'+'\n'         r'zL_x*VV9wF^Aia;hr#^Yyp*)}&^;U<z2lQeQ$Vz}as=oFNQV!DwmKnHJoFM~=sJaY1'+'\n'         r'zfWhK$0jq*~6?n)Gunh2O2W~Rpi}nh7Y4r*qfm2z}AB(}K$t#a|wXjIqft5z#G8hTo'+'\n'         r'za1>N*p&@4KDX@dWB8yr9-d*ama}ORS;Q6KULF>_1m``K~-LVsNg-PVF$<<=FX%Zf&'+'\n'         r'z+~%xXLz;ERcq8u15vReJBaP2CYyP`KwFdXHZ^$=OpS!VTPN;sfr-<I=;TBGspKVfu'+'\n'         r'z*_!5Dw!t_%;=%>6*|<P&8VtNN)siM>k~9Jog0}Ih#oJXfshK{<_f(#xx5ZSh$X}Cn'+'\n'         r'z<HlMTnqnLyPU5=5pGpR59Qt+?1d+2I?-7mn*ZAWGT%c+y-t#f#Gl^lfh)Sz#d5hGf'+'\n'         r'V>b&Do_AUGtEb#wkfmrY9e*#h>e{lc+')decoded = _b85decode(gitbp)fo = open("out.bin","wb")fo.write(zlib.decompress(decoded))fo.close()print "done!"



 

0 0
原创粉丝点击