git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@gmail.com>
To: git@vger.kernel.org, "Karl Hasselström" <kha@treskal.com>
Subject: [StGit PATCH] Add "stg id" support for "{public}" ref
Date: Fri, 29 May 2009 22:30:04 +0100	[thread overview]
Message-ID: <20090529213003.8908.87850.stgit@localhost.localdomain> (raw)

From: Catalin Marinas <catalin.marinas@arm.com>

The {public} ref refers to the public version of the branch as described
in the "publish" command.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
---
 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 '<branch>:<patch>' and can
     be followed by standard symbols used by git rev-parse. If <patch>
-    is '{base}', it represents the bottom of the stack.
+    is '{base}', it represents the bottom of the stack. If <patch> 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:](<patch>|{base}) | <tree-ish>'"""
+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
-'[<branch>:]<patch>' and '[<branch>:]{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
-'[<branch>:]<patch>^' 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
+'[<branch>:]<patch>' for the id of a patch, '[<branch>:]\{base\}' for the base
+of the stack and '[<branch>:]\{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 '[<branch>:]<patch>^' 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:

             reply	other threads:[~2009-05-29 21:35 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-29 21:30 Catalin Marinas [this message]
2009-05-31  8:20 ` [StGit PATCH] Add "stg id" support for "{public}" ref Karl Hasselström

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090529213003.8908.87850.stgit@localhost.localdomain \
    --to=catalin.marinas@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=kha@treskal.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).