diff --color-moved: factor out function
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>
Phillip Wood committed
Dec 9, 2021 at 10:29 UTC
7dfe427107a3765456e9fa33c56da29fea24cf0f
1 file changed
+34
-17
diff.c
+34
-17
@@ -1098,6 +1098,38 @@ static int shrink_potential_moved_blocks(struct moved_block *pmb,
1098
return rp + 1;
1099
}
1100
1101
+static void fill_potential_moved_blocks(struct diff_options *o,
1102
+ struct hashmap *hm,
1103
+ struct moved_entry *match,
1104
+ struct emitted_diff_symbol *l,
1105
+ struct moved_block **pmb_p,
1106
+ int *pmb_alloc_p, int *pmb_nr_p)
1107
+
1108
+{
1109
+ struct moved_block *pmb = *pmb_p;
1110
+ int pmb_alloc = *pmb_alloc_p, pmb_nr = *pmb_nr_p;
1111
+
1112
+ /*
1113
+ * The current line is the start of a new block.
1114
+ * Setup the set of potential blocks.
1115
+ */
1116
+ hashmap_for_each_entry_from(hm, match, ent) {
1117
+ ALLOC_GROW(pmb, pmb_nr + 1, pmb_alloc);
1118
+ if (o->color_moved_ws_handling &
1119
+ COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) {
1120
+ if (compute_ws_delta(l, match->es, &(pmb[pmb_nr]).wsd))
1121
+ pmb[pmb_nr++].match = match;
1122
+ } else {
1123
+ pmb[pmb_nr].wsd = 0;
1124
+ pmb[pmb_nr++].match = match;
1125
+ }
1126
+ }
1127
+
1128
+ *pmb_p = pmb;
1129
+ *pmb_alloc_p = pmb_alloc;
1130
+ *pmb_nr_p = pmb_nr;
1131
+}
1132
+
1133
/*
1134
* If o->color_moved is COLOR_MOVED_PLAIN, this function does nothing.
1135
*
@@ -1198,23 +1230,8 @@ static void mark_color_as_moved(struct diff_options *o,
1230
pmb_nr = shrink_potential_moved_blocks(pmb, pmb_nr);
1231
1232
if (pmb_nr == 0) {
1201
- /*
1202
- * The current line is the start of a new block.
1203
- * Setup the set of potential blocks.
1204
- */
1205
- hashmap_for_each_entry_from(hm, match, ent) {
1206
- ALLOC_GROW(pmb, pmb_nr + 1, pmb_alloc);
1207
- if (o->color_moved_ws_handling &
1208
- COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) {
1209
- if (compute_ws_delta(l, match->es,
1210
- &pmb[pmb_nr].wsd))
1211
- pmb[pmb_nr++].match = match;
1212
- } else {
1213
- pmb[pmb_nr].wsd = 0;
1214
- pmb[pmb_nr++].match = match;
1215
- }
1216
- }
1217
-
1233
+ fill_potential_moved_blocks(
1234
+ o, hm, match, l, &pmb, &pmb_alloc, &pmb_nr);
1235
if (adjust_last_block(o, n, block_length) &&
1236
pmb_nr && last_symbol != l->s)
1237
flipped_block = (flipped_block + 1) % 2;