Log ref changes made by git-merge and git-pull.
[gitweb.git] / builtin-log.c
index 4ee5891dfd63e24db811bbc5f32f87f0f6b233ad..7e5cab15c106f59417804a25d094c94e78d64063 100644 (file)
 /* this is in builtin-diff.c */
 void add_head(struct rev_info *revs);
 
-static int cmd_log_wc(int argc, const char **argv, char **envp,
+static void cmd_log_init(int argc, const char **argv, char **envp,
                      struct rev_info *rev)
 {
-       struct commit *commit;
-
        rev->abbrev = DEFAULT_ABBREV;
        rev->commit_format = CMIT_FMT_DEFAULT;
        rev->verbose_header = 1;
        argc = setup_revisions(argc, argv, rev, "HEAD");
-       if (rev->always_show_header) {
-               if (rev->diffopt.pickaxe || rev->diffopt.filter) {
-                       rev->always_show_header = 0;
-                       if (rev->diffopt.output_format == DIFF_FORMAT_RAW)
-                               rev->diffopt.output_format = DIFF_FORMAT_NO_OUTPUT;
-               }
-       }
-
+       if (rev->diffopt.pickaxe || rev->diffopt.filter)
+               rev->always_show_header = 0;
        if (argc > 1)
                die("unrecognized argument: %s", argv[1]);
+}
+
+static int cmd_log_walk(struct rev_info *rev)
+{
+       struct commit *commit;
 
        prepare_revision_walk(rev);
        setup_pager();
@@ -50,17 +47,22 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.diff = 1;
        rev.diffopt.recursive = 1;
        rev.simplify_history = 0;
-       return cmd_log_wc(argc, argv, envp, &rev);
+       cmd_log_init(argc, argv, envp, &rev);
+       if (!rev.diffopt.output_format)
+               rev.diffopt.output_format = DIFF_FORMAT_RAW;
+       return cmd_log_walk(&rev);
 }
 
 int cmd_show(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.diff = 1;
        rev.diffopt.recursive = 1;
@@ -69,17 +71,19 @@ int cmd_show(int argc, const char **argv, char **envp)
        rev.always_show_header = 1;
        rev.ignore_merges = 0;
        rev.no_walk = 1;
-       return cmd_log_wc(argc, argv, envp, &rev);
+       cmd_log_init(argc, argv, envp, &rev);
+       return cmd_log_walk(&rev);
 }
 
 int cmd_log(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.always_show_header = 1;
-       rev.diffopt.recursive = 1;
-       return cmd_log_wc(argc, argv, envp, &rev);
+       cmd_log_init(argc, argv, envp, &rev);
+       return cmd_log_walk(&rev);
 }
 
 static int istitlechar(char c)
@@ -101,7 +105,10 @@ static int git_format_config(const char *var, const char *value)
                strcat(extra_headers, value);
                return 0;
        }
-       return git_default_config(var, value);
+       if (!strcmp(var, "diff.color")) {
+               return 0;
+       }
+       return git_diff_ui_config(var, value);
 }
 
 
@@ -160,15 +167,6 @@ static void reopen_stdout(struct commit *commit, int nr, int keep_subject)
        freopen(filename, "w", stdout);
 }
 
-static void reset_all_objects_flags()
-{
-       int i;
-
-       for (i = 0; i < obj_allocs; i++)
-               if (objs[i])
-                       objs[i]->flags = 0;
-}
-
 static int get_patch_id(struct commit *commit, struct diff_options *options,
                unsigned char *sha1)
 {
@@ -220,7 +218,10 @@ static void get_patch_ids(struct rev_info *rev, struct diff_options *options)
        }
 
        /* reset for next revision walk */
-       reset_all_objects_flags();
+       clear_commit_marks((struct commit *)o1,
+                       SEEN | UNINTERESTING | SHOWN | ADDED);
+       clear_commit_marks((struct commit *)o2,
+                       SEEN | UNINTERESTING | SHOWN | ADDED);
        o1->flags = flags1;
        o2->flags = flags2;
 }
@@ -239,17 +240,16 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
        struct diff_options patch_id_opts;
        char *add_signoff = NULL;
 
+       git_config(git_format_config);
        init_revisions(&rev);
        rev.commit_format = CMIT_FMT_EMAIL;
        rev.verbose_header = 1;
        rev.diff = 1;
-       rev.diffopt.with_raw = 0;
-       rev.diffopt.with_stat = 1;
        rev.combine_merges = 0;
        rev.ignore_merges = 1;
-       rev.diffopt.output_format = DIFF_FORMAT_PATCH;
+       rev.diffopt.msg_sep = "";
+       rev.diffopt.recursive = 1;
 
-       git_config(git_format_config);
        rev.extra_headers = extra_headers;
 
        /*
@@ -318,6 +318,9 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
        if (argc > 1)
                die ("unrecognized argument: %s", argv[1]);
 
+       if (!rev.diffopt.output_format)
+               rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH;
+
        if (output_directory) {
                if (use_stdout)
                        die("standard output, or directory, which one?");