-def make_message_options():
- def no_dup(parser):
- if parser.values.message != None:
- raise optparse.OptionValueError(
- 'Cannot give more than one --message or --file')
- def no_combine(parser):
- if (parser.values.message != None
- and parser.values.save_template != None):
- raise optparse.OptionValueError(
- 'Cannot give both --message/--file and --save-template')
- def msg_callback(option, opt_str, value, parser):
- no_dup(parser)
- parser.values.message = value
- no_combine(parser)
- def file_callback(option, opt_str, value, parser):
- no_dup(parser)
- if value == '-':
- parser.values.message = sys.stdin.read()
- else:
- f = file(value)
- parser.values.message = f.read()
- f.close()
- no_combine(parser)
- def templ_callback(option, opt_str, value, parser):
- if value == '-':
- def w(s):
- sys.stdout.write(s)
- else:
- def w(s):
- f = file(value, 'w+')
- f.write(s)
- f.close()
- parser.values.save_template = w
- no_combine(parser)
- m = optparse.make_option
- return [m('-m', '--message', action = 'callback', callback = msg_callback,
- dest = 'message', type = 'string',
- help = 'use MESSAGE instead of invoking the editor'),
- m('-f', '--file', action = 'callback', callback = file_callback,
- dest = 'message', type = 'string', metavar = 'FILE',
- help = 'use FILE instead of invoking the editor'),
- m('--save-template', action = 'callback', callback = templ_callback,
- metavar = 'FILE', dest = 'save_template', type = 'string',
- help = 'save the message template to FILE and exit')]
-
-def make_diff_opts_option():
- def diff_opts_callback(option, opt_str, value, parser):
- if value:
- parser.values.diff_flags.extend(value.split())
- else:
- parser.values.diff_flags = []
- return [optparse.make_option(
- '-O', '--diff-opts', dest = 'diff_flags',
- default = (config.get('stgit.diff-opts') or '').split(),
- action = 'callback', callback = diff_opts_callback,
- type = 'string', metavar = 'OPTIONS',
- help = 'extra options to pass to "git diff"')]
+def parse_name_email(address):
+ """Return a tuple consisting of the name and email parsed from a
+ standard 'name <email>' or 'email (name)' string."""
+ address = re.sub(r'[\\"]', r'\\\g<0>', address)
+ str_list = re.findall(r'^(.*)\s*<(.*)>\s*$', address)
+ if not str_list:
+ str_list = re.findall(r'^(.*)\s*\((.*)\)\s*$', address)
+ if not str_list:
+ return None
+ return (str_list[0][1], str_list[0][0])
+ return str_list[0]
+
+def parse_name_email_date(address):
+ """Return a tuple consisting of the name, email and date parsed
+ from a 'name <email> date' string."""
+ address = re.sub(r'[\\"]', r'\\\g<0>', address)
+ str_list = re.findall('^(.*)\s*<(.*)>\s*(.*)\s*$', address)
+ if not str_list:
+ return None
+ return str_list[0]