checkout: factor out mark_cache_entry_for_checkout function
Factor out the code that marks a cache entry as matched for checkout into a separate function. We are going to introduce a new mode in 'git checkout' in a subsequent commit, that is going to have a slightly different logic. This would make this code unnecessarily complex. Moving that complexity into separate functions will make the code in the subsequent step easier to follow. Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Thomas Gummerer committed
Dec 20, 2018 at 13:48 UTC
b7033e73b7b671670160726f62ac16d88161e3d0
1 file changed
+36
-31
builtin/checkout.c
+36
-31
@@ -247,6 +247,40 @@ static int checkout_merged(int pos, const struct checkout *state)
247
return status;
248
}
249
250
+static void mark_ce_for_checkout(struct cache_entry *ce,
251
+ char *ps_matched,
252
+ const struct checkout_opts *opts)
253
+{
254
+ ce->ce_flags &= ~CE_MATCHED;
255
+ if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
256
+ return;
257
+ if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
258
+ /*
259
+ * "git checkout tree-ish -- path", but this entry
260
+ * is in the original index but is not in tree-ish
261
+ * or does not match the pathspec; it will not be
262
+ * checked out to the working tree. We will not do
263
+ * anything to this entry at all.
264
+ */
265
+ return;
266
+ /*
267
+ * Either this entry came from the tree-ish we are
268
+ * checking the paths out of, or we are checking out
269
+ * of the index.
270
+ *
271
+ * If it comes from the tree-ish, we already know it
272
+ * matches the pathspec and could just stamp
273
+ * CE_MATCHED to it from update_some(). But we still
274
+ * need ps_matched and read_tree_recursive (and
275
+ * eventually tree_entry_interesting) cannot fill
276
+ * ps_matched yet. Once it can, we can avoid calling
277
+ * match_pathspec() for _all_ entries when
278
+ * opts->source_tree != NULL.
279
+ */
280
+ if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched))
281
+ ce->ce_flags |= CE_MATCHED;
282
+}
283
+
284
static int checkout_paths(const struct checkout_opts *opts,
285
const char *revision)
286
{
@@ -297,37 +331,8 @@ static int checkout_paths(const struct checkout_opts *opts,
331
* Make sure all pathspecs participated in locating the paths
332
* to be checked out.
333
*/
300
- for (pos = 0; pos < active_nr; pos++) {
301
- struct cache_entry *ce = active_cache[pos];
302
- ce->ce_flags &= ~CE_MATCHED;
303
- if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
304
- continue;
305
- if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
306
- /*
307
- * "git checkout tree-ish -- path" and this entry
308
- * is in the original index, but is not in tree-ish
309
- * or does not match the pathspec; it will not be
310
- * checked out to the working tree. We will not do
311
- * anything to this entry at all.
312
- */
313
- continue;
314
- /*
315
- * Either this entry came from the tree-ish we are
316
- * checking the paths out of, or we are checking out
317
- * of the index.
318
- *
319
- * If it comes from the tree-ish, we already know it
320
- * matches the pathspec and could just stamp
321
- * CE_MATCHED to it from update_some(). But we still
322
- * need ps_matched and read_tree_recursive (and
323
- * eventually tree_entry_interesting) cannot fill
324
- * ps_matched yet. Once it can, we can avoid calling
325
- * match_pathspec() for _all_ entries when
326
- * opts->source_tree != NULL.
327
- */
328
- if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched))
329
- ce->ce_flags |= CE_MATCHED;
330
- }
334
+ for (pos = 0; pos < active_nr; pos++)
335
+ mark_ce_for_checkout(active_cache[pos], ps_matched, opts);
336
337
if (report_path_error(ps_matched, &opts->pathspec, opts->prefix)) {
338
free(ps_matched);