2011/01/20

gitool


#!/usr/bin/perl

use strict;
use warnings;

# retrieve modified files.

my @modified_files = ();

for (`git status --porcelain`) {
    chomp;
    next unless /^.M/o or /^M/o;
    s/^.{3}//o;
    push @modified_files, $_;
}

# list modified files with index.

if (@modified_files) {
    my $index = 1;
    map { print "$index $_\n"; $index++; } @modified_files;
    print ">> ";
} else {
    exit;
}

# user input.

my $selected = <STDIN>;
chomp $selected;
die "Invalid index $selected\n" unless (
    $selected =~ /^\d+$/o and
       0 < $selected and
       $selected <= @modified_files);
$selected--;

# execute git-diff

system("git diff '$modified_files[$selected]'");