git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-name-rev: allow --name-only in combination with --stdin
@ 2008-07-31 13:20 Pieter de Bie
  2008-08-01  7:23 ` Junio C Hamano
  2008-08-02 18:12 ` [PATCH] git-name-rev: allow --name-only in combination with --stdin Junio C Hamano
  0 siblings, 2 replies; 8+ messages in thread
From: Pieter de Bie @ 2008-07-31 13:20 UTC (permalink / raw)
  To: Git Mailinglist, Johannes Schindelin; +Cc: Pieter de Bie


Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
---

	Or was there a specific reason not to allow this?

 Documentation/git-name-rev.txt |    3 +--
 builtin-name-rev.c             |   10 ++++++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-name-rev.txt b/Documentation/git-name-rev.txt
index 6e77ab1..c8a72dd 100644
--- a/Documentation/git-name-rev.txt
+++ b/Documentation/git-name-rev.txt
@@ -38,8 +38,7 @@ OPTIONS
 	Instead of printing both the SHA-1 and the name, print only
 	the name.  If given with --tags the usual tag prefix of
 	"tags/" is also omitted from the name, matching the output
-	of 'git-describe' more closely.  This option
-	cannot be combined with --stdin.
+	of 'git-describe' more closely.
 
 --no-undefined::
 	Die with error code != 0 when a reference is undefined,
diff --git a/builtin-name-rev.c b/builtin-name-rev.c
index 85612c4..0536af4 100644
--- a/builtin-name-rev.c
+++ b/builtin-name-rev.c
@@ -266,8 +266,14 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
 					if (!name)
 						continue;
 
-					fwrite(p_start, p - p_start + 1, 1, stdout);
-					printf(" (%s)", name);
+					if (data.name_only) {
+						fwrite(p_start, p - p_start + 1 - 40, 1, stdout);
+						printf(name);
+					}
+					else {
+						fwrite(p_start, p - p_start + 1, 1, stdout);
+						printf(" (%s)", name);
+					}
 					p_start = p + 1;
 				}
 			}
-- 
1.6.0.rc1.163.gc85c5.dirty

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] git-name-rev: allow --name-only in combination with --stdin
  2008-07-31 13:20 [PATCH] git-name-rev: allow --name-only in combination with --stdin Pieter de Bie
@ 2008-08-01  7:23 ` Junio C Hamano
  2008-08-01 10:57   ` Johannes Schindelin
  2008-08-02 18:12 ` [PATCH] git-name-rev: allow --name-only in combination with --stdin Junio C Hamano
  1 sibling, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2008-08-01  7:23 UTC (permalink / raw)
  To: Pieter de Bie; +Cc: Git Mailinglist, Johannes Schindelin

Pieter de Bie <pdebie@ai.rug.nl> writes:

> Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
> ---
>
> 	Or was there a specific reason not to allow this?

I'll let Dscho answer that one.

> diff --git a/builtin-name-rev.c b/builtin-name-rev.c
> index 85612c4..0536af4 100644
> --- a/builtin-name-rev.c
> +++ b/builtin-name-rev.c
> @@ -266,8 +266,14 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
>  					if (!name)
>  						continue;
>  
> -					fwrite(p_start, p - p_start + 1, 1, stdout);
> -					printf(" (%s)", name);
> +					if (data.name_only) {
> +						fwrite(p_start, p - p_start + 1 - 40, 1, stdout);
> +						printf(name);
> +					}
> +					else {
> +						fwrite(p_start, p - p_start + 1, 1, stdout);
> +						printf(" (%s)", name);
> +					}
>  					p_start = p + 1;
>  				}
>  			}

Is it just me to find that this part is getting indented too deeply to be
readable?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] git-name-rev: allow --name-only in combination with --stdin
  2008-08-01  7:23 ` Junio C Hamano
@ 2008-08-01 10:57   ` Johannes Schindelin
  2008-08-01 11:16     ` [PATCH] builtin-name-rev: refactor stdin handling to its own function Pieter de Bie
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Schindelin @ 2008-08-01 10:57 UTC (permalink / raw)
  To: Junio C Hamano, spearce; +Cc: Pieter de Bie, Git Mailinglist

Hi,

On Fri, 1 Aug 2008, Junio C Hamano wrote:

> Pieter de Bie <pdebie@ai.rug.nl> writes:
> 
> > Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
> > ---
> >
> > 	Or was there a specific reason not to allow this?
> 
> I'll let Dscho answer that one.

... who let's Shawn answer that one.

