git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Nicolas Sebrecht <nicolas.s.dev@gmx.fr>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH 0/2] Re: cosmetic improvements for "git show tag"
Date: Sat, 18 Jul 2009 06:14:37 -0400	[thread overview]
Message-ID: <20090718101436.GA22535@coredump.intra.peff.net> (raw)
In-Reply-To: <20090718014743.GA16381@coredump.intra.peff.net>

On Fri, Jul 17, 2009 at 09:47:43PM -0400, Jeff King wrote:

> So when you show two tags you get:
> 
>   tag foo
> 
>   message
> 
>   commit foo^{}
> 
>   message
>   tag bar
> 
> 
>   commit bar^{}
> 
> That is, the newline is actually stuck in the wrong place. So we
> actually need to turn that newline off, which I'm not sure is possible.
> I'll look into it more.

The code calls into log_tree_commit, which uses the "shown_one" member
of rev_info to determine. So we should be able to just use that for our
tags, and everything will work fine.

I think we can replace 2/2 with the patch below, which also covers the
tree case neatly.

-- >8 --
Subject: [PATCH] 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>
---
 builtin-log.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/builtin-log.c b/builtin-log.c
index b05796d..3035816 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -329,11 +329,14 @@ int cmd_show(int argc, const char **argv, const char *prefix)
 		case OBJ_TAG: {
 			struct tag *t = (struct tag *)o;
 
+			if (rev.shown_one)
+				putchar('\n');
 			printf("%stag %s%s\n",
 					diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
 					t->tag,
 					diff_get_color_opt(&rev.diffopt, DIFF_RESET));
 			ret = show_object(o->sha1, 1, &rev);
+			rev.shown_one = 1;
 			if (ret)
 				break;
 			o = parse_object(t->tagged->sha1);
@@ -345,12 +348,15 @@ int cmd_show(int argc, const char **argv, const char *prefix)
 			break;
 		}
 		case OBJ_TREE:
+			if (rev.shown_one)
+				putchar('\n');
 			printf("%stree %s%s\n\n",
 					diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
 					name,
 					diff_get_color_opt(&rev.diffopt, DIFF_RESET));
 			read_tree_recursive((struct tree *)o, "", 0, 0, NULL,
 					show_tree_object, NULL);
+			rev.shown_one = 1;
 			break;
 		case OBJ_COMMIT:
 			rev.pending.nr = rev.pending.alloc = 0;
-- 
1.6.4.rc1.177.g80fb1.dirty

  reply	other threads:[~2009-07-18 10:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-17 23:16 [PATCH 0/2] cosmetic improvements for "git show tag" Jeff King
2009-07-17 23:18 ` [PATCH 1/2] show: suppress extra newline when showing annotated tag Jeff King
2009-07-18  3:25   ` [PATCH 1/2] " Nicolas Sebrecht
2009-07-18  3:47     ` Jeff King
2009-07-17 23:22 ` [PATCH 2/2] show: add space between tag body and tagged object Jeff King
2009-07-18  1:10 ` [PATCH 0/2] Re: cosmetic improvements for "git show tag" Nicolas Sebrecht
2009-07-18  1:47   ` Jeff King
2009-07-18 10:14     ` Jeff King [this message]
2009-07-19 18:05       ` Junio C Hamano

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=20090718101436.GA22535@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=nicolas.s.dev@gmx.fr \
    /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).