git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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);

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