> > diff --git a/builtin-name-rev.c b/builtin-name-rev.c
> > index 85612c4..0536af4 100644
> > --- a/builtin-name-rev.c
> > +++ b/builtin-name-rev.c
> > @@ -266,8 +266,14 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
> >  					if (!name)
> >  						continue;
> >  
> > -					fwrite(p_start, p - p_start + 1, 1, stdout);
> > -					printf(" (%s)", name);
> > +					if (data.name_only) {
> > +						fwrite(p_start, p - p_start + 1 - 40, 1, stdout);
> > +						printf(name);
> > +					}
> > +					else {
> > +						fwrite(p_start, p - p_start + 1, 1, stdout);
> > +						printf(" (%s)", name);
> > +					}
> >  					p_start = p + 1;
> >  				}
> >  			}
> 
> Is it just me to find that this part is getting indented too deeply to be
> readable?

No.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] builtin-name-rev: refactor stdin handling to its own function
  2008-08-01 10:57   ` Johannes Schindelin
@ 2008-08-01 11:16     ` Pieter de Bie
  2008-08-01 19:07       ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: Pieter de Bie @ 2008-08-01 11:16 UTC (permalink / raw)
  To: Junio C Hamano, Johannes Schindelin, Shawn O. Pearce,
	Git Mailinglist
  Cc: Pieter de Bie


Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
---

    On 1 aug 2008, at 09:23, Junio C Hamano wrote:
    >Is it just me to find that this part is getting indented too deeply to be
    >readable?

    How about something like this then?

 builtin-name-rev.c |   93 ++++++++++++++++++++++++++++------------------------
 1 files changed, 50 insertions(+), 43 deletions(-)

diff --git a/builtin-name-rev.c b/builtin-name-rev.c
index 0536af4..057172d 100644
--- a/builtin-name-rev.c
+++ b/builtin-name-rev.c
@@ -176,6 +176,52 @@ static char const * const name_rev_usage[] = {
 	NULL
 };
 
+static void handle_stdin_line(char *p_start, int name_only)
+{
+	int forty = 0;
+	char *p;
+	for (p = p_start; *p; p++) {
+#define ishex(x) (isdigit((x)) || ((x) >= 'a' && (x) <= 'f'))
+		if (!ishex(*p))
+			forty = 0;
+		else if (++forty == 40 && !ishex(*(p+1))) {
+			unsigned char sha1[40];
+			const char *name = NULL;
+			char c = *(p+1);
+
+			forty = 0;
+
+			*(p+1) = 0;
+			if (!get_sha1(p - 39, sha1)) {
+				struct object *o =
+					lookup_object(sha1);
+				if (o)
+					name = get_rev_name(o);
+			}
+			*(p+1) = c;
+
+			if (!name)
+				continue;
+
+			if (name_only) {
+				fwrite(p_start, p - p_start + 1 - 40,
+					1, stdout);sssss
+				printf(name);
+			}
+			else {
+				fwrite(p_start, p - p_start + 1, 1, stdout);
+				printf(" (%s)", name);
+			}
+			p_start = p + 1;
+		}
+	}
+
+	/* flush */
+	if (p != p_start)
+		fwrite(p_start, p - p_start, 1, stdout);
+
+}
+
 int cmd_name_rev(int argc, const char **argv, const char *prefix)
 {
 	struct object_array revs = { 0, 0, NULL };
@@ -234,53 +280,14 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
 
 	if (transform_stdin) {
 		char buffer[2048];
-		char *p, *p_start;
+		char *p_start;
 
 		while (!feof(stdin)) {
-			int forty = 0;
-			p = fgets(buffer, sizeof(buffer), stdin);
-			if (!p)
+			p_start = fgets(buffer, sizeof(buffer), stdin);
+			if (!p_start)
 				break;
 
-			for (p_start = p; *p; p++) {
-#define ishex(x) (isdigit((x)) || ((x) >= 'a' && (x) <= 'f'))
-				if (!ishex(*p))
-					forty = 0;
-				else if (++forty == 40 &&
-						!ishex(*(p+1))) {
-					unsigned char sha1[40];
-					const char *name = NULL;
-					char c = *(p+1);
-
-					forty = 0;
-
-					*(p+1) = 0;
-					if (!get_sha1(p - 39, sha1)) {
-						struct object *o =
-							lookup_object(sha1);
-						if (o)
-							name = get_rev_name(o);
-					}
-					*(p+1) = c;
-
-					if (!name)
-						continue;
-
-					if (data.name_only) {
-						fwrite(p_start, p - p_start + 1 - 40, 1, stdout);
-						printf(name);
-					}
-					else {
-						fwrite(p_start, p - p_start + 1, 1, stdout);
-						printf(" (%s)", name);
-					}
-					p_start = p + 1;
-				}
-			}
-
-			/* flush */
-			if (p_start != p)
-				fwrite(p_start, p - p_start, 1, stdout);
+			handle_stdin_line(p_start, data.name_only);
 		}
 	} else if (all) {
 		int i, max;
-- 
1.6.0.rc1.214.g5f0bd

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] builtin-name-rev: refactor stdin handling to its own function
  2008-08-01 11:16     ` [PATCH] builtin-name-rev: refactor stdin handling to its own function Pieter de Bie
@ 2008-08-01 19:07       ` Junio C Hamano
  0 siblings, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2008-08-01 19:07 UTC (permalink / raw)
  To: Pieter de Bie; +Cc: Johannes Schindelin, Shawn O. Pearce, Git Mailinglist

Pieter de Bie <pdebie@ai.rug.nl> writes:

> Signed-off-by: Pieter de Bie <pdebie@ai.rug.nl>
> ---
>
>     On 1 aug 2008, at 09:23, Junio C Hamano wrote:
>     >Is it just me to find that this part is getting indented too deeply to be
>     >readable?
>
>     How about something like this then?

Much nicer, except that this refactoring should come first and then a new
feature.  Dropping those extra five 's' so that it would compile would be
a nice bonus as well ;-)

