]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/git.pm
git: don't issue a warning if rcsinfo is undefined
[git.ikiwiki.info.git] / IkiWiki / Plugin / git.pm
index 12e79f3dda34454dd291e139b3b4550736eb9bfa..331b48fda4e5b9f61b44452eabb91818aed9817e 100644 (file)
@@ -221,15 +221,18 @@ sub run_or_cry ($@) { safe_git(sub { warn @_ }, undef, @_) }
 sub run_or_non ($@) { safe_git(undef, undef, @_) }
 
 sub ensure_committer {
-       my $name = join('', run_or_non("git", "config", "user.name"));
-       my $email = join('', run_or_non("git", "config", "user.email"));
-
-       if (! length $name) {
-               run_or_die("git", "config", "user.name", "IkiWiki");
+       if (! length $ENV{GIT_AUTHOR_NAME} || ! length $ENV{GIT_COMMITTER_NAME}) {
+               my $name = join('', run_or_non("git", "config", "user.name"));
+               if (! length $name) {
+                       run_or_die("git", "config", "user.name", "IkiWiki");
+               }
        }
 
-       if (! length $email) {
-               run_or_die("git", "config", "user.email", "ikiwiki.info");
+       if (! length $ENV{GIT_AUTHOR_EMAIL} || ! length $ENV{GIT_COMMITTER_EMAIL}) {
+               my $email = join('', run_or_non("git", "config", "user.email"));
+               if (! length $email) {
+                       run_or_die("git", "config", "user.email", "ikiwiki.info");
+               }
        }
 }
 
@@ -466,7 +469,7 @@ sub git_commit_info ($;$) {
 
        my @raw_lines = run_or_die('git', 'log', @opts,
                '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
-               '-r', $sha1, '--', '.');
+               '-r', $sha1, '--no-renames', '--', '.');
 
        my @ci;
        while (my $parsed = parse_diff_tree(\@raw_lines)) {
@@ -564,7 +567,10 @@ sub rcs_commit (@) {
        # Check to see if the page has been changed by someone else since
        # rcs_prepedit was called.
        my $cur    = git_sha1_file($params{file});
-       my ($prev) = $params{token} =~ /^($sha1_pattern)$/; # untaint
+       my $prev;
+       if (defined $params{token}) {
+               ($prev) = $params{token} =~ /^($sha1_pattern)$/; # untaint
+       }
 
        if (defined $cur && defined $prev && $cur ne $prev) {
                my $conflict = merge_past($prev, $params{file}, $dummy_commit_msg);
@@ -585,8 +591,6 @@ sub rcs_commit_helper (@) {
        
        my %env=%ENV;
 
-       ensure_committer();
-
        if (defined $params{session}) {
                # Set the commit author and email based on web session info.
                my $u;
@@ -610,6 +614,8 @@ sub rcs_commit_helper (@) {
                }
        }
 
+       ensure_committer();
+
        $params{message} = IkiWiki::possibly_foolish_untaint($params{message});
        my @opts;
        if ($params{message} !~ /\S/) {
@@ -651,7 +657,7 @@ sub rcs_add ($) {
 
        ensure_committer();
 
-       run_or_cry('git', 'add', $file);
+       run_or_cry('git', 'add', '--', $file);
 }
 
 sub rcs_remove ($) {
@@ -661,7 +667,7 @@ sub rcs_remove ($) {
 
        ensure_committer();
 
-       run_or_cry('git', 'rm', '-f', $file);
+       run_or_cry('git', 'rm', '-f', '--', $file);
 }
 
 sub rcs_rename ($$) {
@@ -669,7 +675,7 @@ sub rcs_rename ($$) {
 
        ensure_committer();
 
-       run_or_cry('git', 'mv', '-f', $src, $dest);
+       run_or_cry('git', 'mv', '-f', '--', $src, $dest);
 }
 
 sub rcs_recentchanges ($) {
@@ -970,7 +976,9 @@ sub rcs_revert ($) {
 
        ensure_committer();
 
-       if (run_or_non('git', 'revert', '--no-commit', $sha1)) {
+       if (run_or_non('git', 'revert', '--strategy=recursive',
+                       '--strategy-option=no-renames',
+                       '--no-commit', $sha1)) {
                return undef;
        }
        else {