git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: git@vger.kernel.org
Subject: Re: More precise tag following
Date: Sat, 27 Jan 2007 15:16:41 -0500	[thread overview]
Message-ID: <20070127201640.GA25637@coredump.intra.peff.net> (raw)
In-Reply-To: <Pine.LNX.4.64.0701270837170.25027@woody.linux-foundation.org>

On Sat, Jan 27, 2007 at 09:22:50AM -0800, Linus Torvalds wrote:

> Here's a patch. Use "git blame --incremental filename" to get the blame 
> output in a nicely parseable format that you can now write a simple 
> graphical viewer for. 

And here's a (very hackish) incremental viewer using perl/gtk (you will
need the Gtk2 perl module installed). It doesn't take any options, and it
just shows the blame output (no lookup of committer/date).

It needs much work (and cleanup) to be useful, but I think it proves
your point: in the time it takes me to actually start looking through
the output, the blame has finished without me noticing!

-Peff

-- >8 --
#!/usr/bin/perl

use Gtk2 -init;
use Gtk2::SimpleList;

my $fn = shift or die "require filename to blame";

my $window = Gtk2::Window->new('toplevel');
$window->signal_connect(destroy => sub { Gtk2->main_quit });
my $scrolled_window = Gtk2::ScrolledWindow->new;
$window->add($scrolled_window);
my $fileview = Gtk2::SimpleList->new(
    'Commit' => 'text',
    'FileLine' => 'text',
    'Data' => 'text'
);
$scrolled_window->add($fileview);
$fileview->get_column(0)->set_spacing(0);
$fileview->set_size_request(1024, 768);

open(my $fh, '<', $fn)
  or die "unable to open $fn: $!";
while(<$fh>) {
  chomp;
  $fileview->{data}->[$.] = ['HEAD', "$fn:$.", $_];
}

open(my $blame, '-|', qw(git blame --incremental), $fn)
  or die "unable to open git blame: $!";
Glib::IO->add_watch(fileno($blame), 'in', \&read_blame_line);

$window->show_all;
Gtk2->main;
exit 0;

