Code

Clean-up output from "git show-branch" and document it.
authorJunio C Hamano <junkio@cox.net>
Tue, 23 Aug 2005 06:16:46 +0000 (23:16 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 23 Aug 2005 06:18:17 +0000 (23:18 -0700)
When showing only one branch a lot of default output becomes redundant,
so clean it up a bit, and document what is shown.  Retire the earlier
implementation "git-show-branches-script".

Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-show-branch.txt [new file with mode: 0644]
Documentation/git-show-branches-script.txt [deleted file]
Documentation/git.txt
Makefile
git-show-branches-script [deleted file]
show-branch.c

diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.txt
new file mode 100644 (file)
index 0000000..71d5ba8
--- /dev/null
@@ -0,0 +1,107 @@
+git-show-branch(1)
+==================
+v0.99.4, Aug 2005
+
+NAME
+----
+git-show-branch - Show branches and their commits.
+
+SYNOPSIS
+--------
+'git show-branch [--all] [--heads] [--tags] [--more=<n>] [--merge-base] <reference>...'
+
+DESCRIPTION
+-----------
+Shows the head commits from the named <reference> (or all refs under
+$GIT_DIR/refs/heads), and displays concise list of commit logs
+to show their relationship semi-visually.
+
+OPTIONS
+-------
+<reference>::
+       Name of the reference under $GIT_DIR/refs/.
+
+--all --heads --tags::
+       Show all refs under $GIT_DIR/refs, $GIT_DIR/refs/heads,
+       and $GIT_DIR/refs/tags, respectively.
+
+--more=<n>::
+       Usually the command stops output upon showing the commit
+       that is the common ancestor of all the branches.  This
+       flag tells the command to go <n> commits beyond that.
+
+--merge-base::
+       Instead of showing the commit list, just act like the
+       'git-merge-base' command except that it can accept more
+       than two heads.
+
+
+OUTPUT
+------
+Given N <references>, the first N lines are the one-line
+description from their commit message.  The branch head that is
+pointed at by $GIT_DIR/HEAD is prefixed with an asterisk '*'
+character while other heads are prefixed with a '!' character.
+
+Following these N lines, one-line log for each commit is
+displayed, indented N places.  If a commit is on the I-th
+branch, the I-th indentation character shows a '+' sign;
+otherwise it shows a space.  Each commit shows a short name that
+can be used as an exended SHA1 to name that commit.
+
+The following example shows three branches, "master", "fixes"
+and "mhf":
+
+------------------------------------------------
+$ git show-branch master fixes mhf
+! [master] Add 'git show-branch'.
+ ! [fixes] Introduce "reset type" flag to "git reset"
+  ! [mhf] Allow "+remote:local" refspec to cause --force when fetching.
+---
+  + [mhf] Allow "+remote:local" refspec to cause --force when fetching.
+  + [mhf~1] Use git-octopus when pulling more than one heads.
+ +  [fixes] Introduce "reset type" flag to "git reset"
+  + [mhf~2] "git fetch --force".
+  + [mhf~3] Use .git/remote/origin, not .git/branches/origin.
+  + [mhf~4] Make "git pull" and "git fetch" default to origin
+  + [mhf~5] Infamous 'octopus merge'
+  + [mhf~6] Retire git-parse-remote.
+  + [mhf~7] Multi-head fetch.
+  + [mhf~8] Start adding the $GIT_DIR/remotes/ support.
++++ [master] Add 'git show-branch'.
+------------------------------------------------
+
+These three branches all forked from a common commit, [master],
+whose commit message is "Add 'git show-branch'.  "fixes" branch
+adds one commit 'Introduce "reset type"'.  "mhf" branch has many
+other commits.
+
+When only one head is given, the output format changes slightly
+to conserve space.  The '+' sign to show which commit is
+reachable from which head and the first N lines to show the list
+of heads being displayed are both meaningless so they are
+omitted.  Also the label given to each commit does not repeat
+the name of the branch because it is obvious.
+
+------------------------------------------------
+$ git show-branch --more=4 master
+[master] Add 'git show-branch'.
+[~1] Add a new extended SHA1 syntax <name>~<num>
+[~2] Fix "git-diff-script A B"
+[~3] git-ls-files: generalized pathspecs
+[~4] Make "git-ls-files" work in subdirectories
+------------------------------------------------
+
+Author
+------
+Written by Junio C Hamano <junkio@cox.net>
+
+
+Documentation
+--------------
+Documentation by Junio C Hamano.
+
+
+GIT
+---
+Part of the link:git.html[git] suite
diff --git a/Documentation/git-show-branches-script.txt b/Documentation/git-show-branches-script.txt
deleted file mode 100644 (file)
index c7fb02c..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-git-show-branches-script(1)
-===========================
-v0.99.4, Aug 2005
-
-NAME
-----
-git-show-branches-script - Show branches and their commits.
-
-SYNOPSIS
---------
-'git show-branches <reference>...'
-
-DESCRIPTION
------------
-Shows the head commits from the named <reference> (or all refs under
-$GIT_DIR/refs/heads), and displays concise list of commit logs
-to show their relationship semi-visually.
-
-OPTIONS
--------
-<reference>::
-       Name of the reference under $GIT_DIR/refs/heads/.
-
-
-OUTPUT
-------
-Given N <references>, the first N lines are the one-line
-description from their commit message.  The branch head that is
-pointed at by $GIT_DIR/HEAD is prefixed with an asterisk '*'
-character while other heads are prefixed with a '!' character.
-
-Following these N lines, one-line log for each commit is
-displayed, indented N places.  If a commit is on the I-th
-branch, the I-th indentation character shows a '+' sign;
-otherwise it shows a space.
-
-The following example shows three branches, "pu", "master" and
-"rc":
-
-------------------------------------------------
-* [pu] Add cheap local clone '-s' flag to git-clone-script
- ! [master] Documentation updates.
-  ! [rc] Merge master into rc
-+   Add cheap local clone '-s' flag to git-clone-script
-+   Alternate object pool mechanism updates.
-+   Audit rev-parse users.
-++  Documentation updates.
-  + Merge master into rc
-+++ [PATCH] plug memory leak in diff.c::diff_free_filepair()
-------------------------------------------------
-
-These three branches all forked from a common commit, "[PATCH]
-plug memory leak...", and "rc" has one commit ahead of it.  The
-"master" branch has one different commit that is also shared by
-"pu" branch, and "pu" branch has three more commits on top of
-"master" branch.
-
-
-Author
-------
-Written by Junio C Hamano <junkio@cox.net>
-
-
-Documentation
---------------
-Documentation by Junio C Hamano.
-
-
-GIT
----
-Part of the link:git.html[git] suite
index 8d313cba6e98a3ff1d2ba191ffbebc1f436de375..9d4fccdd47079144c67639cd460885eeefb55d68 100644 (file)
@@ -208,7 +208,7 @@ link:git-pull-script.html[git-pull-script]::
 link:git-commit-script.html[git-commit-script]::
        Record changes to the repository.
 
-link:git-show-branches-script.html[git-show-branches-script]::
+link:git-show-branch.html[git-show-branch]::
        Show branches and their commits.
 
 link:git-repack-script.html[git-repack-script]::
index 5d6a293f4d30f3c907412870b13595a86876318a..ac4f2110dcab8a66a4808a92f569b1eaaa10b699 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -71,7 +71,6 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
 SCRIPTS += git-count-objects-script
 # SCRIPTS += git-send-email-script
 SCRIPTS += git-revert-script
-SCRIPTS += git-show-branches-script
 
 PROG=   git-update-cache git-diff-files git-init-db git-write-tree \
        git-read-tree git-commit-tree git-cat-file git-fsck-cache \
diff --git a/git-show-branches-script b/git-show-branches-script
deleted file mode 100755 (executable)
index 90018a9..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-#
-# Show refs and their recent commits.
-#
-
-. git-sh-setup-script || die "Not a git repository"
-
-usage () {
-    die "usage: $0 <ref>..."
-}
-
-headref=`readlink $GIT_DIR/HEAD`
-
-case "$(git-rev-parse --no-revs)" in '') ;; *) usage ;; esac
-revs=$(git-rev-parse --revs-only --symbolic --no-flags "$@")
-flags=$(git-rev-parse --revs-only --flags "$@")
-case "$revs" in
-'')
-       revs=$(git-rev-parse --symbolic --all | sed -ne 's|^refs/heads/||p' |
-              sort)
-       shift ;;
-esac
-set x $revs
-shift
-
-hh= in=
-for ref
-do
-       case "/$headref" in
-       */"$ref") H='*' ;;
-       *) H='!' ;;
-       esac
-       h=`git-rev-parse --verify "$ref^0" 2>/dev/null` || continue
-       l=`git-log-script --max-count=1 --pretty=oneline "$h" |
-               sed -e 's/^[^ ]* //'`
-       hh="$hh $h"
-       echo "$in$H [$ref] $l"
-       in="$in "
-done
-set x $hh
-shift
-
-git-rev-list --pretty=oneline $flags $@ |
-while read v l
-do
-       in=''
-       for h
-       do
-               b=`git-merge-base $h $v`
-               case "$b" in
-               $v) in="$in+" ;;
-               *)  in="$in " ;;
-               esac
-       done
-
-       echo "$in $l"
-       case "$in" in
-       *' '*) ;;
-       *) break ;;
-       esac
-done
index c9a6fcebda5749fdd7e390fec39d189e6a6b3768..fc827ee4972254661f5fc09cb7f8890b1d007646 100644 (file)
@@ -223,6 +223,7 @@ int main(int ac, char **av)
        int head_path_len;
        unsigned char head_sha1[20];
        int merge_base = 0;
