X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/654530fa8bb0937123ed526e3093170ef23f5295..3fe434189b99daf3d8cc075186c4ed4ebdd43b8f:/IkiWiki/Plugin/git.pm diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 1dbf00d55..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', @@ -476,18 +481,22 @@ sub rcs_find_changes ($) { my %changed; my %deleted; my $nullsha = 0 x 40; - my $newrev; + my $newrev=$oldrev; while (my $ci = parse_diff_tree(\@raw_lines)) { $newrev=$ci->{sha1}; foreach my $i (@{$ci->{details}}) { my $file=$i->{file}; - if ($i->{sha1_to} == $nullsha) { - delete $changed{$file}; - $deleted{$file}=1; + if ($i->{sha1_to} eq $nullsha) { + 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;