From: Lars Hjemli <hjemli@gmail.com>
To: git@vger.kernel.org
Subject: [PATCH] Add -v and --abbrev options to git-branch
Date: Fri, 24 Nov 2006 14:45:10 +0100 [thread overview]
Message-ID: <1164375910450-git-send-email-hjemli@gmail.com> (raw)
The new -v option makes git-branch show the abbreviated sha1 + subjectline
for each branch.
Additionally, minimum abbreviation length can be specified with
--abbrev=<length>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
Documentation/git-branch.txt | 9 +++++++-
builtin-branch.c | 46 ++++++++++++++++++++++++++++++++++++-----
2 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 5376760..4f5b5d5 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -8,7 +8,7 @@ git-branch - List, create, or delete bra
SYNOPSIS
--------
[verse]
-'git-branch' [-r] [-a]
+'git-branch' [-r] [-a] [-v] [--abbrev=<length>]
'git-branch' [-l] [-f] <branchname> [<start-point>]
'git-branch' (-d | -D) <branchname>...
@@ -52,6 +52,13 @@ OPTIONS
-a::
List both remote-tracking branches and local branches.
+-v::
+ Show sha1 and subject message for each head.
+
+--abbrev=<length>::
+ Alter minimum display length for sha1 in output listing,
+ default value is 7.
+
<branchname>::
The name of the branch to create or delete.
The new branch name must pass all checks defined by
diff --git a/builtin-branch.c b/builtin-branch.c
index 22e3285..f14d814 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -11,7 +11,7 @@
#include "builtin.h"
static const char builtin_branch_usage[] =
-"git-branch (-d | -D) <branchname> | [-l] [-f] <branchname> [<start-point>] | [-r] | [-a]";
+"git-branch (-d | -D) <branchname> | [-l] [-f] <branchname> [<start-point>] | [-r | -a] [-v] [--abbrev=<length>] ";
static const char *head;
@@ -87,10 +87,11 @@ static void delete_branches(int argc, co
struct ref_item {
char *name;
unsigned int kind;
+ unsigned char sha1[20];
};
struct ref_list {
- int index, alloc;
+ int index, alloc, maxwidth;
struct ref_item *list;
int kinds;
};
@@ -100,6 +101,7 @@ static int append_ref(const char *refnam
struct ref_list *ref_list = (struct ref_list*)(cb_data);
struct ref_item *newitem;
int kind = REF_UNKNOWN_TYPE;
+ int len;
/* Detect kind */
if (!strncmp(refname, "refs/heads/", 11)) {
@@ -128,6 +130,10 @@ static int append_ref(const char *refnam
newitem = &(ref_list->list[ref_list->index++]);
newitem->name = xstrdup(refname);
newitem->kind = kind;
+ memcpy(newitem->sha1, sha1, 20);
+ len = strlen(newitem->name);
+ if (len > ref_list->maxwidth)
+ ref_list->maxwidth = len;
return 0;
}
@@ -151,7 +157,24 @@ static int ref_cmp(const void *r1, const
return strcmp(c1->name, c2->name);
}
-static void print_ref_list(int kinds)
+static void print_ref_info(const unsigned char *sha1, int abbrev)
+{
+ struct commit *commit;
+ char subject[256];
+
+
+ commit = lookup_commit(sha1);
+ if (commit && !parse_commit(commit))
+ pretty_print_commit(CMIT_FMT_ONELINE, commit, ~0,
+ subject, sizeof(subject), 0,
+ NULL, NULL, 0);
+ else
+ sprintf(subject, " **** invalid ref ****");
+
+ printf(" %s %s", find_unique_abbrev(sha1, abbrev), subject);
+}
+
+static void print_ref_list(int kinds, int verbose, int abbrev)
{
int i;
char c;
@@ -169,9 +192,11 @@ static void print_ref_list(int kinds)
!strcmp(ref_list.list[i].name, head))
c = '*';
- printf("%c %s\n", c, ref_list.list[i].name);
+ printf("%c %-*s", c, ref_list.maxwidth, ref_list.list[i].name);
+ if (verbose)
+ print_ref_info(ref_list.list[i].sha1, abbrev);
+ printf("\n");
}
-
free_ref_list(&ref_list);
}
@@ -215,6 +240,7 @@ static void create_branch(const char *na
int cmd_branch(int argc, const char **argv, const char *prefix)
{
int delete = 0, force_delete = 0, force_create = 0;
+ int verbose = 0, abbrev = DEFAULT_ABBREV;
int reflog = 0;
int kinds = REF_LOCAL_BRANCH;
int i;
@@ -255,6 +281,14 @@ int cmd_branch(int argc, const char **ar
reflog = 1;
continue;
}
+ if (!strncmp(arg, "--abbrev=", 9)) {
+ abbrev = atoi(arg+9);
+ continue;
+ }
+ if (!strcmp(arg, "-v")) {
+ verbose = 1;
+ continue;
+ }
usage(builtin_branch_usage);
}
@@ -268,7 +302,7 @@ int cmd_branch(int argc, const char **ar
if (delete)
delete_branches(argc - i, argv + i, force_delete);
else if (i == argc)
- print_ref_list(kinds);
+ print_ref_list(kinds, verbose, abbrev);
else if (i == argc - 1)
create_branch(argv[i], head, force_create, reflog);
else if (i == argc - 2)
--
1.4.4
next reply other threads:[~2006-11-24 13:45 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-24 13:45 Lars Hjemli [this message]
2006-11-24 14:04 ` [PATCH] Add -v and --abbrev options to git-branch Jakub Narebski
2006-11-24 15:22 ` Lars Hjemli
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=1164375910450-git-send-email-hjemli@gmail.com \
--to=hjemli@gmail.com \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.