+       char **label;
 
        while (1 < ac && av[1][0] == '-') {
                char *arg = av[1];
@@ -297,7 +298,8 @@ int main(int ac, char **av)
        if (merge_base)
                return show_merge_base(seen, num_rev);
 
-       if (1 < num_rev)
+       /* Show list */
+       if (1 < num_rev) {
                for (i = 0; i < num_rev; i++) {
                        int j;
                        int is_head = rev_is_head(head_path,
@@ -310,16 +312,28 @@ int main(int ac, char **av)
                        printf("%c [%s] ", is_head ? '*' : '!', ref_name[i]);
                        show_one_commit(rev[i], NULL);
                }
+               for (i = 0; i < num_rev; i++)
+                       putchar('-');
+               putchar('\n');
+       }
+
+       label = ref_name;
        while (seen) {
                struct commit *commit = pop_one_commit(&seen);
                int this_flag = commit->object.flags;
+               static char *obvious[] = { "" };
+
                if ((this_flag & UNINTERESTING) && (--extra < 0))
                        break;
-               for (i = 0; i < num_rev; i++)
-                       putchar((this_flag & (1u << (i + REV_SHIFT)))
-                               ? '+' : ' ');
-               putchar(' ');
-               show_one_commit(commit, ref_name);
+               if (1 < num_rev) {
+                       for (i = 0; i < num_rev; i++)
+                               putchar((this_flag & (1u << (i + REV_SHIFT)))
+                                       ? '+' : ' ');
+                       putchar(' ');
+               }
+               show_one_commit(commit, label);
+               if (num_rev == 1)
+                       label = obvious;
        }
        return 0;
 }