From: "Arnaud Lacombe" <lacombar@gmail.com>
To: "Junio C Hamano" <gitster@pobox.com>
Cc: "Karl Chen" <quarl@cs.berkeley.edu>,
"Miklos Vajna" <vmiklos@frugalware.org>,
"David Aguilar" <davvid@gmail.com>,
"Git mailing list" <git@vger.kernel.org>
Subject: Re: git-rev-parse --symbolic-abbrev-name
Date: Sun, 4 Jan 2009 15:23:03 -0500 [thread overview]
Message-ID: <1a69a9d80901041223r1f3d2956ne05996793bb23e97@mail.gmail.com> (raw)
In-Reply-To: <7v63kuyibi.fsf@gitster.siamese.dyndns.org>
[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]
Hi,
On Sun, Jan 4, 2009 at 2:36 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Karl Chen <quarl@cs.berkeley.edu> writes:
>
>> ... you really think "branchfoo" instead of
>> "refs/heads/branchfoo" is a narrow special case?
>
> Of course it is narrower. There are namespaces other than "heads" under
> refs, and not everybody is interested in branches.
>
>> obviously all those people posting on blogs don't know about it :)
>
> Yes, and that won't be helped by any new option to the plumbing.
>
> The above two does not necessarily mean that it is useless to add a new
> option to help a narrow special case that is common, though.
>
You'll find hereafter two patches which implements this in
git-symbolic-ref and git-rev-parse. Feel free to choose the one you
find the best. If you choose to integrate one of these, tells me and
I'll do a proper documentation bits and patch submission.
Sample output:
~/git/% ./git-rev-parse --symbolic-short-name HEAD
master
~/git/% ./git-symbolic-ref -a HEAD
master
~/git/% git checkout v1.6.1
~/git/% ./git-rev-parse --symbolic-short-name HEAD
HEAD
~/git/% ./git-symbolic-ref -a HEAD
fatal: ref HEAD is not a symbolic ref
~/git/% ./git-symbolic-ref -qa HEAD
~/git/%
Thanks in advance,
- Arnaud
ps: I choose --symbolic-short-name as the opposite of
--symbolic-full-name for consistency.
ps2: sorry for the bogus mime-type
[-- Attachment #2: git-rev-parse_symbolic-short-name.diff --]
[-- Type: application/octet-stream, Size: 1507 bytes --]
diff --git a/builtin-rev-parse.c b/builtin-rev-parse.c
index 81d5a6f..70f4a33 100644
--- a/builtin-rev-parse.c
+++ b/builtin-rev-parse.c
@@ -24,6 +24,7 @@ static int show_type = NORMAL;
#define SHOW_SYMBOLIC_ASIS 1
#define SHOW_SYMBOLIC_FULL 2
+#define SHOW_SYMBOLIC_SHORT 3
static int symbolic;
static int abbrev;
static int output_sq;
@@ -110,7 +111,10 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
def = NULL;
if (symbolic && name) {
- if (symbolic == SHOW_SYMBOLIC_FULL) {
+ switch (symbolic) {
+ case SHOW_SYMBOLIC_FULL:
+ case SHOW_SYMBOLIC_SHORT:
+ {
unsigned char discard[20];
char *full;
@@ -125,13 +129,20 @@ static void show_rev(int type, const unsigned char *sha1, const char *name)
*/
break;
case 1: /* happy */
+ if (symbolic == SHOW_SYMBOLIC_SHORT) {
+ char *p;
+ p = strrchr(full, (int)'/');
+ if (p != NULL)
+ full = p + 1;
+ }
show_with_type(type, full);
break;
default: /* ambiguous */
error("refname '%s' is ambiguous", name);
- break;
}
- } else {
+ break;
+ }
+ default:
show_with_type(type, name);
}
}
@@ -506,6 +517,10 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
symbolic = SHOW_SYMBOLIC_FULL;
continue;
}
+ if (!strcmp(arg, "--symbolic-short-name")) {
+ symbolic = SHOW_SYMBOLIC_SHORT;
+ continue;
+ }
if (!strcmp(arg, "--all")) {
for_each_ref(show_reference, NULL);
continue;
[-- Attachment #3: git-symbolic-refs_abbrev-name.diff --]
[-- Type: application/octet-stream, Size: 1300 bytes --]
diff --git a/builtin-symbolic-ref.c b/builtin-symbolic-ref.c
index bfc78bb..ff9ff46 100644
--- a/builtin-symbolic-ref.c
+++ b/builtin-symbolic-ref.c
@@ -8,7 +8,7 @@ static const char * const git_symbolic_ref_usage[] = {
NULL
};
-static void check_symref(const char *HEAD, int quiet)
+static void check_symref(const char *HEAD, int quiet, int abbrev)
{
unsigned char sha1[20];
int flag;
@@ -22,15 +22,21 @@ static void check_symref(const char *HEAD, int quiet)
else
exit(1);
}
+ if (abbrev) {
+ char *p = strrchr(refs_heads_master, (int)'/');
+ if (p != NULL)
+ refs_heads_master = p + 1;
+ }
puts(refs_heads_master);
}
int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
{
- int quiet = 0;
+ int abbrev = 0, quiet = 0;
const char *msg = NULL;
struct option options[] = {
OPT__QUIET(&quiet),
+ OPT_BOOLEAN('a', NULL, &abbrev, "show only branch name"),
OPT_STRING('m', NULL, &msg, "reason", "reason of the update"),
OPT_END(),
};
@@ -41,7 +47,7 @@ int cmd_symbolic_ref(int argc, const char **argv, const char *prefix)
die("Refusing to perform update with empty message");
switch (argc) {
case 1:
- check_symref(argv[0], quiet);
+ check_symref(argv[0], quiet, abbrev);
break;
case 2:
create_symref(argv[0], argv[1], msg);
next prev parent reply other threads:[~2009-01-04 20:24 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-02 3:28 git-branch --print-current Karl Chen
2009-01-02 4:26 ` David Aguilar
2009-01-04 2:18 ` Karl Chen
2009-01-04 3:38 ` Miklos Vajna
2009-01-04 4:26 ` Karl Chen
2009-01-04 5:17 ` Junio C Hamano
2009-01-04 12:34 ` git-rev-parse --symbolic-abbrev-name [was Re: git-branch --print-current] Karl Chen
2009-01-04 12:40 ` demerphq
2009-01-04 19:36 ` git-rev-parse --symbolic-abbrev-name Junio C Hamano
2009-01-04 20:23 ` Arnaud Lacombe [this message]
2009-01-04 22:38 ` Miklos Vajna
2009-01-05 5:35 ` Arnaud Lacombe
2009-01-05 6:45 ` Miklos Vajna
2009-01-06 8:18 ` Junio C Hamano
2009-01-07 4:58 ` Arnaud Lacombe
2009-01-04 13:35 ` git-branch --print-current demerphq
2009-01-05 0:41 ` Junio C Hamano
2009-01-05 2:18 ` Shawn O. Pearce
2009-01-05 3:55 ` Junio C Hamano
2009-01-05 5:50 ` Jeff King
2009-01-04 8:21 ` Arnaud Lacombe
2009-01-04 12:40 ` Karl Chen
2009-01-04 12:49 ` demerphq
2009-01-04 17:55 ` Arnaud Lacombe
2009-01-04 18:02 ` Adeodato Simó
2009-01-04 21:48 ` Jakub Narebski
2009-01-04 10:07 ` Alexandre Dulaunoy
2009-01-04 12:31 ` demerphq
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=1a69a9d80901041223r1f3d2956ne05996793bb23e97@mail.gmail.com \
--to=lacombar@gmail.com \
--cc=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=quarl@cs.berkeley.edu \
--cc=vmiklos@frugalware.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 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).