return series.get_patch(patch).get_old_top()
elif patch_id == 'bottom.old':
return series.get_patch(patch).get_old_bottom()
+ elif patch_id == 'log':
+ return series.get_patch(patch).get_log()
if patch == 'base' and patch_id == None:
return read_string(series.get_base_file())
except RevParseException:
else:
print 'done'
+def pop_patches(patches, keep = False):
+ """Pop the patches in the list from the stack. It is assumed that
+ the patches are listed in the stack reverse order.
+ """
+ p = patches[-1]
+ if len(patches) == 1:
+ print 'Popping patch "%s"...' % p,
+ else:
+ print 'Popping "%s" - "%s" patches...' % (patches[0], p),
+ sys.stdout.flush()
+
+ crt_series.pop_patch(p, keep)
+
+ print 'done'
+
+def parse_patches(patch_args, patch_list):
+ """Parse patch_args list for patch names in patch_list and return
+ a list. The names can be individual patches and/or in the
+ patch1..patch2 format.
+ """
+ patches = []
+
+ for name in patch_args:
+ pair = name.split('..')
+ for p in pair:
+ if p and not p in patch_list:
+ raise CmdException, 'Unknown patch name: %s' % p
+
+ if len(pair) == 1:
+ # single patch name
+ pl = pair
+ elif len(pair) == 2:
+ # patch range [p1]..[p2]
+ # inclusive boundary
+ if pair[0]:
+ first = patch_list.index(pair[0])
+ else:
+ first = 0
+ # exclusive boundary
+ if pair[1]:
+ last = patch_list.index(pair[1]) + 1
+ else:
+ last = len(patch_list)
+
+ if last > first:
+ pl = patch_list[first:last]
+ else:
+ pl = patch_list[(last - 1):(first + 1)]
+ pl.reverse()
+ else:
+ raise CmdException, 'Malformed patch name: %s' % name
+
+ for p in pl:
+ if p in patches:
+ raise CmdException, 'Duplicate patch name: %s' % p
+
+ patches += pl
+
+ return patches
+
def name_email(address):
"""Return a tuple consisting of the name and email parsed from a
standard 'name <email>' or 'email (name)' string
raise CmdException, 'Incorrect "name <email> date" string: %s' % address
return str_list[0]
+
+def make_patch_name(msg):
+ """Return a string to be used as a patch name. This is generated
+ from the top line of the string passed as argument.
+ """
+ if not msg:
+ return None
+
+ subject_line = msg.lstrip().split('\n', 1)[0].lower()
+ return re.sub('[\W]+', '-', subject_line).strip('-')