]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff --color-moved: call comparison function directly
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Thu, 9 Dec 2021 10:30:03 +0000 (10:30 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Dec 2021 21:24:05 +0000 (13:24 -0800)
This change will allow us to easily combine pmb_advance_or_null() and
pmb_advance_or_null_multi_match() in the next commit. Calling
xdiff_compare_lines() directly rather than using a function pointer
from the hash map has little effect on the run time.

Test                                                                  HEAD^             HEAD
-------------------------------------------------------------------------------------------------------------
4002.1: diff --no-color-moved --no-color-moved-ws large change        0.38(0.35+0.03)   0.38(0.32+0.06) +0.0%
4002.2: diff --color-moved --no-color-moved-ws large change           0.87(0.83+0.04)   0.87(0.80+0.06) +0.0%
4002.3: diff --color-moved-ws=allow-indentation-change large change   0.97(0.92+0.04)   0.97(0.93+0.04) +0.0%
4002.4: log --no-color-moved --no-color-moved-ws                      1.17(1.06+0.10)   1.16(1.10+0.05) -0.9%
4002.5: log --color-moved --no-color-moved-ws                         1.32(1.24+0.08)   1.31(1.22+0.09) -0.8%
4002.6: log --color-moved-ws=allow-indentation-change                 1.36(1.25+0.10)   1.35(1.25+0.10) -0.7%

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c

diff --git a/diff.c b/diff.c
index 78a486021ab98867eee37f92b12c5cd1bbeaed28..22e0edac173740fb74a1502c3ba1aba6a92e32f2 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -994,17 +994,20 @@ static void add_lines_to_move_detection(struct diff_options *o,
 }
 
 static void pmb_advance_or_null(struct diff_options *o,
-                               struct moved_entry *match,
-                               struct hashmap *hm,
+                               struct emitted_diff_symbol *l,
                                struct moved_block *pmb,
                                int pmb_nr)
 {
        int i;
+       unsigned flags = o->color_moved_ws_handling & XDF_WHITESPACE_FLAGS;
+
        for (i = 0; i < pmb_nr; i++) {
                struct moved_entry *prev = pmb[i].match;
                struct moved_entry *cur = (prev && prev->next_line) ?
                                prev->next_line : NULL;
-               if (cur && !hm->cmpfn(o, &cur->ent, &match->ent, NULL)) {
+               if (cur && xdiff_compare_lines(cur->es->line, cur->es->len,
+                                               l->line, l->len,
+                                               flags)) {
                        pmb[i].match = cur;
                } else {
                        pmb[i].match = NULL;
@@ -1195,7 +1198,7 @@ static void mark_color_as_moved(struct diff_options *o,
                    COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE)
                        pmb_advance_or_null_multi_match(o, l, pmb, pmb_nr);
                else
-                       pmb_advance_or_null(o, match, hm, pmb, pmb_nr);
+                       pmb_advance_or_null(o, l, pmb, pmb_nr);
 
                pmb_nr = shrink_potential_moved_blocks(pmb, pmb_nr);