@matheusbsbs / matheus-bagliano / commits / ae03ee644e
Fork 0

show: add space between multiple items

When showing an annotated tag, "git show" will always display the pointed-to object. However, it didn't separate the two with whitespace, making it more difficult to notice where the new object started. For example: $ git tag -m 'my message' foo $ git show foo tag foo Tagger: Jeff King <peff@peff.net> Date: Fri Jul 17 18:46:25 2009 -0400 my message commit 41cabf8fed2694ba33e01d64f9094f2fc5e5805a Author: Jeff King <peff@peff.net> Date: Thu Jul 16 17:31:34 2009 -0400 ... This patch respects and sets the rev.shown_one member to prepend a blank line before showing a second item. We use this member of rev_info instead of a local flag, because the log_tree_commit we call into for showing commits already respects and sets that flag. Meaning that everything will be spaced properly if you intermix commits and tags, like: $ git show v1.6.3 v1.6.2 HEAD In that case, a single blank line will separate the first tag, the commit it points to, the second tag, the commit that one points to, and the final commit. While we're at it, let's also support trees, so that even something as crazy as $ git show HEAD^{tree} HEAD~1^{tree} HEAD will also be spaced in an easy-to-read way. However, we intentionally do _not_ insert blank lines for blobs, so that specifying multiple blobs gives a strict concatenation. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Jul 18, 2009 at 06:14 UTC ae03ee644ec52f2aa2769dfd4929c5ff85c2a899
1 file changed +6
builtin-log.c
+6
@@ -329,11 +329,14 @@ int cmd_show(int argc, const char **argv, const char *prefix)
329 case OBJ_TAG: {
330 struct tag *t = (struct tag *)o;
331
332 + if (rev.shown_one)
333 + putchar('\n');
334 printf("%stag %s%s\n",
335 diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
336 t->tag,
337 diff_get_color_opt(&rev.diffopt, DIFF_RESET));
338 ret = show_object(o->sha1, 1, &rev);
339 + rev.shown_one = 1;
340 if (ret)
341 break;
342 o = parse_object(t->tagged->sha1);
@@ -345,12 +348,15 @@ int cmd_show(int argc, const char **argv, const char *prefix)
348 break;
349 }
350 case OBJ_TREE:
351 + if (rev.shown_one)
352 + putchar('\n');
353 printf("%stree %s%s\n\n",
354 diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
355 name,
356 diff_get_color_opt(&rev.diffopt, DIFF_RESET));
357 read_tree_recursive((struct tree *)o, "", 0, 0, NULL,
358 show_tree_object, NULL);
359 + rev.shown_one = 1;
360 break;
361 case OBJ_COMMIT:
362 rev.pending.nr = rev.pending.alloc = 0;