From a2dcde7196ecd4e2c6d8bfff825d9b00a366c323 Mon Sep 17 00:00:00 2001 From: Catalin Marinas Date: Tue, 27 Sep 2005 16:11:00 +0100 Subject: [PATCH] Add support for branch in the patch id By default, only patch/top and patch/bottom on the current branch are supported. This patch adds the patch@branch/... support. Signed-off-by: Catalin Marinas --- stgit/commands/common.py | 64 ++++++++++++++++++++++++------------------------ stgit/commands/id.py | 6 +++-- stgit/git.py | 2 +- stgit/stack.py | 6 ++--- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/stgit/commands/common.py b/stgit/commands/common.py index eacae95..68bd39b 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(): diff --git a/stgit/commands/id.py b/stgit/commands/id.py index 4c07c4f..1cf6ea6 100644 --- a/stgit/commands/id.py +++ b/stgit/commands/id.py @@ -28,7 +28,9 @@ usage = """%prog [options] [id] Print the hash value of a GIT id (defaulting to HEAD). In addition to the standard GIT id's like heads and tags, this command also accepts -'base' and '[]/(bottom | top)'.""" +'base[@]' and '[[@]][/(bottom | top)]'. If no +'top' or 'bottom' are passed and is a valid patch name, 'top' +will be used by default.""" options = [make_option('-b', '--branch', help = 'use BRANCH instead of the default one')] @@ -44,4 +46,4 @@ def func(parser, options, args): else: parser.error('incorrect number of arguments') - print git_id(id_str, strict = True) + print git_id(id_str) diff --git a/stgit/git.py b/stgit/git.py index cc0ae79..a45671b 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -236,7 +236,7 @@ def __set_head(val): def rev_parse(git_id): """Parse the string and return an SHA1 id """ - _output(['git-rev-parse', git_id]) + return _output(['git-rev-parse', git_id]).strip() def add(names): """Add the files or recursively add the directory contents diff --git a/stgit/stack.py b/stgit/stack.py index 2e36d88..03a0060 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -297,8 +297,7 @@ class Series: def get_applied(self): if not os.path.isfile(self.__applied_file): - raise StackException, \ - 'No StGIT metadata found. Try "stg init" first' + raise StackException, 'Branch "%s" not initialised' % self.__name f = file(self.__applied_file) names = [line.strip() for line in f.readlines()] f.close() @@ -306,8 +305,7 @@ class Series: def get_unapplied(self): if not os.path.isfile(self.__unapplied_file): - raise StackException, \ - 'No StGIT metadata found. Try "stg init" first' + raise StackException, 'Branch "%s" not initialised' % self.__name f = file(self.__unapplied_file) names = [line.strip() for line in f.readlines()] f.close() -- 2.11.0