diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2019-12-13 08:08:01 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-12-13 12:37:14 -0800 |
commit | bcdd297b782b19782d8e09b18682ec61d7c36897 (patch) | |
tree | 6920f685a3a23d0237ebce2f93ddbdff0cf364ce /add-interactive.c | |
parent | b38dd9e7151f118b989f8c9851bc38a8a8733eaf (diff) | |
download | git-bcdd297b782b19782d8e09b18682ec61d7c36897.tar.gz |
built-in add -p: implement hunk editing
Just like `git add --edit` allows the user to edit the diff before it is
being applied to the index, this feature allows the user to edit the
diff *hunk*.
Naturally, it gets a bit more complicated here because the result has
to play well with the remaining hunks of the overall diff. Therefore,
we have to do a loop in which we let the user edit the hunk, then test
whether the result would work, and if not, drop the edits and let the
user decide whether to try editing the hunk again.
Note: in contrast to the Perl version, we use the same diff
"coalescing" (i.e. merging overlapping hunks into a single one) also for
the check after editing, and we introduce a new flag for that purpose
that asks the `reassemble_patch()` function to pretend that all hunks
were selected for use.
This allows us to continue to run `git apply` *without* the
`--allow-overlap` option (unlike the Perl version), and it also fixes
two known breakages in `t3701-add-interactive.sh` (which we cannot mark
as resolved so far because the Perl script version is still the default
and continues to have those breakages).
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'add-interactive.c')
-rw-r--r-- | add-interactive.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/add-interactive.c b/add-interactive.c index 29356c5aa2..6a5048c83e 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -46,6 +46,12 @@ void init_add_i_state(struct add_i_state *s, struct repository *r) init_color(r, s, "reset", s->reset_color, GIT_COLOR_RESET); init_color(r, s, "fraginfo", s->fraginfo_color, diff_get_color(s->use_color, DIFF_FRAGINFO)); + init_color(r, s, "context", s->context_color, + diff_get_color(s->use_color, DIFF_CONTEXT)); + init_color(r, s, "old", s->file_old_color, + diff_get_color(s->use_color, DIFF_FILE_OLD)); + init_color(r, s, "new", s->file_new_color, + diff_get_color(s->use_color, DIFF_FILE_NEW)); } /* |