From f6b0f38af648d028422a7494378b5dabdc90573f Mon Sep 17 00:00:00 2001 From: Anton Medvedev Date: Sun, 30 Nov 2025 12:46:34 +0100 Subject: First commit --- pkg/gitdiff/testdata/apply/bin.go | 124 +++++++++++++ .../testdata/apply/bin_fragment_delta_error.src | Bin 0 -> 130 bytes .../apply/bin_fragment_delta_error_dst_size.patch | 5 + .../bin_fragment_delta_error_incomplete_add.patch | 5 + .../bin_fragment_delta_error_incomplete_copy.patch | 5 + .../apply/bin_fragment_delta_error_src_size.patch | 5 + .../testdata/apply/bin_fragment_delta_modify.out | Bin 0 -> 1084 bytes .../testdata/apply/bin_fragment_delta_modify.patch | 13 ++ .../testdata/apply/bin_fragment_delta_modify.src | Bin 0 -> 1024 bytes .../apply/bin_fragment_delta_modify_large.out | Bin 0 -> 131072 bytes .../apply/bin_fragment_delta_modify_large.patch | 166 +++++++++++++++++ .../apply/bin_fragment_delta_modify_large.src | Bin 0 -> 131072 bytes .../testdata/apply/bin_fragment_literal_create.out | Bin 0 -> 32 bytes .../apply/bin_fragment_literal_create.patch | 8 + .../testdata/apply/bin_fragment_literal_create.src | 0 .../testdata/apply/bin_fragment_literal_modify.out | Bin 0 -> 32 bytes .../apply/bin_fragment_literal_modify.patch | 8 + .../testdata/apply/bin_fragment_literal_modify.src | Bin 0 -> 32 bytes pkg/gitdiff/testdata/apply/file_bin_modify.out | Bin 0 -> 1084 bytes pkg/gitdiff/testdata/apply/file_bin_modify.patch | 13 ++ pkg/gitdiff/testdata/apply/file_bin_modify.src | Bin 0 -> 1024 bytes pkg/gitdiff/testdata/apply/file_mode_change.out | 2 + pkg/gitdiff/testdata/apply/file_mode_change.patch | 3 + pkg/gitdiff/testdata/apply/file_mode_change.src | 2 + pkg/gitdiff/testdata/apply/file_text.src | 200 ++++++++++++++++++++ pkg/gitdiff/testdata/apply/file_text_delete.out | 0 pkg/gitdiff/testdata/apply/file_text_delete.patch | 206 +++++++++++++++++++++ .../apply/file_text_error_partial_delete.patch | 106 +++++++++++ pkg/gitdiff/testdata/apply/file_text_modify.out | 195 +++++++++++++++++++ pkg/gitdiff/testdata/apply/file_text_modify.patch | 62 +++++++ .../testdata/apply/text_fragment_add_end.out | 5 + .../testdata/apply/text_fragment_add_end.patch | 9 + .../testdata/apply/text_fragment_add_end.src | 3 + .../testdata/apply/text_fragment_add_end_noeol.out | 5 + .../apply/text_fragment_add_end_noeol.patch | 11 ++ .../testdata/apply/text_fragment_add_end_noeol.src | 3 + .../testdata/apply/text_fragment_add_middle.out | 5 + .../testdata/apply/text_fragment_add_middle.patch | 9 + .../testdata/apply/text_fragment_add_middle.src | 3 + .../testdata/apply/text_fragment_add_start.out | 4 + .../testdata/apply/text_fragment_add_start.patch | 8 + .../testdata/apply/text_fragment_add_start.src | 3 + .../testdata/apply/text_fragment_change_end.out | 10 + .../testdata/apply/text_fragment_change_end.patch | 9 + .../testdata/apply/text_fragment_change_end.src | 10 + .../apply/text_fragment_change_end_eol.out | 3 + .../apply/text_fragment_change_end_eol.patch | 10 + .../apply/text_fragment_change_end_eol.src | 3 + .../testdata/apply/text_fragment_change_exact.out | 19 ++ .../apply/text_fragment_change_exact.patch | 12 ++ .../testdata/apply/text_fragment_change_exact.src | 30 +++ .../testdata/apply/text_fragment_change_middle.out | 9 + .../apply/text_fragment_change_middle.patch | 12 ++ .../testdata/apply/text_fragment_change_middle.src | 10 + .../apply/text_fragment_change_single_noeol.out | 1 + .../apply/text_fragment_change_single_noeol.patch | 8 + .../apply/text_fragment_change_single_noeol.src | 1 + .../testdata/apply/text_fragment_change_start.out | 4 + .../apply/text_fragment_change_start.patch | 9 + .../testdata/apply/text_fragment_change_start.src | 10 + .../testdata/apply/text_fragment_delete_all.out | 0 .../testdata/apply/text_fragment_delete_all.patch | 8 + .../testdata/apply/text_fragment_delete_all.src | 4 + pkg/gitdiff/testdata/apply/text_fragment_error.src | 13 ++ .../text_fragment_error_context_conflict.patch | 12 ++ .../text_fragment_error_delete_conflict.patch | 12 ++ .../apply/text_fragment_error_new_file.patch | 7 + .../apply/text_fragment_error_short_src.patch | 12 ++ .../text_fragment_error_short_src_before.patch | 12 ++ pkg/gitdiff/testdata/apply/text_fragment_new.out | 3 + pkg/gitdiff/testdata/apply/text_fragment_new.patch | 7 + pkg/gitdiff/testdata/apply/text_fragment_new.src | 0 72 files changed, 1456 insertions(+) create mode 100644 pkg/gitdiff/testdata/apply/bin.go create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_error.src create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_error_dst_size.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_add.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_copy.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_error_src_size.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.out create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.src create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.out create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.src create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_create.out create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_create.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_create.src create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_modify.out create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_modify.patch create mode 100644 pkg/gitdiff/testdata/apply/bin_fragment_literal_modify.src create mode 100644 pkg/gitdiff/testdata/apply/file_bin_modify.out create mode 100644 pkg/gitdiff/testdata/apply/file_bin_modify.patch create mode 100644 pkg/gitdiff/testdata/apply/file_bin_modify.src create mode 100644 pkg/gitdiff/testdata/apply/file_mode_change.out create mode 100644 pkg/gitdiff/testdata/apply/file_mode_change.patch create mode 100644 pkg/gitdiff/testdata/apply/file_mode_change.src create mode 100644 pkg/gitdiff/testdata/apply/file_text.src create mode 100644 pkg/gitdiff/testdata/apply/file_text_delete.out create mode 100644 pkg/gitdiff/testdata/apply/file_text_delete.patch create mode 100644 pkg/gitdiff/testdata/apply/file_text_error_partial_delete.patch create mode 100644 pkg/gitdiff/testdata/apply/file_text_modify.out create mode 100644 pkg/gitdiff/testdata/apply/file_text_modify.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end_noeol.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end_noeol.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_end_noeol.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_middle.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_middle.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_middle.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_start.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_start.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_add_start.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end_eol.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end_eol.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_end_eol.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_exact.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_exact.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_exact.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_middle.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_middle.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_middle.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_single_noeol.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_single_noeol.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_single_noeol.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_start.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_start.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_change_start.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_delete_all.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_delete_all.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_delete_all.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error.src create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error_context_conflict.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error_delete_conflict.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error_new_file.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error_short_src.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_error_short_src_before.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_new.out create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_new.patch create mode 100644 pkg/gitdiff/testdata/apply/text_fragment_new.src (limited to 'pkg/gitdiff/testdata/apply') diff --git a/pkg/gitdiff/testdata/apply/bin.go b/pkg/gitdiff/testdata/apply/bin.go new file mode 100644 index 0000000..e34f06b --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin.go @@ -0,0 +1,124 @@ +//go:build ignore + +// bin.go is a helper CLI to manipulate binary diff data for testing purposes. +// It can decode patches generated by git using the standard parsing functions +// or it can encode binary data back into the format expected by Git. It +// operates on stdin writes results (possibly binary) to stdout. + +package main + +import ( + "bytes" + "compress/zlib" + "encoding/binary" + "flag" + "io/ioutil" + "log" + "os" + "strings" + + "github.com/bluekeyes/go-gitdiff/gitdiff" +) + +var ( + b85Powers = []uint32{52200625, 614125, 7225, 85, 1} + b85Alpha = []byte( + "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "!#$%&()*+-;<=>?@^_`{|}~", + ) +) + +var mode string + +func base85Encode(data []byte) []byte { + chunks, remaining := len(data)/4, len(data)%4 + if remaining > 0 { + data = append(data, make([]byte, 4-remaining)...) + chunks++ + } + + var n int + out := make([]byte, 5*chunks) + + for i := 0; i < len(data); i += 4 { + v := binary.BigEndian.Uint32(data[i : i+4]) + for j := 0; j < 5; j++ { + p := v / b85Powers[j] + out[n+j] = b85Alpha[p] + v -= b85Powers[j] * p + } + n += 5 + } + + return out +} + +func compress(data []byte) ([]byte, error) { + var b bytes.Buffer + w := zlib.NewWriter(&b) + + if _, err := w.Write(data); err != nil { + return nil, err + } + if err := w.Close(); err != nil { + return nil, err + } + + return b.Bytes(), nil +} + +func wrap(data []byte) string { + var s strings.Builder + for i := 0; i < len(data); i += 52 { + c := 52 + if c > len(data)-i { + c = len(data) - i + } + b := (c / 5) * 4 + + if b <= 26 { + s.WriteByte(byte('A' + b - 1)) + } else { + s.WriteByte(byte('a' + b - 27)) + } + s.Write(data[i : i+c]) + s.WriteByte('\n') + } + return s.String() +} + +func init() { + flag.StringVar(&mode, "mode", "parse", "operation mode, one of 'parse' or 'encode'") +} + +func main() { + flag.Parse() + + switch mode { + case "parse": + files, _, err := gitdiff.Parse(os.Stdin) + if err != nil { + log.Fatalf("failed to parse file: %v", err) + } + if len(files) != 1 { + log.Fatalf("patch contains more than one file: %d", len(files)) + } + if files[0].BinaryFragment == nil { + log.Fatalf("patch file does not contain a binary fragment") + } + os.Stdout.Write(files[0].BinaryFragment.Data) + + case "encode": + data, err := ioutil.ReadAll(os.Stdin) + if err != nil { + log.Fatalf("failed to read input: %v", err) + } + data, err = compress(data) + if err != nil { + log.Fatalf("failed to compress data: %v", err) + } + os.Stdout.WriteString(wrap(base85Encode(data))) + + default: + log.Fatalf("unknown mode: %s", mode) + } +} diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_error.src b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error.src new file mode 100644 index 0000000..d4edf89 Binary files /dev/null and b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error.src differ diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_dst_size.patch b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_dst_size.patch new file mode 100644 index 0000000..6d5bb42 --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_dst_size.patch @@ -0,0 +1,5 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_delta_error.src b/gitdiff/testdata/apply/bin_fragment_delta_error.src +GIT binary patch +delta 18 +fc${itY+{<=z`_4AtEhVK$zKyatN;N30RR6$D+j^= + diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_add.patch b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_add.patch new file mode 100644 index 0000000..b8c1835 --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_add.patch @@ -0,0 +1,5 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_delta_error.src b/gitdiff/testdata/apply/bin_fragment_delta_error.src +GIT binary patch +delta 11 +Xc${itY+{_?z`_4As|XMP0RR6K8UwQc + diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_copy.patch b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_copy.patch new file mode 100644 index 0000000..8db8f84 --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_incomplete_copy.patch @@ -0,0 +1,5 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_delta_error.src b/gitdiff/testdata/apply/bin_fragment_delta_error.src +GIT binary patch +delta 17 +fc${itY+{_?z`_4AtEhVK$zKya00961|Nl5!2ZsOv + diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_src_size.patch b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_src_size.patch new file mode 100644 index 0000000..29cb26b --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_delta_error_src_size.patch @@ -0,0 +1,5 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_delta_error.src b/gitdiff/testdata/apply/bin_fragment_delta_error.src +GIT binary patch +delta 18 +fc${itYGRz=z`_4AtEhVK$zKyatN;N30RR6$EeFB? + diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.out b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.out new file mode 100644 index 0000000..f3386d1 Binary files /dev/null and b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.out differ diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.patch b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.patch new file mode 100644 index 0000000..1801ef2 --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify.patch @@ -0,0 +1,13 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_delta_modify.src b/gitdiff/testdata/apply/bin_fragment_delta_modify.src +GIT binary patch +delta 172 +zcmV;d08{^f2)qc8AP{I3VQ>J`s>wb0HU+h#6w8q?tUO~cHmDjZi2<8yZ9XmKhhMdo +zWu(4bg|8QwzZ|1e*rL4P#)`FenXTQ5=J2y;^BfB}4 +zWkisH791|vOVl5e-@^VLX0s~Ky_UyN!3;CgPr>Edj0j+0gOSwSsFsr$0q6zUJphJCY +zqz)g`N&ViW9W6D7kX7GX{y{m=JvFi1-r`PEE?SE&^2StK}qz5hC +zom0ywdCWuNb#YXdd0%FMNHft!FTER$>uzu5gxdoGBy789raJBW7jAhN2TWFL{P%2l +z|AX{}Jz8U}Y*X|~=?4<;F4)94!-e?w)#D0h8n1_ORWNCOC&7=!U0MP3BI0~M)pZ-cf6aFkVFzO&JOkcv7FeEq|)DcBDAP&_&ZgBk* +zVp(I^5-bN3L{~g{bHnkWX%0Hj02~njkKX8Zz%Ih#=LBD%Pk%TkW4ize_HweE#@_-2 +zvpyE#e@^n#rRGx;O84LB3bMdrxdv%Gkc)ZQq%8pkxT9b*)}Z&t5bibZ0)8H8T33vN +zgTj)j_%wz13x+TZ6LgdupD^ke2!n7E-YZ%8n3OTzK5*T(BH>ltfU|QJ7VTAur}ah?0sC%ZUY?&xwkEUw@Y9LqO1~eF>>5cDlg_YxuF| +zZ58JVlu7IBfP1@TDmG;<{X>(&*HyC-7zqRrY~#3W>hP8@a&jwYi_$k(j`D$Ta97 +z{(rL4B7Ysa#+5QC40p?w_V}r&G%{W$)8R1P`wet5K>`4D&EanFW{d2mOBvm~hJviTXh@a)Qp^TpF9X}vEVN-{LA%5Xp^*>%23c&{6HgPH4ahb@257yLNuno+(_9IJ!cgw97b*@K~X-9f8rdsd` +zOSj362)!mBsX%A +zQ*StV4WzVHG#+*IwPf7@BwNAUN{Tre0&7KHK8Gq6W2Jeqe%S(>+{1HM$cFn>J%6m& +z|8$kpBb=Dxh6$MwDCzl1g;Y`~f7F-wEny-#iI1X?l(D;Z$PLR3jay0@l4S5PR8fS< +zi+>Hek8mDV9ItDt3}cF;v-yN79ZUwT1^LyF1n$Cy%gt_C&r9r*A*)&$ZFlHnVf=mg#Q%sK{dyD8$2z{ndd#G^c?_~0mb!M$7ZxU$373E=vV}GR5OrWDm +zBsRhxx$#Ql_U#b2h}uPg{qm53MhlGO!F^=m@8@Ie88^`%?=q2+>^o91FPtaKgX{mUR_AEr9NwT^_^@8>UHx +z6Vql9ovz7$NpnPl5QlqsKP0|}EskXfTz-@ZpBlsI-~?B-4%w_GY9s9?ln=!A8wNMf +z=;eAIwp6&0nZ9Qq({C*2AXxKEGCjGa)2K^@ryP2!6dWiRy0M0vL*145f@BzR +z`IXs~3pGOq&;GIFDC=$JbDmK$C`A~nS$@*@hY$2e@kN0E;7jK@*TzW0 +z2FmwjqM0G-dfMDB3x5@pycb${TTJ7dzu+teFC9mUiSr(jrvQ~;sj`>uoen9{iXP5; +zbF9`-K065Zx&Tv2gK4wf8(U++M31oGlTiV$(^)qux97HP~_mSNPtqZA#7xOo;Q +zc-B?N(jYE1ix_L{M|cpCS4s5I3Tx_Hh1#!O-iBP5iS>iM{C~ZUez^pglqH5IAdOAD +zE;AjwjL)_IsQU6y4t4Uc9KXl~!BYeA;B8*wK)|cg^tiD0aN2iWzR>YnUUS9?3jKhiAKpgQ0 +zCRNTKwkeO~{pU2|S8)UYp21g#5$lGV|mN +zdQNSkH%R6}>C_cemrZCjR|-)D<8Y^P74a}>FKs&95{8d9SiTvhB4{eTUGFbTa-IbX +z8Lw1xoPPp_ZdIbl#dCzP1`N@V?eb7SizWtmm5ujG(rKZHZw$>Ozzf4E=Yf*+eH}kn +zL{&n><${iESA&t~5pz;&vs%HlLYxXMjPlLH{?*-#T4#$(P;pke+8K*f)n*Ph>SB9|8)|f;w=%OP6`nms +zdFVyjJf#&^=o+P_Y1Q{$$Aql8VqX+>=4)lx*&wB#{$tlb&SwC3E~G-pKOFXRQrRSk +zMt}Fa|4IQc;^N}stu@1BVjk>`8grvj#WVz9k#>7N?#JQZdag9deih!2aWVB}1klbo +zXKhuKy*h7m?``T}aM*}PexaGXqeZCm>ME7BQi64D>9lL0AoF2`Tzo^hNSMC9B=jT@ +zjA%viojl=gm6?1mPDg-)fy98Cb}Bdio_{dD+i;%nIJ6ZfQ^LPvl@~R#wk@K-##0ma +zj|D(^Fr8U(o(FRy$Z0FGyp@Yam&`H8oVv>6n8UKEVec>#*NVp)YrdOPgay4SxQ!PjT#gf^PISz?!W;(=9W +zC3sT|H>d}ErTr;c8LY_P{IPZ;Wq&_a4mM`dLu +zn^@7N(YC~q-qV~usbu?>{mD#~LNHhWdnNcaB&J>J@M)=+i^{*SwmS-XE-ywoYoZ3U +zdb4|M(!Ok$LY!K2m*Wjy>w_)zTm#k_g&J$VCb%~Wdvc^;lfge`vp1dg{O^Aqhg$$l5i=+C+Ser`KQQfEhZr}z4>;>#SGZZ*qGHd~H-az)BPnlSx{cgt);r6Mgt;@-+9-E2t@FXz( +zkh$)!g3>JMRK2Fj;(t$e?z7fJ;>m@#_j;z{x_|Hzf&NnB2s)A$gs4~;$GCPhUTy3P +z%V#3D9@E1QNOb5UL}Ny_3_nU3V+}u&a}K`lA2AVv-@33!d)C9C2b%Dl#4Wp`G3Y#VXS2vODOK +zH6Ik?Qx|Shj(@mOGi-V8X@6z3u=_{}wqW)r%+?8?joDa^!2`v;{CIT;J4sydrLxNW +zgUBvqK&gHOJyAP#hP2e3p;XKF@8~4;2})IVed0tk&>;1X$v5<9B1$g>xX)iE=u55Vhuq!Be_Zh7H_L0ojmJ-L7F +zFE;pV4HH_WmO_~*TJ#EHu@A`M)iV-3k0!7^nIQ%08mJA-{<~wkIj0>_AP%Vz_4#<* +vVkRz)@E~iIs*PG)1#O3 +z^y`3>TH+sKUrDep!F5A*^DLBShsp6!+cwX9)&)8gv+|D%3&Z;I1%KSpdiN0>xk9!c +zDy`)OH&-h44JMjA=aom~2^DT%XWWk@BGsF>T2qX9tzqChzyU07Q5O!7pHe8DLN|bp +zdlTM)yHOJqRKS{Ok~8#6aa|1~wdC!f6HE-YeYg|0WDJ@d5_mH_Xk7QkFCJ);Ovbo( +zM*o?Jc;mjWG9!T2#lADbM8kdZGB*L;W@^4gw!CX?raCf7DLTZhN{Ky@jK1r2x?YmoKqE|=?ny{_>M +zPW`hAEW;McTgizc-%KZOZ(LC{iJ26YFd!W@TJ{Cm#XaWxI)6edCQgN9H-J&#etfq2BL8u2mpTqV;-qg8O*hlGo~w*^QU&D8~wh* +zjRoXGhq}{c%8{%P7XC3-Gtv_4vPhC&G({}4=soxR<|OO8=U32O6B6X4cu}vawOLA8 +zUCsnRtC7@}bbt5OjoNEaRt9SW579M@O#ke{I?9P!pHGx8+mS!>XB(pRy3MCefz~7F +zw>%NX4brs~1S)zzfOF(+Ek>{e>P?F^u#}8;o=P;Q#CD^EyGpfE6zisF&7Wp0@PM#uQ8l(zm +zP$=UTG!hf$iSFO~fxdOLf78q%Z-e$nFbWUzJ1GphTCI4>g(9IgBR5F8ark@QBWdEc +z#zwo4Yk#W3G2@1tNzg@lLP}&U1pA#O7MZO99tC&}9^@dg>AOG&wsG)`L6)m8D^F-bi%B9Fk!}EJ;7-NTD*1)VJblm%?L@A$yiNR_ +zN*tPjf$n}UNI)oYV<>TQzBo6=Js6=KI%9xd0e}BZ7R)GU!se_DK2rXrAU6Li*}JNk +z#OhSK^H=?bSi&TwvW+tB(6HGW@aslSEso+M=;CSx(a|*2cpNSek=YCt0xna?)V|}{ +zTrlxT(K!Y~T&oi%3ZE#@!{L<{lsr)-9)*xnPKtF8N_ai2o#MZ0IBC!gL$Qsp6Z +z8Gn6s&gnB+R1tMMtKG)p(&tf2mQR=p-i$vp0Miv<=k6$|Zzncr&mA(7R@^rLWDs=I +zYQH*agSALP4X>gKE|9hMvV&2kw^AvZ!faW}gmNmbaQYn9l7n@!u{?2sM8nv;Tmv{O +zBGR5{oW=M)QBwCHaH^{#iZy8#xtUkH+J6it`5)T}v?(oj_fcQINt+8O%OF`^vYP4)mg#jyW+dip{0)NO!-BTlR_?Vq;{U272sSWrCqIVm8cQL +zrQmZDOJ2`L8Ma$4xNjy5tYTIfMP$0Cem%%TLvRcw`DGcD@_|S%DDQ4u3UK +z8OEd2toTA8!T^Fm!2&_{Jf5ZMEi=opVlV!Ik +z<##3|qPvm^@~emp!AcWqZnh=Kjei*4uG>XNb8+}}YQ^1W{{z9%$|}v5_lcs>dBQ)!1^xT1u+L5lB_@cL=1D~x9Wuz +zxNt@}3^A_ZoI>X}!Mx*>E&MhCXYogWFhGnpZyeU!If!?eQb$yAbIIg><^*Non_1wm3-B0LADTnL +z@Hcy)r!Y%8x7clRE|bsgq9dRISAT07rTRBH&nUUbh`5p}Mb34r|9T->C}v-0X5Ec}{F9eQ~ +zhpvHGyil+IHRzd!=^rDs{FlTe*YP3?X>tO`A|pa&VSnR#Teu~TOBJYPw~MpSAuLU& +zyl44lEnDGx9xOCB98{3a*(->ajsd_h%GmzCJno?Q&Pk&<XzvfiOofjV7KjkT8RO)tQL0)FS;%Xt5w2$x+^;B_k^yfQRtHC!ndJ& +z&$LQY(4EC(dem!kO3UB}z~JrL$`X9Qg4CLqd7*@Hn2yxVThL!~BW +za6(zTA3VB62Y($=87Nd(yuJH&{z_$9;Eo)VO3Rv;-+gC34F02W_29+|Br6D$(fQ&u +z--#+MO#x4xiRrjERDA?xBfD@AaPlspDCD~m)QT=JS6a}X`|BZPaBeJ2pzNE=Uv-7K +zn1=v3M4?6-!r&5zU^ey=zQ|mJwNTM3ynPRaeEP2%Ab&NAz23L!+3J78>DNz@ +zcRGVQ{T78^a%8e;7hmY!<1!>F%P3kh+(XpJvYZi2+_KJ{TpjXm2?SpLtC$kZ^u(dN +zk6GUPl;ciEb+#wFOVmH>IJ*$ACbE1kae%lKRxO7TlRgGD&%hdcWBJ_hl&X@eH`oP+ +zEE(=8aL=VamW$>w$<-v#=-Gn(S+ +z3;|DiLStTzl)8WRlm|&b);zFN)QobrszD9rwkLNNY*MK+{OAn&2FY03tEpf5Jpj54Gk>^{cy&yUeV3R*pRs^>fqgveU|_5X +zX+e%27qs2?7c(6BMHwnKprk+Z!)v4I=V4BAvdR#Lu7_d4gJ5#jsXEF%=!5*qv7*_k +zM%5WM$*Vou!Y7D@*jCa6 +zYHwni68{B(ythcY+j4tKR&BK~wpq+p_I^Ee5*>UjeSbn=Z@M{3)IDB1h`wTBv8Vf) +zGUabKI^vx;3Bt3)O=|zXZF^CRCWGFRoqrAlxT0y&$j5q6SnOOU5o0?&Ps&D6Ph}`# +zwY!d(eP-j3KN_5`jU!b3rM~A)_kI~RXoFy;RSw!9pX9GG#B*F)`BST~98N+GqC9J7 +zyK!;S%6g@oNzmD1wzp`{WZzW@_X`T-&+vR;$j+YidW6`>)~^xl)>6cuUrT~*Lu`sa +ztO}<9;#H(Q==8o5Tl}2UX=uGs%2mo19NqD{5U5NNDyo1Rz+mR`!bH$50%+yM7He^f +zdBH00TyclwDiI=}Q>9_P*rcl2Xnz%4ZX#_#&l$m~RIyIW^MA=hnUPFr%4bUq`Q(Rz +zpGTKslcC%{fbRe!3oa<}4EKVhQ%zS`J2GeEVr+blZ0VAxrNnYnS|C25Uov}{GHoRv +zfFHfa&Jwlv(G^#}8A+}RLJN4n=M4UA|@AT(`^>Fu_AKhK^yT$XPA9`v4eB_FD$ie0HD3Mi4;`s$hx2m9!(i8H!RzGg?C)?9Pb`H(UMj +z<8h|0U)ScABl{{?sOhBJJ+yFPUOt7$z&nj*C(+UXB1_UZbG@s_K&)51_vPKxQ4~mI +zVsBl7$^wYH(tS=4B*eHGsefF8JLWa`(eLnE!hn1l1gzVr56RAj0G_?aY8PsdnewAx +zZT0?fpiS{s0Aw+t2$UUQ8M-rW={ko_;sJpjJ1cye3c$(VR4{`2w#4pbFy+`(TlH;+ +zsRJ^EQ{%@!-i8GRBqYoy6jIyiS8YC#b<%d)^wC2C>^bvFCR##kmw%eyk5ClDOBLPk +z?ZY@ePP8_qq>U*{?_kesZmky4-_cLmu?|B2);KDCQ?spBIJE?6j8`9&{>UoVIRUPw +zrx_TuibGY$dcSSH{d>KOqk_s$i=X_v>|dz1MMzQ0CJX+$*Y(PaiAhNRl8^?%L6tN! +zoCVZZRG(i1T9lcmLVv7ZE)U68M1}eqD2QeQo3F+z`_kj^3BAQ~kifx^iJVoht|)uQ +zp@Zi4b(sUN|HikW5)IF|`VA(5R}Oig)4g3o@Edr6G~IUUj9NaSza}p$jk_pOfzO2r +z`Uq<(Z;%5A7DwJe@~J%KO>wC&&NuCjN8iAHC?0eTu|CfS+kf-2P)BX2mNxYJOt)<# +zud7R9Is%@q9H$%no|irWi2&HJ00Qekek!<&=4kke7cKnH-x$$Mg_!j+R4)~S@4-7 +zr5;gyzbMDhd4E#B$j(G@-z05T!$YZ=j)t^KKgHs!H_s_|8VC%~m+HAY-YK*Nx44gH +zaUG54Wez*M!YaxNS#)BjN)7?2M!A3NOY99Oa}Rb;C#RPNionqlK3@N0PTt)Op#&Rj>ipw!qDZki{+-V5CQD(Yj^-6 + diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.src b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.src new file mode 100644 index 0000000..90a9f6d Binary files /dev/null and b/pkg/gitdiff/testdata/apply/bin_fragment_delta_modify_large.src differ diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.out b/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.out new file mode 100644 index 0000000..c62cba2 Binary files /dev/null and b/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.out differ diff --git a/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.patch b/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.patch new file mode 100644 index 0000000..b3b846a --- /dev/null +++ b/pkg/gitdiff/testdata/apply/bin_fragment_literal_create.patch @@ -0,0 +1,8 @@ +diff --git a/gitdiff/testdata/apply/bin_fragment_literal_create.src b/gitdiff/testdata/apply/bin_fragment_literal_create.src +GIT binary patch +literal 32 +ocmZQzU`lR_IpTEvL*`JUiBtu5L*`JUiBtu5J`s>wb0HU+h#6w8q?tUO~cHmDjZi2<8yZ9XmKhhMdo +zWu(4bg|8QwzZ|1e*rL4P#)`FenXTQ5=J2y;^BfB}4 +zWkisH791|vOVl5e-@^VLX0s~Ky_UyN!3;CgPr>Edj0j+0gOSwSsFsr$0q6zUJph