Use the GIT-specific environment as default
[stgit] / stgit / commands / imprt.py
index 3759722..87fd5da 100644 (file)
@@ -28,7 +28,7 @@ usage = """%prog [options] [<file>]
 
 Create a new patch and apply the given GNU diff file (or the standard
 input). By default, the file name is used as the patch name but this
 
 Create a new patch and apply the given GNU diff file (or the standard
 input). By default, the file name is used as the patch name but this
-can be overriden with the '--name' option. The patch can either be a
+can be overridden with the '--name' option. The patch can either be a
 normal file with the description at the top or it can have standard
 mail format, the Subject, From and Date headers being used for
 generating the patch information.
 normal file with the description at the top or it can have standard
 mail format, the Subject, From and Date headers being used for
 generating the patch information.
@@ -72,36 +72,41 @@ def __parse_description(descr):
     author information (if any).
     """
     subject = body = ''
     author information (if any).
     """
     subject = body = ''
-    authname = authemail = None
+    authname = authemail = authdate = None
 
 
-    descr_lines = [line.strip() for line in descr.split('\n')]
+    descr_lines = [line.rstrip() for line in  descr.split('\n')]
     if not descr_lines:
         raise CmdException, "Empty patch description"
 
     if not descr_lines:
         raise CmdException, "Empty patch description"
 
-    pos = 1
+    lasthdr = 0
     end = len(descr_lines)
 
     end = len(descr_lines)
 
-    # get the subject
-    subject = descr_lines[0]
-
-    # ignore the empty lines after subject
-    while pos < end and descr_lines[pos] == '':
-        pos += 1
-
-    # check for a "From:" line
-    if pos < end and re.match('from:\s+', descr_lines[pos], re.I):
-        auth = re.findall('^.*?:\s+(.*)$', descr_lines[pos])[0]
-        authname, authemail = name_email(auth)
-        pos += 1
-
-        # ignore the empty lines
-        while pos < end and descr_lines[pos] == '':
-            pos += 1
+    # Parse the patch header
+    for pos in range(0, end):
+        if not descr_lines[pos]:
+           continue
+        # check for a "From|Author:" line
+        if re.match('\s*(?:from|author):\s+', descr_lines[pos], re.I):
+            auth = re.findall('^.*?:\s+(.*)$', descr_lines[pos])[0]
+            authname, authemail = name_email(auth)
+            lasthdr = pos + 1
+            continue
+        # check for a "Date:" line
+        if re.match('\s*date:\s+', descr_lines[pos], re.I):
+            authdate = re.findall('^.*?:\s+(.*)$', descr_lines[pos])[0]
+            lasthdr = pos + 1
+            continue
+        if subject:
+            break
+        # get the subject
+        subject = descr_lines[pos]
+        lasthdr = pos + 1
 
     # get the body
 
     # get the body
-    body = reduce(lambda x, y: x + '\n' + y, descr_lines[pos:], '').strip()
+    if lasthdr < end:
+        body = reduce(lambda x, y: x + '\n' + y, descr_lines[lasthdr:], '')
 
 
-    return (subject + '\n\n' + body, authname, authemail)
+    return (subject + body, authname, authemail, authdate)
 
 def __parse_mail(filename = None):
     """Parse the input file in a mail format and return (description,
 
 def __parse_mail(filename = None):
     """Parse the input file in a mail format and return (description,
@@ -154,11 +159,13 @@ def __parse_mail(filename = None):
         f.close()
 
     # parse the description for author information
         f.close()
 
     # parse the description for author information
-    descr, descr_authname, descr_authemail = __parse_description(descr)
+    descr, descr_authname, descr_authemail, descr_authdate = __parse_description(descr)
     if descr_authname:
         authname = descr_authname
     if descr_authemail:
         authemail = descr_authemail
     if descr_authname:
         authname = descr_authname
     if descr_authemail:
         authemail = descr_authemail
+    if descr_authdate:
+       authdate = descr_authdate
 
     return (descr, authname, authemail, authdate)
 
 
     return (descr, authname, authemail, authdate)
 
@@ -186,11 +193,11 @@ def __parse_patch(filename = None):
     if filename:
         f.close()
 
     if filename:
         f.close()
 
-    descr, authname, authemail = __parse_description(descr)
+    descr, authname, authemail, authdate = __parse_description(descr)
 
     # we don't yet have an agreed place for the creation date.
     # Just return None
 
     # we don't yet have an agreed place for the creation date.
     # Just return None
-    return (descr, authname, authemail, None)
+    return (descr, authname, authemail, authdate)
 
 def func(parser, options, args):
     """Import a GNU diff file as a new patch
 
 def func(parser, options, args):
     """Import a GNU diff file as a new patch
@@ -212,7 +219,7 @@ def func(parser, options, args):
     elif filename:
         patch = os.path.basename(filename)
     else:
     elif filename:
         patch = os.path.basename(filename)
     else:
-        raise CmdException, 'Unkown patch name'
+        raise CmdException, 'Unknown patch name'
 
     # the defaults
     message = author_name = author_email = author_date = committer_name = \
 
     # the defaults
     message = author_name = author_email = author_date = committer_name = \