Add "stg id" support for "{public}" ref
authorCatalin Marinas <catalin.marinas@arm.com>
Sat, 30 May 2009 12:13:25 +0000 (13:13 +0100)
committerCatalin Marinas <catalin.marinas@gmail.com>
Sat, 30 May 2009 12:13:25 +0000 (13:13 +0100)
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
stgit/commands/diff.py
stgit/commands/id.py
stgit/commands/publish.py

index 4f53f91..dfd7e26 100644 (file)
@@ -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:
index 7d2f719..568651c 100644 (file)
@@ -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 = [
index 566edcc..654ff72 100644 (file)
@@ -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]
index e4b1a8d..401fbdf 100644 (file)
@@ -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: