Merge branch 'cb/log-follow-with-combined' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 3 Jul 2013 22:30:59 +0000 (15:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Jul 2013 22:30:59 +0000 (15:30 -0700)
"git log -c --follow $path" segfaulted upon hitting the commit that
renamed the $path being followed.

* cb/log-follow-with-combined:
fix segfault with git log -c --follow

combine-diff.c
t/t4202-log.sh
index 3e8bb17831aa5f2f39ee3a07eeebdda90ae39556..6dc06093d3c1eb6f3ab7a9cc79f0f192e16dc617 100644 (file)
@@ -1305,6 +1305,7 @@ void diff_tree_combined(const unsigned char *sha1,
        int i, num_paths, needsep, show_log_first, num_parent = parents->nr;
 
        diffopts = *opt;
+       diff_tree_setup_paths(diffopts.pathspec.raw, &diffopts);
        diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
        DIFF_OPT_SET(&diffopts, RECURSIVE);
        DIFF_OPT_CLR(&diffopts, ALLOW_EXTERNAL);
@@ -1375,6 +1376,8 @@ void diff_tree_combined(const unsigned char *sha1,
                paths = paths->next;
                free(tmp);
        }
+
+       diff_tree_release_paths(&diffopts);
 }
 
 void diff_tree_combined_merge(const struct commit *commit, int dense,
index 9243a979933997286bb6004bd7b224bad1bbc5cc..cb03d287698f110b66e69636348caccdbe6a94f8 100755 (executable)
@@ -530,6 +530,20 @@ test_expect_success 'show added path under "--follow -M"' '
        )
 '
 
+test_expect_success 'git log -c --follow' '
+       test_create_repo follow-c &&
+       (
+               cd follow-c &&
+               test_commit initial file original &&
+               git rm file &&
+               test_commit rename file2 original &&
+               git reset --hard initial &&
+               test_commit modify file foo &&
+               git merge -m merge rename &&
+               git log -c --follow file2
+       )
+'
+
 cat >expect <<\EOF
 *   commit COMMIT_OBJECT_NAME
 |\  Merge: MERGE_PARENTS