git: --getctime will now follow renames back to the original creation of a file.
authorJoey Hess <joey@gnu.kitenet.net>
Mon, 12 Oct 2009 02:38:42 +0000 (22:38 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Mon, 12 Oct 2009 02:38:42 +0000 (22:38 -0400)
This will be a bit more expensive, but --getctime does not need to be fast.
And getting the real creation time a very useful when untangling blog
histories that involve renames.

IkiWiki/Plugin/git.pm
debian/changelog

index ad58231e0bbd897e0f65dec50cc1be451fa3c92a..e10283f59a5889802d218bf8d238301a20866562 100644 (file)
@@ -613,9 +613,11 @@ sub rcs_getctime ($) {
        # Remove srcdir prefix
        $file =~ s/^\Q$config{srcdir}\E\/?//;
 
-       my @sha1s = run_or_non('git', 'rev-list', 'HEAD', '--', $file);
-       my $ci    = git_commit_info($sha1s[$#sha1s], 1);
-       my $ctime = $ci->{'author_epoch'};
+       my @raw_lines = run_or_die('git', 'log', '--reverse', '--follow',
+               '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
+               '-r', '--', $file);
+       my $first = parse_diff_tree("", \@raw_lines);
+       my $ctime = $first->{'author_epoch'};
        debug("ctime for '$file': ". localtime($ctime));
 
        return $ctime;
index 22935955aaf7fe81049e73eb07b7115d6c0d1248..76094e7a65863fd793b630969fedbb9c681e4514 100644 (file)
@@ -2,6 +2,8 @@ ikiwiki (3.20091010) UNRELEASED; urgency=low
 
   * ikiwiki-calendar: New command automates creation of archive pages
     using the calendar plugin.
+  * git: --getctime will now follow renames back to the original creation
+    of a file.
 
  -- Joey Hess <joeyh@debian.org>  Sun, 11 Oct 2009 15:54:45 -0400