]> git.ipfire.org Git - thirdparty/git.git/blobdiff - builtin/log.c
Merge branch 'jk/shortlog-group-by-trailer'
[thirdparty/git.git] / builtin / log.c
index ad0c5230cf70945486ecae14fb6f502617535d27..7f27e9eca1f74cfa4f3d5b8c3cb4075b6178ca39 100644 (file)
@@ -33,7 +33,6 @@
 #include "commit-slab.h"
 #include "repository.h"
 #include "commit-reach.h"
-#include "interdiff.h"
 #include "range-diff.h"
 
 #define MAIL_DEFAULT_WRAP 72
@@ -599,8 +598,8 @@ static int show_tree_object(const struct object_id *oid,
 static void show_setup_revisions_tweak(struct rev_info *rev,
                                       struct setup_revision_opt *opt)
 {
-       if (rev->ignore_merges) {
-               /* There was no "-m" on the command line */
+       if (rev->ignore_merges < 0) {
+               /* There was no "-m" variant on the command line */
                rev->ignore_merges = 0;
                if (!rev->first_parent_only && !rev->combine_merges) {
                        /* No "--first-parent", "-c", or "--cc" */
@@ -732,8 +731,7 @@ static void log_setup_revisions_tweak(struct rev_info *rev,
        if (!rev->diffopt.output_format && rev->combine_merges)
                rev->diffopt.output_format = DIFF_FORMAT_PATCH;
 
-       /* Turn -m on when --cc/-c was given */
-       if (rev->combine_merges)
+       if (rev->first_parent_only && rev->ignore_merges < 0)
                rev->ignore_merges = 0;
 }
 
@@ -1062,7 +1060,7 @@ static char *find_branch_name(struct rev_info *rev)
                return NULL;
        ref = rev->cmdline.rev[positive].name;
        tip_oid = &rev->cmdline.rev[positive].item->oid;
-       if (dwim_ref(ref, strlen(ref), &branch_oid, &full_ref) &&
+       if (dwim_ref(ref, strlen(ref), &branch_oid, &full_ref, 0) &&
            skip_prefix(full_ref, "refs/heads/", &v) &&
            oideq(tip_oid, &branch_oid))
                branch = xstrdup(v);
@@ -1128,18 +1126,18 @@ do_pp:
 
 static int get_notes_refs(struct string_list_item *item, void *arg)
 {
-       argv_array_pushf(arg, "--notes=%s", item->string);
+       strvec_pushf(arg, "--notes=%s", item->string);
        return 0;
 }
 
-static void get_notes_args(struct argv_array *arg, struct rev_info *rev)
+static void get_notes_args(struct strvec *arg, struct rev_info *rev)
 {
        if (!rev->show_notes) {
-               argv_array_push(arg, "--no-notes");
+               strvec_push(arg, "--no-notes");
        } else if (rev->notes_opt.use_default_notes > 0 ||
                   (rev->notes_opt.use_default_notes == -1 &&
                    !rev->notes_opt.extra_notes_refs.nr)) {
-               argv_array_push(arg, "--notes");
+               strvec_push(arg, "--notes");
        } else {
                for_each_string_list(&rev->notes_opt.extra_notes_refs, get_notes_refs, arg);
        }
@@ -1209,7 +1207,8 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
        if (rev->idiff_oid1) {
                fprintf_ln(rev->diffopt.file, "%s", rev->idiff_title);
-               show_interdiff(rev, 0);
+               show_interdiff(rev->idiff_oid1, rev->idiff_oid2, 0,
+                              &rev->diffopt);
        }
 
        if (rev->rdiff1) {
@@ -1218,7 +1217,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                 * can be added later if deemed desirable.
                 */
                struct diff_options opts;
-               struct argv_array other_arg = ARGV_ARRAY_INIT;
+               struct strvec other_arg = STRVEC_INIT;
                diff_setup(&opts);
                opts.file = rev->diffopt.file;
                opts.use_color = rev->diffopt.use_color;
@@ -1227,7 +1226,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                get_notes_args(&other_arg, rev);
                show_range_diff(rev->rdiff1, rev->rdiff2,
                                rev->creation_factor, 1, &opts, &other_arg);
-               argv_array_clear(&other_arg);
+               strvec_clear(&other_arg);
        }
 }
 
@@ -1597,16 +1596,20 @@ 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, "..");
 
-       if (!strstr(prev, "..")) {
+       if (prev_is_range)
+               strbuf_addstr(r1, prev);
+       else
                strbuf_addf(r1, "%s..%s", head_oid, prev);
+
+       if (origin)
+               strbuf_addf(r2, "%s..%s", oid_to_hex(&origin->object.oid), head_oid);
+       else if (prev_is_range)
+               die(_("failed to infer range-diff origin of current series"));
+       else {
+               warning(_("using '%s' as range-diff origin of current series"), prev);
                strbuf_addf(r2, "%s..%s", prev, head_oid);
-       } else if (!origin) {
-               die(_("failed to infer range-diff ranges"));
-       } else {
-               strbuf_addstr(r1, prev);
-               strbuf_addf(r2, "%s..%s",
-                           oid_to_hex(&origin->object.oid), head_oid);
        }
 }