git-blame: Use the same tests for git-blame as for git-annotate
[git.git] / git-annotate.perl
index d6028c9..b113def 100755 (executable)
@@ -15,6 +15,8 @@ sub usage() {
        print STDERR 'Usage: ${\basename $0} [-s] [-S revs-file] file [ revision ]
        -l, --long
                        Show long rev (Defaults off)
+       -t, --time
+                       Show raw timestamp (Defaults off)
        -r, --rename
                        Follow renames (Defaults on).
        -S, --rev-file revs-file
@@ -26,12 +28,13 @@ sub usage() {
        exit(1);
 }
 
-our ($help, $longrev, $rename, $starting_rev, $rev_file) = (0, 0, 1);
+our ($help, $longrev, $rename, $rawtime, $starting_rev, $rev_file) = (0, 0, 1);
 
 my $rc = GetOptions(   "long|l" => \$longrev,
+                       "time|t" => \$rawtime,
                        "help|h" => \$help,
                        "rename|r" => \$rename,
-                       "rev-file|S" => \$rev_file);
+                       "rev-file|S=s" => \$rev_file);
 if (!$rc or $help) {
        usage();
 }
@@ -125,7 +128,7 @@ foreach my $l (@filelines) {
        }
 
        printf("%s\t(%10s\t%10s\t%d)%s\n", $rev, $committer,
-               format_date($date), $i++, $output);
+               format_date($date), ++$i, $output);
 }
 
 sub init_claim {
@@ -174,7 +177,8 @@ sub git_rev_list {
 
        my $revlist;
        if ($rev_file) {
-               open($revlist, '<' . $rev_file);
+               open($revlist, '<' . $rev_file)
+                   or die "Failed to open $rev_file : $!";
        } else {
                $revlist = open_pipe("git-rev-list","--parents","--remove-empty",$rev,"--",$file)
                        or die "Failed to exec git-rev-list: $!";
@@ -410,9 +414,17 @@ sub git_commit_info {
 }
 
 sub format_date {
+       if ($rawtime) {
+               return $_[0];
+       }
        my ($timestamp, $timezone) = split(' ', $_[0]);
-
-       return strftime("%Y-%m-%d %H:%M:%S " . $timezone, gmtime($timestamp));
+       my $minutes = abs($timezone);
+       $minutes = int($minutes / 100) * 60 + ($minutes % 100);
+       if ($timezone < 0) {
+           $minutes = -$minutes;
+       }
+       my $t = $timestamp + $minutes * 60;
+       return strftime("%Y-%m-%d %H:%M:%S " . $timezone, gmtime($t));
 }
 
 # Copied from git-send-email.perl - We need a Git.pm module..