log: prepare log/log-tree to reuse the diffopt.close_file attribute
[gitweb.git] / builtin / log.c
index 099f4f7be92c6d4371dcc8cba1322351c6840439..27bc88d4a87a042331362d73b0a5d4b2a51d1b5f 100644 (file)
@@ -243,9 +243,10 @@ static struct itimerval early_output_timer;
 
 static void log_show_early(struct rev_info *revs, struct commit_list *list)
 {
-       int i = revs->early_output;
+       int i = revs->early_output, close_file = revs->diffopt.close_file;
        int show_header = 1;
 
+       revs->diffopt.close_file = 0;
        sort_in_topological_order(&list, revs->sort_order);
        while (list && i) {
                struct commit *commit = list->item;
@@ -262,14 +263,19 @@ 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);
                        return;
                }
                list = list->next;
        }
 
        /* Did we already get enough commits for the early output? */
-       if (!i)
+       if (!i) {
+               if (close_file)
+                       fclose(revs->diffopt.file);
                return;
+       }
 
        /*
         * ..if no, then repeat it twice a second until we
@@ -331,7 +337,7 @@ static int cmd_log_walk(struct rev_info *rev)
 {
        struct commit *commit;
        int saved_nrl = 0;
-       int saved_dcctc = 0;
+       int saved_dcctc = 0, close_file = rev->diffopt.close_file;
 
        if (rev->early_output)
                setup_early_output(rev);
@@ -347,6 +353,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;
        while ((commit = get_revision(rev)) != NULL) {
                if (!log_tree_commit(rev, commit) && rev->max_count >= 0)
                        /*
@@ -367,6 +374,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);
 
        if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
            DIFF_OPT_TST(&rev->diffopt, CHECK_FAILED)) {