|
3 | 3 | use Gtk2 -init; |
4 | 4 | use Gtk2::SimpleList; |
5 | 5 |
|
6 | | -my $fn = shift or die "require filename to blame"; |
| 6 | +my $hash; |
| 7 | +my $fn; |
| 8 | +if ( @ARGV == 1 ) { |
| 9 | + $hash = "HEAD"; |
| 10 | + $fn = shift; |
| 11 | +} elsif ( @ARGV == 2 ) { |
| 12 | + $hash = shift; |
| 13 | + $fn = shift; |
| 14 | +} else { |
| 15 | + die "Usage blameview [<rev>] <filename>"; |
| 16 | +} |
7 | 17 |
|
8 | 18 | Gtk2::Rc->parse_string(<<'EOS'); |
9 | 19 | style "treeview_style" |
|
27 | 37 | $fileview->get_column(0)->set_spacing(0); |
28 | 38 | $fileview->set_size_request(1024, 768); |
29 | 39 | $fileview->set_rules_hint(1); |
| 40 | +$fileview->signal_connect (row_activated => sub { |
| 41 | + my ($sl, $path, $column) = @_; |
| 42 | + my $row_ref = $sl->get_row_data_from_path ($path); |
| 43 | + system("blameview @$row_ref[0] $fn"); |
| 44 | + # $row_ref is now an array ref to the double-clicked row's data. |
| 45 | + }); |
30 | 46 |
|
31 | 47 | my $fh; |
32 | | -open($fh, '-|', "git cat-file blob HEAD:$fn") |
| 48 | +open($fh, '-|', "git cat-file blob $hash:$fn") |
33 | 49 | or die "unable to open $fn: $!"; |
| 50 | + |
34 | 51 | while(<$fh>) { |
35 | 52 | chomp; |
36 | 53 | $fileview->{data}->[$.] = ['HEAD', '?', "$fn:$.", $_]; |
37 | 54 | } |
38 | 55 |
|
39 | 56 | my $blame; |
40 | | -open($blame, '-|', qw(git blame --incremental --), $fn) |
| 57 | +open($blame, '-|', qw(git blame --incremental --), $fn, $hash) |
41 | 58 | or die "cannot start git-blame $fn"; |
42 | 59 |
|
43 | 60 | Glib::IO->add_watch(fileno($blame), 'in', \&read_blame_line); |
|
0 commit comments