X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/d1eb3f85c890ab979bb95febf1060f351b39daf3..7c47d096c74a2654fc9d67490adbe3066d24df98:/stgit/commands/common.py?ds=sidebyside diff --git a/stgit/commands/common.py b/stgit/commands/common.py index eacae95..7a9df6e 100644 --- a/stgit/commands/common.py +++ b/stgit/commands/common.py @@ -31,50 +31,50 @@ class CmdException(Exception): # Utility functions -def git_id(string, strict = False): +def git_id(string): """Return the GIT id """ if not string: return None string_list = string.split('/') + if len(string_list) == 2: + patch_id = string_list[1] + if not patch_id: + patch_id = 'top' + elif len(string_list) == 1: + patch_id = 'top' + else: + patch_id = None - if len(string_list) == 1: - patch_name = None - git_id = string_list[0] - - if git_id == 'HEAD': - return git.get_head() - if git_id == 'base': - return read_string(crt_series.get_base_file()) - - for path in [os.path.join(git.base_dir, 'refs', 'heads'), - os.path.join(git.base_dir, 'refs', 'tags')]: - id_file = os.path.join(path, git_id) - if os.path.isfile(id_file): - return read_string(id_file) - - # maybe GIT knows more about this id - if not strict: - return git.rev_parse(git_id) - elif len(string_list) == 2: - patch_name = string_list[0] - if patch_name == '': - patch_name = crt_series.get_current() - git_id = string_list[1] + patch_branch = string_list[0].split('@') + if len(patch_branch) == 1: + series = crt_series + elif len(patch_branch) == 2: + series = stack.Series(patch_branch[1]) + else: + raise CmdException, 'Unknown id: %s' % string + patch_name = patch_branch[0] + if not patch_name: + patch_name = series.get_current() if not patch_name: raise CmdException, 'No patches applied' - elif not (patch_name in crt_series.get_applied() - + crt_series.get_unapplied()): - raise CmdException, 'Unknown patch "%s"' % patch_name - if git_id == 'bottom': - return crt_series.get_patch(patch_name).get_bottom() - if git_id == 'top': - return crt_series.get_patch(patch_name).get_top() + # patch + if patch_name in series.get_applied() \ + or patch_name in series.get_unapplied(): + if patch_id == 'top': + return series.get_patch(patch_name).get_top() + elif patch_id == 'bottom': + return series.get_patch(patch_name).get_bottom() + + # base + if patch_name == 'base' and len(string_list) == 1: + return read_string(series.get_base_file()) - raise CmdException, 'Unknown id: %s' % string + # anything else failed + return git.rev_parse(string) def check_local_changes(): if git.local_changes(): @@ -99,25 +99,34 @@ def print_crt_patch(): else: print 'No patches applied' -def resolved(filename): +def resolved(filename, reset = None): + if reset: + reset_file = filename + '.' + reset + if os.path.isfile(reset_file): + if os.path.isfile(filename): + os.remove(filename) + os.rename(reset_file, filename) + git.update_cache([filename], force = True) + for ext in ['.local', '.older', '.remote']: fn = filename + ext if os.path.isfile(fn): os.remove(fn) -def resolved_all(): +def resolved_all(reset = None): conflicts = git.get_conflicts() if conflicts: for filename in conflicts: - resolved(filename) + resolved(filename, reset) os.remove(os.path.join(git.base_dir, 'conflicts')) def name_email(string): """Return a tuple consisting of the name and email parsed from a standard 'name ' string """ - str_list = re.findall('^(.*)\s+<(.*)>$', string) + string = re.sub('([^\w\s<>@.])', '\\\\\\1', string) + str_list = re.findall('^(.*)\s*<(.*)>\s*$', string) if not str_list: raise CmdException, 'Incorrect "name " string: %s' % string @@ -127,7 +136,8 @@ def name_email_date(string): """Return a tuple consisting of the name, email and date parsed from a 'name date' string """ - str_list = re.findall('^(.*)\s+<(.*)>\s+(.*)$', string) + string = re.sub('([^\w\s<>@.])', '\\\\\\1', string) + str_list = re.findall('^(.*)\s*<(.*)>\s*(.*)\s*$', string) if not str_list: raise CmdException, 'Incorrect "name date" string: %s' % string