Skip to content

Commit 6e81b9d

Browse files
authored
Merge pull request #106 from marxin/binary-patch
support binary patch format
2 parents a840305 + 7eb7da9 commit 6e81b9d

3 files changed

Lines changed: 39 additions & 0 deletions

File tree

tests/samples/binary.diff

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
From 62ea0eaf7e00170a8fca79f665442f9f44725956 Mon Sep 17 00:00:00 2001
2+
From: Martin Liska <mliska@suse.cz>
3+
Date: Fri, 9 Dec 2022 12:05:32 +0100
4+
Subject: [PATCH] add pixel
5+
6+
---
7+
1x1.png | Bin 0 -> 95 bytes
8+
1 file changed, 0 insertions(+), 0 deletions(-)
9+
create mode 100644 1x1.png
10+
11+
diff --git a/1x1.png b/1x1.png
12+
new file mode 100644
13+
index 0000000000000000000000000000000000000000..1914264c08781d1f30ee0b8482bccf44586f2dc1
14+
GIT binary patch
15+
literal 95
16+
zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?ju0VQumF+E%TuG2$FoVOh
17+
l8)-lem#2$k2*>s01R$G<f$@>z9%CSj!PC{xWt~$(697H@6ZHT9
18+
19+
literal 0
20+
HcmV?d00001
21+
22+
--
23+
2.38.1

tests/test_parser.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,16 @@ def do_test_diff_hunk_positions(self, res):
434434

435435
self.assertEqual(hunk_positions, expected_hunk_positions)
436436

437+
def test_binary_patch(self):
438+
utf8_file = os.path.join(self.samples_dir, 'samples/binary.diff')
439+
with open(utf8_file, 'r') as diff_file:
440+
res = PatchSet(diff_file)
441+
self.assertEqual(len(res), 1)
442+
patch = res[0]
443+
self.assertEqual(patch.source_file, '/dev/null')
444+
self.assertEqual(patch.target_file, 'b/1x1.png')
445+
self.assertTrue(patch.is_binary_file)
446+
self.assertTrue(patch.is_added_file)
437447

438448
class TestVCSSamples(unittest.TestCase):
439449
"""Tests for real examples from VCS."""

unidiff/patch.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,12 @@ def _parse(self, diff, encoding, metadata_only):
585585
current_file = None
586586
continue
587587

588+
if line == 'GIT binary patch\n':
589+
current_file.is_binary_file = True
590+
patch_info = None
591+
current_file = None
592+
continue
593+
588594
patch_info.append(line)
589595

590596
@classmethod

0 commit comments

Comments
 (0)