git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [StGit PATCH] Add "stg id" support for "{public}" ref
@ 2009-05-29 21:30 Catalin Marinas
  2009-05-31  8:20 ` Karl Hasselström
  0 siblings, 1 reply; 2+ messages in thread
From: Catalin Marinas @ 2009-05-29 21:30 UTC (permalink / raw)
  To: git, Karl Hasselström

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:

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [StGit PATCH] Add "stg id" support for "{public}" ref
  2009-05-29 21:30 [StGit PATCH] Add "stg id" support for "{public}" ref Catalin Marinas
@ 2009-05-31  8:20 ` Karl Hasselström
  0 siblings, 0 replies; 2+ messages in thread
From: Karl Hasselström @ 2009-05-31  8:20 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: git

On 2009-05-29 22:30:04 +0100, Catalin Marinas wrote:

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

Looks reasonable.

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-05-31  8:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-29 21:30 [StGit PATCH] Add "stg id" support for "{public}" ref Catalin Marinas
2009-05-31  8:20 ` Karl Hasselström

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).