@@ -330,17 +330,73 @@ static void mark_ce_for_checkout_no_overlay(struct cache_entry *ce,
330
330
}
331
331
}
332
332
333
+ static int checkout_worktree (const struct checkout_opts * opts )
334
+ {
335
+ struct checkout state = CHECKOUT_INIT ;
336
+ int nr_checkouts = 0 , nr_unmerged = 0 ;
337
+ int errs = 0 ;
338
+ int pos ;
339
+
340
+ state .force = 1 ;
341
+ state .refresh_cache = 1 ;
342
+ state .istate = & the_index ;
343
+
344
+ enable_delayed_checkout (& state );
345
+ for (pos = 0 ; pos < active_nr ; pos ++ ) {
346
+ struct cache_entry * ce = active_cache [pos ];
347
+ if (ce -> ce_flags & CE_MATCHED ) {
348
+ if (!ce_stage (ce )) {
349
+ errs |= checkout_entry (ce , & state ,
350
+ NULL , & nr_checkouts );
351
+ continue ;
352
+ }
353
+ if (opts -> writeout_stage )
354
+ errs |= checkout_stage (opts -> writeout_stage ,
355
+ ce , pos ,
356
+ & state ,
357
+ & nr_checkouts , opts -> overlay_mode );
358
+ else if (opts -> merge )
359
+ errs |= checkout_merged (pos , & state ,
360
+ & nr_unmerged );
361
+ pos = skip_same_name (ce , pos ) - 1 ;
362
+ }
363
+ }
364
+ remove_marked_cache_entries (& the_index , 1 );
365
+ remove_scheduled_dirs ();
366
+ errs |= finish_delayed_checkout (& state , & nr_checkouts );
367
+
368
+ if (opts -> count_checkout_paths ) {
369
+ if (nr_unmerged )
370
+ fprintf_ln (stderr , Q_ ("Recreated %d merge conflict" ,
371
+ "Recreated %d merge conflicts" ,
372
+ nr_unmerged ),
373
+ nr_unmerged );
374
+ if (opts -> source_tree )
375
+ fprintf_ln (stderr , Q_ ("Updated %d path from %s" ,
376
+ "Updated %d paths from %s" ,
377
+ nr_checkouts ),
378
+ nr_checkouts ,
379
+ find_unique_abbrev (& opts -> source_tree -> object .oid ,
380
+ DEFAULT_ABBREV ));
381
+ else if (!nr_unmerged || nr_checkouts )
382
+ fprintf_ln (stderr , Q_ ("Updated %d path from the index" ,
383
+ "Updated %d paths from the index" ,
384
+ nr_checkouts ),
385
+ nr_checkouts );
386
+ }
387
+
388
+ return errs ;
389
+ }
390
+
333
391
static int checkout_paths (const struct checkout_opts * opts ,
334
392
const char * revision )
335
393
{
336
394
int pos ;
337
- struct checkout state = CHECKOUT_INIT ;
338
395
static char * ps_matched ;
339
396
struct object_id rev ;
340
397
struct commit * head ;
341
398
int errs = 0 ;
342
399
struct lock_file lock_file = LOCK_INIT ;
343
- int nr_checkouts = 0 , nr_unmerged = 0 ;
344
400
345
401
trace2_cmd_mode (opts -> patch_mode ? "patch" : "path" );
346
402
@@ -426,53 +482,7 @@ static int checkout_paths(const struct checkout_opts *opts,
426
482
return 1 ;
427
483
428
484
/* Now we are committed to check them out */
429
- state .force = 1 ;
430
- state .refresh_cache = 1 ;
431
- state .istate = & the_index ;
432
-
433
- enable_delayed_checkout (& state );
434
- for (pos = 0 ; pos < active_nr ; pos ++ ) {
435
- struct cache_entry * ce = active_cache [pos ];
436
- if (ce -> ce_flags & CE_MATCHED ) {
437
- if (!ce_stage (ce )) {
438
- errs |= checkout_entry (ce , & state ,
439
- NULL , & nr_checkouts );
440
- continue ;
441
- }
442
- if (opts -> writeout_stage )
443
- errs |= checkout_stage (opts -> writeout_stage ,
444
- ce , pos ,
445
- & state ,
446
- & nr_checkouts , opts -> overlay_mode );
447
- else if (opts -> merge )
448
- errs |= checkout_merged (pos , & state ,
449
- & nr_unmerged );
450
- pos = skip_same_name (ce , pos ) - 1 ;
451
- }
452
- }
453
- remove_marked_cache_entries (& the_index , 1 );
454
- remove_scheduled_dirs ();
455
- errs |= finish_delayed_checkout (& state , & nr_checkouts );
456
-
457
- if (opts -> count_checkout_paths ) {
458
- if (nr_unmerged )
459
- fprintf_ln (stderr , Q_ ("Recreated %d merge conflict" ,
460
- "Recreated %d merge conflicts" ,
461
- nr_unmerged ),
462
- nr_unmerged );
463
- if (opts -> source_tree )
464
- fprintf_ln (stderr , Q_ ("Updated %d path from %s" ,
465
- "Updated %d paths from %s" ,
466
- nr_checkouts ),
467
- nr_checkouts ,
468
- find_unique_abbrev (& opts -> source_tree -> object .oid ,
469
- DEFAULT_ABBREV ));
470
- else if (!nr_unmerged || nr_checkouts )
471
- fprintf_ln (stderr , Q_ ("Updated %d path from the index" ,
472
- "Updated %d paths from the index" ,
473
- nr_checkouts ),
474
- nr_checkouts );
475
- }
485
+ errs |= checkout_worktree (opts );
476
486
477
487
if (write_locked_index (& the_index , & lock_file , COMMIT_LOCK ))
478
488
die (_ ("unable to write new index file" ));
0 commit comments