my $buf;
sub read_blame_line {
  my $r = sysread($blame, $buf, 1024, length($buf));
  return 0 unless $r;
  while($buf =~ s/([^\n]*)\n//) {
    my $line = $1;
    $line =~ /^(\d+) (\d+) ([0-9a-f]+):(.*):(\d+)$/
      or die "bad blame output: $line";
    for(my $i = 0; $i < $2; $i++) {
      @{$fileview->{data}->[$1+$i]}[0,1] =
        (substr($3, 0, 8), $4 . ':' . ($5+$i+1));
    }
  }
  return 1;
}

  parent reply	other threads:[~2007-01-27 20:16 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-26 11:07 More precise tag following Junio C Hamano
2007-01-26 11:53 ` Junio C Hamano
2007-01-27  8:01 ` Shawn O. Pearce
2007-01-27  8:41   ` Junio C Hamano
2007-01-27 13:33     ` Jeff King
2007-01-27 17:47     ` Nicolas Pitre
2007-01-27  9:04   ` Simon 'corecode' Schubert
2007-01-27 12:58   ` Johannes Schindelin
2007-01-27 13:50     ` Simon 'corecode' Schubert
2007-01-27 16:30       ` Jakub Narebski
2007-01-27 17:36         ` Linus Torvalds
2007-01-27 16:46       ` Johannes Schindelin
2007-01-27 17:12         ` Simon 'corecode' Schubert
2007-01-27 19:13           ` Johannes Schindelin
2007-01-27 19:55             ` Simon 'corecode' Schubert
2007-01-27 19:41           ` Nicolas Pitre
2007-01-27 17:22   ` Linus Torvalds
2007-01-27 17:56     ` Linus Torvalds
2007-01-27 22:00       ` Junio C Hamano
2007-01-27 22:54         ` Linus Torvalds
2007-01-28  9:27           ` Junio C Hamano
2007-01-28  9:44             ` [PATCH] git-blame --porcelain: quote filename in c-style when needed Junio C Hamano
2007-01-28 14:25             ` [PATCH] git-blame --incremental: don't use pager René Scharfe
2007-01-28 19:09               ` Junio C Hamano
2007-01-28 19:14                 ` Junio C Hamano
2007-01-29  0:32                   ` René Scharfe
2007-01-29  2:35                     ` [PATCH] git blame --progress Junio C Hamano
2007-01-29  7:00                       ` Simon 'corecode' Schubert
2007-01-29 16:54                       ` Alex Riesen
2007-01-29 18:12                       ` Matthias Lederhofer
2007-01-29 19:06                         ` Junio C Hamano
2007-01-29 19:59                       ` René Scharfe
2007-01-29 20:24                         ` Linus Torvalds
2007-01-30  1:53                         ` Junio C Hamano
2007-01-28 19:08             ` More precise tag following Linus Torvalds
2007-01-28 19:18               ` Junio C Hamano
2007-01-28 19:57                 ` Linus Torvalds
2007-01-28 20:01                   ` Junio C Hamano
2007-01-28 20:20                   ` [PATCH] document 'blame --incremental' Junio C Hamano
2007-01-28 21:06                   ` More precise tag following Junio C Hamano
2007-01-28 23:01                     ` Jeff King
2007-01-30  9:22                   ` Junio C Hamano
2007-01-30 15:31                     ` Shawn O. Pearce
2007-01-30 17:02                     ` Linus Torvalds
2007-01-28 19:58                 ` Junio C Hamano
2007-01-29  6:18             ` Shawn O. Pearce
2007-01-29 10:17               ` Junio C Hamano
2007-01-29 10:31                 ` Shawn O. Pearce
2007-01-29 16:24               ` Linus Torvalds
2007-01-29 18:07                 ` Simon 'corecode' Schubert
2007-01-29 19:29                 ` Theodore Tso
2007-01-29 19:45                   ` Linus Torvalds
2007-01-29 20:25                   ` Jakub Narebski
2007-01-29 20:47                     ` Shawn O. Pearce
2007-01-29 21:02                       ` Jakub Narebski
2007-02-09  7:41                   ` Shawn O. Pearce
2007-01-31  8:39                 ` David Kågedal
2007-01-31 10:59                   ` David Kågedal
2007-01-31 16:12                   ` Peter Eriksen
2007-01-31 17:04                     ` David Kågedal
2007-01-31 17:12                       ` Peter Eriksen
2007-01-31 17:35                         ` Jakub Narebski
2007-01-31 20:59                         ` David Kågedal
2007-01-27 18:40     ` Simon 'corecode' Schubert
2007-01-27 19:02       ` Johannes Schindelin
2007-01-27 19:12         ` Simon 'corecode' Schubert
2007-01-27 19:19           ` Johannes Schindelin
2007-01-27 19:59           ` Jakub Narebski
2007-01-27 19:15       ` Linus Torvalds
2007-01-27 19:25         ` Linus Torvalds
2007-01-27 19:54           ` Jakub Narebski
2007-01-27 20:13             ` Linus Torvalds
2007-01-27 19:36         ` Chris Lee
2007-01-28 18:10           ` Theodore Tso
2007-01-28 18:27             ` Linus Torvalds
2007-01-28 22:26           ` David Lang
2007-01-29 17:34             ` Nicolas Pitre
2007-01-29 17:42               ` Linus Torvalds
2007-01-29 17:58                 ` Nicolas Pitre
2007-01-29 19:16                   ` Chris Lee
2007-01-29 23:00           ` Eric Wong
2007-01-30  0:42             ` Eric Wong
2007-01-30  0:48               ` Eric Wong
2007-01-30  8:51               ` Eric Wong
2007-01-27 18:52     ` Jakub Narebski
2007-01-27 20:16     ` Jeff King [this message]
2007-01-27 22:39       ` Linus Torvalds
2007-01-27 23:52         ` Jeff King
2007-01-28  2:39           ` Theodore Tso
2007-01-28  3:17             ` Randal L. Schwartz
2007-01-28 13:15             ` Jeff King
2007-01-28  7:40     ` Shawn O. Pearce

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=20070127201640.GA25637@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=torvalds@linux-foundation.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).