Skip to content

Commit 634e008

Browse files
committed
Merge branch 'es/format-patch-interdiff-cleanup'
"format-patch --range-diff=<prev> <origin>..HEAD" has been taught not to ignore <origin> when <prev> is a single version. * es/format-patch-interdiff-cleanup: format-patch: use 'origin' as start of current-series-range when known diff-lib: tighten show_interdiff()'s interface diff: move show_interdiff() from its own file to diff-lib
2 parents bcb68bf + 07a7f8d commit 634e008

File tree

7 files changed

+47
-48
lines changed

7 files changed

+47
-48
lines changed

Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -889,7 +889,6 @@ LIB_OBJS += hashmap.o
889889
LIB_OBJS += help.o
890890
LIB_OBJS += hex.o
891891
LIB_OBJS += ident.o
892-
LIB_OBJS += interdiff.o
893892
LIB_OBJS += json-writer.o
894893
LIB_OBJS += kwset.o
895894
LIB_OBJS += levenshtein.o

builtin/log.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include "commit-slab.h"
3434
#include "repository.h"
3535
#include "commit-reach.h"
36-
#include "interdiff.h"
3736
#include "range-diff.h"
3837

3938
#define MAIL_DEFAULT_WRAP 72
@@ -1207,7 +1206,8 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
12071206

12081207
if (rev->idiff_oid1) {
12091208
fprintf_ln(rev->diffopt.file, "%s", rev->idiff_title);
1210-
show_interdiff(rev, 0);
1209+
show_interdiff(rev->idiff_oid1, rev->idiff_oid2, 0,
1210+
&rev->diffopt);
12111211
}
12121212

12131213
if (rev->rdiff1) {
@@ -1595,16 +1595,20 @@ static void infer_range_diff_ranges(struct strbuf *r1,
15951595
struct commit *head)
15961596
{
15971597
const char *head_oid = oid_to_hex(&head->object.oid);
1598+
int prev_is_range = !!strstr(prev, "..");
15981599

1599-
if (!strstr(prev, "..")) {
1600+
if (prev_is_range)
1601+
strbuf_addstr(r1, prev);
1602+
else
16001603
strbuf_addf(r1, "%s..%s", head_oid, prev);
1604+
1605+
if (origin)
1606+
strbuf_addf(r2, "%s..%s", oid_to_hex(&origin->object.oid), head_oid);
1607+
else if (prev_is_range)
1608+
die(_("failed to infer range-diff origin of current series"));
1609+
else {
1610+
warning(_("using '%s' as range-diff origin of current series"), prev);
16011611
strbuf_addf(r2, "%s..%s", prev, head_oid);
1602-
} else if (!origin) {
1603-
die(_("failed to infer range-diff ranges"));
1604-
} else {
1605-
strbuf_addstr(r1, prev);
1606-
strbuf_addf(r2, "%s..%s",
1607-
oid_to_hex(&origin->object.oid), head_oid);
16081612
}
16091613
}
16101614

diff-lib.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,3 +565,28 @@ int index_differs_from(struct repository *r,
565565
object_array_clear(&rev.pending);
566566
return (rev.diffopt.flags.has_changes != 0);
567567
}
568+
569+
static struct strbuf *idiff_prefix_cb(struct diff_options *opt, void *data)
570+
{
571+
return data;
572+
}
573+
574+
void show_interdiff(const struct object_id *oid1, const struct object_id *oid2,
575+
int indent, struct diff_options *diffopt)
576+
{
577+
struct diff_options opts;
578+
struct strbuf prefix = STRBUF_INIT;
579+
580+
memcpy(&opts, diffopt, sizeof(opts));
581+
opts.output_format = DIFF_FORMAT_PATCH;
582+
opts.output_prefix = idiff_prefix_cb;
583+
strbuf_addchars(&prefix, ' ', indent);
584+
opts.output_prefix_data = &prefix;
585+
diff_setup_done(&opts);
586+
587+
diff_tree_oid(oid1, oid2, "", &opts);
588+
diffcore_std(&opts);
589+
diff_flush(&opts);
590+
591+
strbuf_release(&prefix);
592+
}

diff.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,13 @@ int index_differs_from(struct repository *r, const char *def,
600600
const struct diff_flags *flags,
601601
int ita_invisible_in_index);
602602

603+
/*
604+
* Emit an interdiff of two object ID's to 'diff_options.file' optionally
605+
* indented by 'indent' spaces.
606+
*/
607+
void show_interdiff(const struct object_id *, const struct object_id *,
608+
int indent, struct diff_options *);
609+
603610
/*
604611
* Fill the contents of the filespec "df", respecting any textconv defined by
605612
* its userdiff driver. The "driver" parameter must come from a

interdiff.c

Lines changed: 0 additions & 28 deletions
This file was deleted.

interdiff.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

log-tree.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "sequencer.h"
1616
#include "line-log.h"
1717
#include "help.h"
18-
#include "interdiff.h"
1918
#include "range-diff.h"
2019

2120
static struct decoration name_decoration = { "object names" };
@@ -800,7 +799,8 @@ void show_log(struct rev_info *opt)
800799

801800
next_commentary_block(opt, NULL);
802801
fprintf_ln(opt->diffopt.file, "%s", opt->idiff_title);
803-
show_interdiff(opt, 2);
802+
show_interdiff(opt->idiff_oid1, opt->idiff_oid2, 2,
803+
&opt->diffopt);
804804

805805
memcpy(&diff_queued_diff, &dq, sizeof(diff_queued_diff));
806806
}

0 commit comments

Comments
 (0)