X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/9b63cf56576bf219d26f490f3c011e937a5f7129..d1368d811f20d4957d9fca7a8fe016e764f77d1b:/stgit/commands/common.py diff --git a/stgit/commands/common.py b/stgit/commands/common.py index 88b1b94..8a625f8 100644 --- a/stgit/commands/common.py +++ b/stgit/commands/common.py @@ -214,7 +214,7 @@ def pop_patches(patches, keep = False): print 'done' -def parse_patches(patch_args, patch_list): +def parse_patches(patch_args, patch_list, boundary = 0, ordered = False): """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. @@ -236,12 +236,26 @@ def parse_patches(patch_args, patch_list): if pair[0]: first = patch_list.index(pair[0]) else: - first = 0 + first = -1 # exclusive boundary if pair[1]: last = patch_list.index(pair[1]) + 1 else: - last = len(patch_list) + last = -1 + + # only cross the boundary if explicitly asked + if not boundary: + boundary = len(patch_list) + if first < 0: + if last <= boundary: + first = 0 + else: + first = boundary + if last < 0: + if first < boundary: + last = boundary + else: + last = len(patch_list) if last > first: pl = patch_list[first:last] @@ -257,6 +271,9 @@ def parse_patches(patch_args, patch_list): patches += pl + if ordered: + patches = [p for p in patch_list if p in patches] + return patches def name_email(address): @@ -284,12 +301,27 @@ def name_email_date(address): return str_list[0] -def make_patch_name(msg): +def patch_name_from_msg(msg): """Return a string to be used as a patch name. This is generated - from the top line of the string passed as argument. - """ + from the first 30 characters of the top line of the string passed + as argument.""" if not msg: return None - subject_line = msg.lstrip().split('\n', 1)[0].lower() + subject_line = msg[:30].lstrip().split('\n', 1)[0].lower() return re.sub('[\W]+', '-', subject_line).strip('-') + +def make_patch_name(msg, unacceptable, default_name = 'patch', + alternative = True): + """Return a patch name generated from the given commit message, + guaranteed to make unacceptable(name) be false. If the commit + message is empty, base the name on default_name instead.""" + patchname = patch_name_from_msg(msg) + if not patchname: + patchname = default_name + if alternative and unacceptable(patchname): + suffix = 0 + while unacceptable('%s-%d' % (patchname, suffix)): + suffix += 1 + patchname = '%s-%d' % (patchname, suffix) + return patchname