X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/9a99c4c6e2228954b27e1e93e2b66c12a74850ac..3fe434189b99daf3d8cc075186c4ed4ebdd43b8f:/IkiWiki/Plugin/git.pm diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 77c0678bc..4d48388a0 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -467,6 +467,11 @@ sub git_commit_info ($;$) { sub rcs_find_changes ($) { my $oldrev=shift; + # Note that git log will sometimes show files being added that + # don't exist. Particularly, git merge -s ours can result in a + # merge commit where some files were not really added. + # This is why the code below verifies that the files really + # exist. my @raw_lines = run_or_die('git', 'log', '--pretty=raw', '--raw', '--abbrev=40', '--always', '-c', '--no-renames', , '--reverse', @@ -482,12 +487,16 @@ sub rcs_find_changes ($) { foreach my $i (@{$ci->{details}}) { my $file=$i->{file}; if ($i->{sha1_to} eq $nullsha) { - delete $changed{$file}; - $deleted{$file}=1; + if (! -e "$config{srcdir}/$file") { + delete $changed{$file}; + $deleted{$file}=1; + } } else { - delete $deleted{$file}; - $changed{$file}=1; + if (-e "$config{srcdir}/$file") { + delete $deleted{$file}; + $changed{$file}=1; + } } } } @@ -570,7 +579,7 @@ sub rcs_commit_helper (@) { $u=$params{session}->remote_addr(); } if (defined $u) { - $u=encode_utf8($u); + $u=encode_utf8(IkiWiki::cloak($u)); $ENV{GIT_AUTHOR_NAME}=$u; } if (defined $params{session}->param("nickname")) { @@ -609,7 +618,7 @@ sub rcs_commit_helper (@) { # So we should ignore its exit status (hence run_or_non). if (run_or_non('git', 'commit', '-m', $params{message}, '-q', @opts)) { if (length $config{gitorigin_branch}) { - run_or_cry('git', 'push', $config{gitorigin_branch}); + run_or_cry('git', 'push', $config{gitorigin_branch}, $config{gitmaster_branch}); } } @@ -660,7 +669,9 @@ sub rcs_recentchanges ($) { my @pages; foreach my $detail (@{ $ci->{'details'} }) { my $file = $detail->{'file'}; - my $efile = uri_escape_utf8($file); + my $efile = join('/', + map { uri_escape_utf8($_) } split('/', $file) + ); my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : ""; $diffurl =~ s/\[\[file\]\]/$efile/go;