From 5660771ca427fedb50cb3607e6b76c299d5d5fa3 Mon Sep 17 00:00:00 2001 From: Catalin Marinas Date: Sat, 30 May 2009 13:13:25 +0100 Subject: [PATCH] Add "stg id" support for "{public}" ref The {public} ref refers to the public version of the branch as described in the "publish" command. Signed-off-by: Catalin Marinas --- stgit/commands/common.py | 16 +++++++++++++++- stgit/commands/diff.py | 6 +----- stgit/commands/id.py | 13 +++++++------ stgit/commands/publish.py | 4 +--- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/stgit/commands/common.py b/stgit/commands/common.py index 4f53f91..dfd7e26 100644 --- a/stgit/commands/common.py +++ b/stgit/commands/common.py @@ -53,11 +53,20 @@ def git_id(crt_series, rev): repository = libstack.Repository.default() return git_commit(rev, repository, crt_series.get_name()).sha1 +def get_public_ref(branch_name): + """Return the public ref of the branch.""" + public_ref = config.get('branch.%s.public' % branch_name) + if not public_ref: + public_ref = 'refs/heads/%s.public' % branch_name + return public_ref + def git_commit(name, repository, branch_name = None): """Return the a Commit object if 'name' is a patch name or Git commit. The patch names allowed are in the form ':' and can be followed by standard symbols used by git rev-parse. If - is '{base}', it represents the bottom of the stack. + is '{base}', it represents the bottom of the stack. If is + {public}, it represents the public branch corresponding to the stack as + described in the 'publish' command. """ # Try a [branch:]patch name first branch, patch = parse_rev(name) @@ -69,6 +78,11 @@ def git_commit(name, repository, branch_name = None): base_id = repository.get_stack(branch).base.sha1 return repository.rev_parse(base_id + strip_prefix('{base}', patch)) + elif patch.startswith('{public}'): + public_ref = get_public_ref(branch) + return repository.rev_parse(public_ref + + strip_prefix('{public}', patch), + discard_stderr = True) # Other combination of branch and patch try: diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index 7d2f719..568651c 100644 --- a/stgit/commands/diff.py +++ b/stgit/commands/diff.py @@ -32,11 +32,7 @@ description = """ Show the diff (default) or diffstat between the current working copy or a tree-ish object and another tree-ish object (defaulting to HEAD). File names can also be given to restrict the diff output. The -tree-ish object can be an StGIT patch, a standard git commit, tag or -tree. In addition to these, the command also supports '{base}', -representing the bottom of the current stack. - -rev = '[branch:](|{base}) | '""" +tree-ish object has the format accepted by the linkstg:id[] command.""" args = [argparse.known_files, argparse.dirty_files] options = [ diff --git a/stgit/commands/id.py b/stgit/commands/id.py index 566edcc..654ff72 100644 --- a/stgit/commands/id.py +++ b/stgit/commands/id.py @@ -24,12 +24,13 @@ help = 'Print the git hash value of a StGit reference' kind = 'repo' usage = ['[options] [id]'] description = """ -Print the SHA1 value of a Git id (defaulting to HEAD). In addition to -the standard Git id's like heads and tags, this command also accepts -'[:]' and '[:]{base}' showing the id of a patch -or the base of the stack. If no branch is specified, it defaults to the -current one. The bottom of a patch is accessible with the -'[:]^' format.""" +Print the SHA1 value of a Git id (defaulting to HEAD). In addition to the +standard Git id's like heads and tags, this command also accepts +'[:]' for the id of a patch, '[:]\{base\}' for the base +of the stack and '[:]\{public\}' for the public branch corresponding +to the stack (see the 'publish' command for details). If no branch is +specified, it defaults to the current one. The bottom of a patch is accessible +with the '[:]^' format.""" args = [argparse.applied_patches, argparse.unapplied_patches, argparse.hidden_patches] diff --git a/stgit/commands/publish.py b/stgit/commands/publish.py index e4b1a8d..401fbdf 100644 --- a/stgit/commands/publish.py +++ b/stgit/commands/publish.py @@ -82,9 +82,7 @@ def func(parser, options, args): stack = repository.get_stack(options.branch) if not args: - public_ref = config.get('branch.%s.public' % stack.name) - if not public_ref: - public_ref = 'refs/heads/%s.public' % stack.name + public_ref = common.get_public_ref(stack.name) elif len(args) == 1: public_ref = args[0] else: -- 2.11.0