All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali@linux-fr.org>
To: Johan Herland <johan@herland.net>
Cc: git@vger.kernel.org
Subject: Re: [feature request] git: tags instead of commit IDs in blame output
Date: Tue, 24 Aug 2010 14:54:26 +0200	[thread overview]
Message-ID: <20100824145426.38b1fb15@hyperion.delvare> (raw)
In-Reply-To: <201008211210.23280.johan@herland.net>

Hi Johan,

On Sat, 21 Aug 2010 12:10:22 +0200, Johan Herland wrote:
> On Saturday 21 August 2010, Jean Delvare wrote:
> > Hi there,
> > 
> > I have a feature request for git. In the output of "git blame", I would
> > like to be able to see tags instead of commit IDs in front of each
> > line. Basically, I would like to know the first tag which was added
> > after the last change of every line. Icing on the cake would be the
> > possibility to filter out some tags (for example to ignore release
> > candidate tags) but I could easily live without that.
> > 
> > Does it make sense?
> > Would it be difficult to implement?
> 
> To me, it seems what you want to do is convert the commit ID in front of 
> every blame-line into the result of running 'git name-rev' (or 'git 
> describe') on that line.
> 
> To that effect something like this should work:
> 
>   git blame <file> |
>   while read sha1 rest
>   do
>       tag=$(git name-rev --tags --name-only $sha1) &&
>       echo "$tag $rest"
>   done
> 
> Of course, if you're doing this at a bigger scale, you want to wrap this in 
> a script that (1) caches commitID -> tag mappings, and that (2) runs 'git 
> name-rev in its --stdin mode'.

Thanks for the very valuable suggestion. Obviously, the fact that the
above command took over an hour to complete on a 1000-line file as kind
of an issue ;) I did suspect this performance issue originally, which is
why I thought it would be better if git itself would implement the
feature. That being said... git name-rev's --stdin option seems to be
doing all the hard caching work already:

git blame -l <file> | git name-rev --tags --name-only --stdin

does almost what I want, and is reasonably fast (13 seconds for the
same file.) I'll need to do some reformatting work to extract the tag
from the symbolic names (which in turn should almost fix the
alignment), but this is nothing a few lines of shell scripting can't do.

So, thanks a lot again!

-- 
Jean Delvare

  reply	other threads:[~2010-08-24 12:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-21  7:53 [feature request] git: tags instead of commit IDs in blame output Jean Delvare
2010-08-21 10:10 ` Johan Herland
2010-08-24 12:54   ` Jean Delvare [this message]
2010-08-24 14:53     ` Johan Herland
2010-08-25  7:32       ` Jean Delvare

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=20100824145426.38b1fb15@hyperion.delvare \
    --to=khali@linux-fr.org \
    --cc=git@vger.kernel.org \
    --cc=johan@herland.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.