patch: introduce changedfiles
returns the set of all changed files in a given patch
--- a/mercurial/patch.py Sat May 07 23:14:36 2011 +0200
+++ b/mercurial/patch.py Fri May 06 19:03:41 2011 +0300
@@ -1246,6 +1246,28 @@
except PatchError, err:
raise util.Abort(str(err))
+def changedfiles(patchpath, strip=1):
+ fp = open(patchpath, 'rb')
+ try:
+ changed = set()
+ for state, values in iterhunks(fp):
+ if state == 'hunk':
+ continue
+ elif state == 'file':
+ afile, bfile, first_hunk = values
+ current_file, missing = selectfile(afile, bfile,
+ first_hunk, strip)
+ changed.add(current_file)
+ elif state == 'git':
+ for gp in values:
+ gp.path = pathstrip(gp.path, strip - 1)[1]
+ changed.add(gp.path)
+ else:
+ raise util.Abort(_('unsupported parser state: %s') % state)
+ return changed
+ finally:
+ fp.close()
+
def b85diff(to, tn):
'''print base85-encoded binary diff'''
def gitindex(text):