diff-files -c/--cc: combine only when both ours and theirs exist.
authorJunio C Hamano <junkio@cox.net>
Sat, 28 Jan 2006 10:09:08 +0000 (02:09 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 28 Jan 2006 10:26:18 +0000 (02:26 -0800)
The previous round forgot to make sure there actually are two
versions to compare against the working tree version. Otherwise
using -c/--cc would not make much sense.

Also plug a small memory leak.

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff-files.c
index 4a30c56f8471c4a816e989dfb63ea66db93c8b3f..4cafd3ea20080c408ffba1584202e8feb6d53764 100644 (file)
@@ -121,6 +121,7 @@ int main(int argc, const char **argv)
                                struct combine_diff_path p;
                                unsigned char fill[4][20];
                        } combine;
+                       int num_compare_stages = 0;
 
                        combine.p.next = NULL;
                        combine.p.len = ce_namelen(ce);
@@ -140,9 +141,11 @@ int main(int argc, const char **argv)
                                 * stage #3 (theirs) is the second.
                                 */
                                stage = ce_stage(nce);
-                               if (2 <= stage)
+                               if (2 <= stage) {
+                                       num_compare_stages++;
                                        memcpy(combine.p.parent_sha1[stage-2],
                                               nce->sha1, 20);
+                               }
 
                                /* diff against the proper unmerged stage */
                                if (stage == diff_unmerged_stage)
@@ -154,12 +157,14 @@ int main(int argc, const char **argv)
                         */
                        i--;
 
-                       if (combine_merges) {
+                       if (combine_merges && num_compare_stages == 2) {
                                show_combined_diff(&combine.p, 2,
                                                   dense_combined_merges,
                                                   NULL, 0);
+                               free(combine.p.path);
                                continue;
                        }
+                       free(combine.p.path);
 
                        /*
                         * Show the diff for the 'ce' if we found the one