diff --git a/add-interactive.c b/add-interactive.c index 27dfc9feea..a2d126e0cc 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -61,6 +61,11 @@ int init_add_i_state(struct repository *r, struct add_i_state *s) &s->interactive_diff_filter)) s->interactive_diff_filter = NULL; + free(s->interactive_diff_algorithm); + if (git_config_get_string("diff.algorithm", + &s->interactive_diff_algorithm)) + s->interactive_diff_algorithm = NULL; + return 0; } diff --git a/add-interactive.h b/add-interactive.h index 013c8b5b99..25e300b4a0 100644 --- a/add-interactive.h +++ b/add-interactive.h @@ -16,7 +16,7 @@ struct add_i_state { char file_old_color[COLOR_MAXLEN]; char file_new_color[COLOR_MAXLEN]; - char *interactive_diff_filter; + char *interactive_diff_filter, *interactive_diff_algorithm; }; int init_add_i_state(struct repository *r, struct add_i_state *s); @@ -30,6 +30,7 @@ enum color_add_i { }; const char *get_add_i_color(enum color_add_i ix); const char *get_interactive_diff_filter(void); +const char *get_interactive_diff_algorithm(void); struct repository; struct pathspec; diff --git a/add-patch.c b/add-patch.c index 540f8cd1be..1137ae1854 100644 --- a/add-patch.c +++ b/add-patch.c @@ -309,6 +309,7 @@ static int is_octal(const char *p, size_t len) static int parse_diff(struct add_p_state *s, const struct pathspec *ps) { struct argv_array args = ARGV_ARRAY_INIT; + const char *diff_algorithm = s->s.interactive_diff_algorithm; struct strbuf *plain = &s->plain, *colored = NULL; struct child_process cp = CHILD_PROCESS_INIT; char *p, *pend, *colored_p = NULL, *colored_pend = NULL, marker = '\0'; @@ -318,6 +319,8 @@ static int parse_diff(struct add_p_state *s, const struct pathspec *ps) int res; argv_array_pushv(&args, s->mode->diff); + if (diff_algorithm) + argv_array_pushf(&args, "--diff-algorithm=%s", diff_algorithm); if (s->revision) { struct object_id oid; argv_array_push(&args,