> ...
> +
> +			if (name_only) {
> +				fwrite(p_start, p - p_start + 1 - 40,
> +					1, stdout);sssss
> +				printf(name);
> +			}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] git-name-rev: allow --name-only in combination with --stdin
  2008-07-31 13:20 [PATCH] git-name-rev: allow --name-only in combination with --stdin Pieter de Bie
  2008-08-01  7:23 ` Junio C Hamano
@ 2008-08-02 18:12 ` Junio C Hamano
  2008-08-03 13:44   ` [PATCH] git-name-rev: don't use printf without format René Scharfe
  1 sibling, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2008-08-02 18:12 UTC (permalink / raw)
  To: Pieter de Bie; +Cc: Git Mailinglist, Johannes Schindelin

Pieter de Bie <pdebie@ai.rug.nl> writes:

> 	Or was there a specific reason not to allow this?

The --name-only option to the command was added in 1.5.3 cycle, but the
original focus was only to support describe.  I do not see any fundamental
reason to disallow it --- we could even say this is a bug.

I've applied the "split single line processing to a separate function" and
then this patch to 'maint' as a bugfix.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] git-name-rev: don't use printf without format
  2008-08-02 18:12 ` [PATCH] git-name-rev: allow --name-only in combination with --stdin Junio C Hamano
@ 2008-08-03 13:44   ` René Scharfe
  2008-08-03 20:44     ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: René Scharfe @ 2008-08-03 13:44 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Pieter de Bie, Git Mailinglist, Johannes Schindelin

printf() without an explicit format string is not a good coding practise,
unless the printed string is guaranteed to not contain percent signs.  While
fixing this, we might as well combine the calls to fwrite() and printf().

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
---
 builtin-name-rev.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/builtin-name-rev.c b/builtin-name-rev.c
index 7055ac3..08c8aab 100644
--- a/builtin-name-rev.c
+++ b/builtin-name-rev.c
@@ -189,6 +189,7 @@ static void name_rev_line(char *p, struct name_ref_data *data)
 			unsigned char sha1[40];
 			const char *name = NULL;
 			char c = *(p+1);
+			int p_len = p - p_start + 1;
 
 			forty = 0;
 
@@ -204,13 +205,10 @@ static void name_rev_line(char *p, struct name_ref_data *data)
 			if (!name)
 				continue;
 
-			if (data->name_only) {
-				fwrite(p_start, p - p_start + 1 - 40, 1, stdout);
-				printf(name);
-			} else {
-				fwrite(p_start, p - p_start + 1, 1, stdout);
-				printf(" (%s)", name);
-			}
+			if (data->name_only)
+				printf("%.*s%s", p_len - 40, p_start, name);
+			else
+				printf("%.*s (%s)", p_len, p_start, name);
 			p_start = p + 1;
 		}
 	}

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] git-name-rev: don't use printf without format
  2008-08-03 13:44   ` [PATCH] git-name-rev: don't use printf without format René Scharfe
@ 2008-08-03 20:44     ` Junio C Hamano
  0 siblings, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2008-08-03 20:44 UTC (permalink / raw)
  To: René Scharfe; +Cc: Pieter de Bie, Git Mailinglist, Johannes Schindelin

René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:

> printf() without an explicit format string is not a good coding practise,
> unless the printed string is guaranteed to not contain percent signs.  While
> fixing this, we might as well combine the calls to fwrite() and printf().

Good catch; I should have caught it when I applied the "split overlong
function" patch, but I apparently was blind.

Thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-08-03 20:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-31 13:20 [PATCH] git-name-rev: allow --name-only in combination with --stdin Pieter de Bie
2008-08-01  7:23 ` Junio C Hamano
2008-08-01 10:57   ` Johannes Schindelin
2008-08-01 11:16     ` [PATCH] builtin-name-rev: refactor stdin handling to its own function Pieter de Bie
2008-08-01 19:07       ` Junio C Hamano
2008-08-02 18:12 ` [PATCH] git-name-rev: allow --name-only in combination with --stdin Junio C Hamano
2008-08-03 13:44   ` [PATCH] git-name-rev: don't use printf without format René Scharfe
2008-08-03 20:44     ` Junio C Hamano

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