Merge branch 'mt/parallel-checkout-part-2'
The checkout machinery has been taught to perform the actual write-out of the files in parallel when able. * mt/parallel-checkout-part-2: parallel-checkout: add design documentation parallel-checkout: support progress displaying parallel-checkout: add configuration options parallel-checkout: make it truly parallel unpack-trees: add basic support for parallel checkout
This commit is contained in:
17
entry.c
17
entry.c
@ -7,6 +7,7 @@
|
||||
#include "progress.h"
|
||||
#include "fsmonitor.h"
|
||||
#include "entry.h"
|
||||
#include "parallel-checkout.h"
|
||||
|
||||
static void create_directories(const char *path, int path_len,
|
||||
const struct checkout *state)
|
||||
@ -428,8 +429,17 @@ static void mark_colliding_entries(const struct checkout *state,
|
||||
for (i = 0; i < state->istate->cache_nr; i++) {
|
||||
struct cache_entry *dup = state->istate->cache[i];
|
||||
|
||||
if (dup == ce)
|
||||
break;
|
||||
if (dup == ce) {
|
||||
/*
|
||||
* Parallel checkout doesn't create the files in index
|
||||
* order. So the other side of the collision may appear
|
||||
* after the given cache_entry in the array.
|
||||
*/
|
||||
if (parallel_checkout_status() == PC_RUNNING)
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (dup->ce_flags & (CE_MATCHED | CE_VALID | CE_SKIP_WORKTREE))
|
||||
continue;
|
||||
@ -538,6 +548,9 @@ int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
|
||||
ca = &ca_buf;
|
||||
}
|
||||
|
||||
if (!enqueue_checkout(ce, ca))
|
||||
return 0;
|
||||
|
||||
return write_entry(ce, path.buf, ca, state, 0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user