]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/git.pm
Comments (maybe not so helpful - sorry)
[git.ikiwiki.info.git] / IkiWiki / Plugin / git.pm
index b386ab71bfa6b0d0feffcb53fb167f17c1ac016d..ad58231e0bbd897e0f65dec50cc1be451fa3c92a 100644 (file)
@@ -14,6 +14,7 @@ my $no_chdir=0;
 sub import {
        hook(type => "checkconfig", id => "git", call => \&checkconfig);
        hook(type => "getsetup", id => "git", call => \&getsetup);
 sub import {
        hook(type => "checkconfig", id => "git", call => \&checkconfig);
        hook(type => "getsetup", id => "git", call => \&getsetup);
+       hook(type => "genwrapper", id => "git", call => \&genwrapper);
        hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
        hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
        hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
        hook(type => "rcs", id => "rcs_update", call => \&rcs_update);
        hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit);
        hook(type => "rcs", id => "rcs_commit", call => \&rcs_commit);
@@ -41,6 +42,7 @@ sub checkconfig () {
                        wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
                };
        }
                        wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
                };
        }
+
        if (defined $config{git_test_receive_wrapper} &&
            length $config{git_test_receive_wrapper}) {
                push @{$config{wrappers}}, {
        if (defined $config{git_test_receive_wrapper} &&
            length $config{git_test_receive_wrapper}) {
                push @{$config{wrappers}}, {
@@ -49,6 +51,13 @@ sub checkconfig () {
                        wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
                };
        }
                        wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
                };
        }
+       
+       # Run receive test only if being called by the wrapper, and not
+       # when generating same.
+       if ($config{test_receive} && ! exists $config{wrapper}) {
+               require IkiWiki::Receive;
+               IkiWiki::Receive::test();
+       }
 }
 
 sub getsetup () {
 }
 
 sub getsetup () {
@@ -115,6 +124,16 @@ sub getsetup () {
                },
 }
 
                },
 }
 
+sub genwrapper {
+       if ($config{test_receive}) {
+               require IkiWiki::Receive;
+               return IkiWiki::Receive::genwrapper();
+       }
+       else {
+               return "";
+       }
+}
+
 sub safe_git (&@) {
        # Start a child process safely without resorting /bin/sh.
        # Return command output or success state (in scalar context).
 sub safe_git (&@) {
        # Start a child process safely without resorting /bin/sh.
        # Return command output or success state (in scalar context).
@@ -594,8 +613,8 @@ sub rcs_getctime ($) {
        # Remove srcdir prefix
        $file =~ s/^\Q$config{srcdir}\E\/?//;
 
        # Remove srcdir prefix
        $file =~ s/^\Q$config{srcdir}\E\/?//;
 
-       my $sha1  = git_sha1($file);
-       my $ci    = git_commit_info($sha1, 1);
+       my @sha1s = run_or_non('git', 'rev-list', 'HEAD', '--', $file);
+       my $ci    = git_commit_info($sha1s[$#sha1s], 1);
        my $ctime = $ci->{'author_epoch'};
        debug("ctime for '$file': ". localtime($ctime));
 
        my $ctime = $ci->{'author_epoch'};
        debug("ctime for '$file': ". localtime($ctime));