--- a/mercurial/patch.py Thu Mar 22 10:40:28 2007 -0700
+++ b/mercurial/patch.py Thu Mar 22 10:44:59 2007 -0700
@@ -33,11 +33,11 @@
def extract(ui, fileobj):
'''extract patch from data read from fileobj.
- patch can be normal patch or contained in email message.
+ patch can be a normal patch or contained in an email message.
- return tuple (filename, message, user, date). any item in returned
- tuple can be None. if filename is None, fileobj did not contain
- patch. caller must unlink filename when done.'''
+ return tuple (filename, message, user, date, node, p1, p2).
+ Any item in the returned tuple can be None. If filename is None,
+ fileobj did not contain a patch. Caller must unlink filename when done.'''
# attempt to detect the start of a patch
# (this heuristic is borrowed from quilt)
@@ -54,6 +54,8 @@
user = msg['From']
# should try to parse msg['Date']
date = None
+ nodeid = None
+ parents = []
if message:
if message.startswith('[PATCH'):
@@ -97,6 +99,10 @@
ui.debug('From: %s\n' % user)
elif line.startswith("# Date "):
date = line[7:]
+ elif line.startswith("# Node ID "):
+ nodeid = line[10:]
+ elif line.startswith("# Parent "):
+ parents.append(line[10:])
elif line == '---' and 'git-send-email' in msg['X-Mailer']:
ignoretext = True
if not line.startswith('# ') and not ignoretext:
@@ -117,8 +123,10 @@
tmpfp.close()
if not diffs_seen:
os.unlink(tmpname)
- return None, message, user, date
- return tmpname, message, user, date
+ return None, message, user, date, None, None, None
+ p1 = parents and parents.pop(0) or None
+ p2 = parents and parents.pop(0) or None
+ return tmpname, message, user, date, nodeid, p1, p2
GP_PATCH = 1 << 0 # we have to run patch
GP_FILTER = 1 << 1 # there's some copy/rename operation