X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/a2dcde7196ecd4e2c6d8bfff825d9b00a366c323..1780280ce740fd36b032ef6fc42feb34d1dd272b:/stgit/commands/common.py diff --git a/stgit/commands/common.py b/stgit/commands/common.py index 68bd39b..8084cbd 100644 --- a/stgit/commands/common.py +++ b/stgit/commands/common.py @@ -24,6 +24,8 @@ from optparse import OptionParser, make_option from stgit.utils import * from stgit import stack, git +crt_series = None + # Command exception class class CmdException(Exception): @@ -31,29 +33,29 @@ class CmdException(Exception): # Utility functions -def git_id(string): +def git_id(rev): """Return the GIT id """ - if not string: + if not rev: return None - string_list = string.split('/') - if len(string_list) == 2: - patch_id = string_list[1] + rev_list = rev.split('/') + if len(rev_list) == 2: + patch_id = rev_list[1] if not patch_id: patch_id = 'top' - elif len(string_list) == 1: + elif len(rev_list) == 1: patch_id = 'top' else: patch_id = None - patch_branch = string_list[0].split('@') + patch_branch = rev_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 + raise CmdException, 'Unknown id: %s' % rev patch_name = patch_branch[0] if not patch_name: @@ -68,13 +70,18 @@ def git_id(string): return series.get_patch(patch_name).get_top() elif patch_id == 'bottom': return series.get_patch(patch_name).get_bottom() + # Note we can return None here. + elif patch_id == 'top.old': + return series.get_patch(patch_name).get_old_top() + elif patch_id == 'bottom.old': + return series.get_patch(patch_name).get_old_bottom() # base - if patch_name == 'base' and len(string_list) == 1: + if patch_name == 'base' and len(rev_list) == 1: return read_string(series.get_base_file()) # anything else failed - return git.rev_parse(string) + return git.rev_parse(rev) def check_local_changes(): if git.local_changes(): @@ -89,46 +96,60 @@ def check_head_top_equal(): ' are doing, use the "refresh -f" command' def check_conflicts(): - if os.path.exists(os.path.join(git.base_dir, 'conflicts')): + if os.path.exists(os.path.join(git.get_base_dir(), 'conflicts')): raise CmdException, 'Unsolved conflicts. Please resolve them first' -def print_crt_patch(): - patch = crt_series.get_current() +def print_crt_patch(branch = None): + if not branch: + patch = crt_series.get_current() + else: + patch = stack.Series(branch).get_current() + if patch: print 'Now at patch "%s"' % 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) - os.remove(os.path.join(git.base_dir, 'conflicts')) + resolved(filename, reset) + os.remove(os.path.join(git.get_base_dir(), 'conflicts')) -def name_email(string): +def name_email(address): """Return a tuple consisting of the name and email parsed from a standard 'name ' string """ - str_list = re.findall('^(.*)\s+<(.*)>$', string) + address = re.sub('([^\w\s<>@.])', '\\\\\\1', address) + str_list = re.findall('^(.*)\s*<(.*)>\s*$', address) if not str_list: - raise CmdException, 'Incorrect "name " string: %s' % string + raise CmdException, 'Incorrect "name " string: %s' % address return str_list[0] -def name_email_date(string): +def name_email_date(address): """Return a tuple consisting of the name, email and date parsed from a 'name date' string """ - str_list = re.findall('^(.*)\s+<(.*)>\s+(.*)$', string) + address = re.sub('([^\w\s<>@.])', '\\\\\\1', address) + str_list = re.findall('^(.*)\s*<(.*)>\s*(.*)\s*$', address) if not str_list: - raise CmdException, 'Incorrect "name date" string: %s' % string + raise CmdException, 'Incorrect "name date" string: %s' % address return str_list[0]