def check_conflicts():
if git.get_conflicts():
raise CmdException('Unsolved conflicts. Please fix the conflicts'
- ' then use "resolve <files>" or revert the'
+ ' then use "git add --update <files>" or revert the'
' changes with "status --reset".')
def print_crt_patch(crt_series, branch = None):
# it might be that we use a custom rebase command with its own
# target type
tree_id = target
- if tree_id == git.get_head():
- out.info('Already at "%s", no need for rebasing.' % target)
- return
if target:
out.start('Rebasing to "%s"' % target)
else:
#
def __end_descr(line):
return re.match('---\s*$', line) or re.match('diff -', line) or \
- re.match('Index: ', line)
+ re.match('Index: ', line) or re.match('--- \w', line)
def __split_descr_diff(string):
"""Return the description and the diff from the given string
lasthdr = 0
end = len(descr_lines)
+ descr_strip = 0
# Parse the patch header
for pos in range(0, end):
if subject:
break
# get the subject
- subject = descr_lines[pos]
+ subject = descr_lines[pos][descr_strip:]
+ if re.match('commit [\da-f]{40}$', subject):
+ # 'git show' output, look for the real subject
+ subject = ''
+ descr_strip = 4
lasthdr = pos + 1
# get the body
if lasthdr < end:
- body = reduce(lambda x, y: x + '\n' + y, descr_lines[lasthdr:], '')
+ body = '\n' + '\n'.join(l[descr_strip:] for l in descr_lines[lasthdr:])
return (subject + body, authname, authemail, authdate)
authname = authemail = None
# '\n\t' can be found on multi-line headers
- descr = __decode_header(msg['subject']).replace('\n\t', ' ')
+ descr = __decode_header(msg['subject'])
+ descr = re.sub('\n[ \t]*', ' ', descr)
authdate = msg['date']
# remove the '[*PATCH*]' expression in the subject
# the rest of the message
msg_text = ''
for part in msg.walk():
- if part.get_content_type() == 'text/plain':
+ if part.get_content_type() in ['text/plain',
+ 'application/octet-stream']:
msg_text += part.get_payload(decode = True)
rem_descr, diff = __split_descr_diff(msg_text)
return getattr(self, n)
return property(new_f)
-def update_commit_data(cd, options, allow_edit = False):
+def update_commit_data(cd, options):
"""Return a new CommitData object updated according to the command line
options."""
# Set the commit message from commandline.
add_sign_line(cd.message, sign_str,
cd.committer.name, cd.committer.email))
- # Let user edit the commit message manually.
- if allow_edit and not options.message:
+ # Let user edit the commit message manually, unless
+ # --save-template or --message was specified.
+ if not getattr(options, 'save_template', None) and not options.message:
cd = cd.set_message(edit_string(cd.message, '.stgit-new.txt'))
return cd