@@ -330,17 +330,73 @@ static void mark_ce_for_checkout_no_overlay(struct cache_entry *ce,
330330 }
331331}
332332
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+
333391static int checkout_paths (const struct checkout_opts * opts ,
334392 const char * revision )
335393{
336394 int pos ;
337- struct checkout state = CHECKOUT_INIT ;
338395 static char * ps_matched ;
339396 struct object_id rev ;
340397 struct commit * head ;
341398 int errs = 0 ;
342399 struct lock_file lock_file = LOCK_INIT ;
343- int nr_checkouts = 0 , nr_unmerged = 0 ;
344400
345401 trace2_cmd_mode (opts -> patch_mode ? "patch" : "path" );
346402
@@ -426,53 +482,7 @@ static int checkout_paths(const struct checkout_opts *opts,
426482 return 1 ;
427483
428484 /* 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 );
476486
477487 if (write_locked_index (& the_index , & lock_file , COMMIT_LOCK ))
478488 die (_ ("unable to write new index file" ));
0 commit comments