From 59cfb9b6d0f5f60516d17c79365318711a92fb04 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 5 Apr 2014 19:09:05 -0400 Subject: [PATCH 1/1] only_committed_changes could fail in a git repository merged with git merge -s ours. --- IkiWiki/Plugin/git.pm | 17 +++++++++++++---- debian/changelog | 7 +++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 4b0e5a86d..75b89e476 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; + } } } } diff --git a/debian/changelog b/debian/changelog index d91342595..0c36baf60 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +ikiwiki (3.20140228) UNRELEASED; urgency=medium + + * only_committed_changes could fail in a git repository merged + with git merge -s ours. + + -- Joey Hess Sat, 05 Apr 2014 19:08:22 -0400 + ikiwiki (3.20140227) unstable; urgency=medium * Added useragent config setting. Closes: #737121 -- 2.45.0