]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff --color-moved: factor out function
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Thu, 9 Dec 2021 10:29:57 +0000 (10:29 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Dec 2021 21:24:05 +0000 (13:24 -0800)
This code is quite heavily indented and having it in its own function
simplifies an upcoming change.

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 bd8e4ec97578d31792b24620c163df0cced9725d..09af94e018c8f2e7f7128639475fa373eea405d0 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -1098,6 +1098,38 @@ static int shrink_potential_moved_blocks(struct moved_block *pmb,
        return rp + 1;
 }
 
+static void fill_potential_moved_blocks(struct diff_options *o,
+                                       struct hashmap *hm,
+                                       struct moved_entry *match,
+                                       struct emitted_diff_symbol *l,
+                                       struct moved_block **pmb_p,
+                                       int *pmb_alloc_p, int *pmb_nr_p)
+
+{
+       struct moved_block *pmb = *pmb_p;
+       int pmb_alloc = *pmb_alloc_p, pmb_nr = *pmb_nr_p;
+
+       /*
+        * The current line is the start of a new block.
+        * Setup the set of potential blocks.
+        */
+       hashmap_for_each_entry_from(hm, match, ent) {
+               ALLOC_GROW(pmb, pmb_nr + 1, pmb_alloc);
+               if (o->color_moved_ws_handling &
+                   COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) {
+                       if (compute_ws_delta(l, match->es, &(pmb[pmb_nr]).wsd))
+                               pmb[pmb_nr++].match = match;
+               } else {
+                       pmb[pmb_nr].wsd = 0;
+                       pmb[pmb_nr++].match = match;
+               }
+       }
+
+       *pmb_p = pmb;
+       *pmb_alloc_p = pmb_alloc;
+       *pmb_nr_p = pmb_nr;
+}
+
 /*
  * If o->color_moved is COLOR_MOVED_PLAIN, this function does nothing.
  *
@@ -1198,23 +1230,8 @@ static void mark_color_as_moved(struct diff_options *o,
                pmb_nr = shrink_potential_moved_blocks(pmb, pmb_nr);
 
                if (pmb_nr == 0) {
-                       /*
-                        * The current line is the start of a new block.
-                        * Setup the set of potential blocks.
-                        */
-                       hashmap_for_each_entry_from(hm, match, ent) {
-                               ALLOC_GROW(pmb, pmb_nr + 1, pmb_alloc);
-                               if (o->color_moved_ws_handling &
-                                   COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) {
-                                       if (compute_ws_delta(l, match->es,
-                                                            &pmb[pmb_nr].wsd))
-                                               pmb[pmb_nr++].match = match;
-                               } else {
-                                       pmb[pmb_nr].wsd = 0;
-                                       pmb[pmb_nr++].match = match;
-                               }
-                       }
-
+                       fill_potential_moved_blocks(
+                               o, hm, match, l, &pmb, &pmb_alloc, &pmb_nr);
                        if (adjust_last_block(o, n, block_length) &&
                            pmb_nr && last_symbol != l->s)
                                flipped_block = (flipped_block + 1) % 2;