+ def has_patch (self):
+ return self.touched_files () <> []
+
+ def apply (self, add_del_files):
+ def note_add_file (x):
+ add_del_files.append (('add', x.group (1)))
+ return ''
+
+ def note_del_file (x):
+ add_del_files.append (('del', x.group (1)))
+ return ''
+
+ re.sub('\n--- /dev/null\n\\+\\+\\+ b/([^\n]+)',
+ note_add_file, self.diff)
+
+ re.sub('\n--- a/([^\n]+)\n\\+\\+\\+ /dev/null',
+ note_del_file, self.diff)
+
+ p = os.popen ('patch -f -p1 ', 'w')
+ p.write (self.diff)
+
+ if p.close ():
+ raise PatchFailed, self.committish
+
+