]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/log.c
Merge branch 'ah/commit-graph-leakplug'
[thirdparty/git.git] / builtin / log.c
index d0cbaaf68a083f0cfa3294804f606b5cb6dff5c4..f67b67d80ed1e8d7cd95982a8da96b435b8a452b 100644 (file)
@@ -307,10 +307,11 @@ static struct itimerval early_output_timer;
 
 static void log_show_early(struct rev_info *revs, struct commit_list *list)
 {
-       int i = revs->early_output, close_file = revs->diffopt.close_file;
+       int i = revs->early_output;
        int show_header = 1;
+       int no_free = revs->diffopt.no_free;
 
-       revs->diffopt.close_file = 0;
+       revs->diffopt.no_free = 0;
        sort_in_topological_order(&list, revs->sort_order);
        while (list && i) {
                struct commit *commit = list->item;
@@ -327,8 +328,8 @@ static void log_show_early(struct rev_info *revs, struct commit_list *list)
                case commit_ignore:
                        break;
                case commit_error:
-                       if (close_file)
-                               fclose(revs->diffopt.file);
+                       revs->diffopt.no_free = no_free;
+                       diff_free(&revs->diffopt);
                        return;
                }
                list = list->next;
@@ -336,8 +337,8 @@ static void log_show_early(struct rev_info *revs, struct commit_list *list)
 
        /* Did we already get enough commits for the early output? */
        if (!i) {
-               if (close_file)
-                       fclose(revs->diffopt.file);
+               revs->diffopt.no_free = 0;
+               diff_free(&revs->diffopt);
                return;
        }
 
@@ -401,7 +402,7 @@ static int cmd_log_walk(struct rev_info *rev)
 {
        struct commit *commit;
        int saved_nrl = 0;
-       int saved_dcctc = 0, close_file = rev->diffopt.close_file;
+       int saved_dcctc = 0;
 
        if (rev->early_output)
                setup_early_output();
@@ -417,7 +418,7 @@ static int cmd_log_walk(struct rev_info *rev)
         * and HAS_CHANGES being accumulated in rev->diffopt, so be careful to
         * retain that state information if replacing rev->diffopt in this loop
         */
-       rev->diffopt.close_file = 0;
+       rev->diffopt.no_free = 1;
        while ((commit = get_revision(rev)) != NULL) {
                if (!log_tree_commit(rev, commit) && rev->max_count >= 0)
                        /*
@@ -442,8 +443,8 @@ static int cmd_log_walk(struct rev_info *rev)
        }
        rev->diffopt.degraded_cc_to_c = saved_dcctc;
        rev->diffopt.needed_rename_limit = saved_nrl;
-       if (close_file)
-               fclose(rev->diffopt.file);
+       rev->diffopt.no_free = 0;
+       diff_free(&rev->diffopt);
 
        if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
            rev->diffopt.flags.check_failed) {
@@ -1223,14 +1224,20 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
                 */
                struct diff_options opts;
                struct strvec other_arg = STRVEC_INIT;
+               struct range_diff_options range_diff_opts = {
+                       .creation_factor = rev->creation_factor,
+                       .dual_color = 1,
+                       .diffopt = &opts,
+                       .other_arg = &other_arg
+               };
+
                diff_setup(&opts);
                opts.file = rev->diffopt.file;
                opts.use_color = rev->diffopt.use_color;
                diff_setup_done(&opts);
                fprintf_ln(rev->diffopt.file, "%s", rev->rdiff_title);
                get_notes_args(&other_arg, rev);
-               show_range_diff(rev->rdiff1, rev->rdiff2,
-                               rev->creation_factor, 1, &opts, &other_arg);
+               show_range_diff(rev->rdiff1, rev->rdiff2, &range_diff_opts);
                strvec_clear(&other_arg);
        }
 }
@@ -1672,7 +1679,7 @@ static void infer_range_diff_ranges(struct strbuf *r1,
                                    struct commit *head)
 {
        const char *head_oid = oid_to_hex(&head->object.oid);
-       int prev_is_range = !!strstr(prev, "..");
+       int prev_is_range = is_range_diff_range(prev);
 
        if (prev_is_range)
                strbuf_addstr(r1, prev);
@@ -1955,7 +1962,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                 * file, but but we must instruct it not to close after each
                 * diff.
                 */
-               rev.diffopt.close_file = 0;
+               rev.diffopt.no_free = 1;
        } else {
                int saved;