9 _boundary_line_regex
= re
.compile(r
'^---')
10 _diff_head_regex
= re
.compile(r
'^diff --git a/(.*) b/(.*)$')
11 _index_line_regex
= re
.compile(r
'^index ([a-f0-9]{7,})\.\.([a-f0-9]{7,}) ')
12 _all_zeros_regex
= re
.compile(r
'^0+$')
14 class PatchError(Exception):
19 def __init__(self
, data
):
20 self
.blobs_pre
= set()
21 self
.blobs_post
= set()
22 self
.missing_files
= False
27 def _parse(self
, data
):
32 for line
in data
.splitlines(True):
33 if _boundary_line_regex
.match(line
):
36 m
= _diff_head_regex
.match(line
)
39 # at least the 'pre' filename should exist
43 m
= _index_line_regex
.match(line
)
45 if not _all_zeros_regex
.match(m
.group(1)):
46 self
.blobs_pre
.add(m
.group(1))
47 self
._check
_file
(filename
)
48 self
.blobs_post
.add(m
.group(2))
53 self
.notes
= ''.join(notes
)
55 def _check_file(self
, name
):
56 if os
.path
.basename(name
) not in dbcache
.file_cache
:
57 self
.missing_files
= True
58 print 'patch for missing file "%s"' % name
61 output
, ret
= git('am', input=self
.data
)
65 git('reset', '--hard')