midx: add progress to write_midx_file
Add progress to write_midx_file. Progress is displayed when the MIDX_PROGRESS flag is set. Signed-off-by: William Baker <William.Baker@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
efbc3aee08
commit
840cef0c70
25
midx.c
25
midx.c
@ -448,6 +448,8 @@ struct pack_list {
|
|||||||
uint32_t nr;
|
uint32_t nr;
|
||||||
uint32_t alloc;
|
uint32_t alloc;
|
||||||
struct multi_pack_index *m;
|
struct multi_pack_index *m;
|
||||||
|
struct progress *progress;
|
||||||
|
unsigned pack_paths_checked;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void add_pack_to_midx(const char *full_path, size_t full_path_len,
|
static void add_pack_to_midx(const char *full_path, size_t full_path_len,
|
||||||
@ -456,6 +458,7 @@ static void add_pack_to_midx(const char *full_path, size_t full_path_len,
|
|||||||
struct pack_list *packs = (struct pack_list *)data;
|
struct pack_list *packs = (struct pack_list *)data;
|
||||||
|
|
||||||
if (ends_with(file_name, ".idx")) {
|
if (ends_with(file_name, ".idx")) {
|
||||||
|
display_progress(packs->progress, ++packs->pack_paths_checked);
|
||||||
if (packs->m && midx_contains_pack(packs->m, file_name))
|
if (packs->m && midx_contains_pack(packs->m, file_name))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -785,7 +788,7 @@ static size_t write_midx_large_offsets(struct hashfile *f, uint32_t nr_large_off
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int write_midx_internal(const char *object_dir, struct multi_pack_index *m,
|
static int write_midx_internal(const char *object_dir, struct multi_pack_index *m,
|
||||||
struct string_list *packs_to_drop)
|
struct string_list *packs_to_drop, unsigned flags)
|
||||||
{
|
{
|
||||||
unsigned char cur_chunk, num_chunks = 0;
|
unsigned char cur_chunk, num_chunks = 0;
|
||||||
char *midx_name;
|
char *midx_name;
|
||||||
@ -799,6 +802,7 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
|
|||||||
uint64_t chunk_offsets[MIDX_MAX_CHUNKS + 1];
|
uint64_t chunk_offsets[MIDX_MAX_CHUNKS + 1];
|
||||||
uint32_t nr_entries, num_large_offsets = 0;
|
uint32_t nr_entries, num_large_offsets = 0;
|
||||||
struct pack_midx_entry *entries = NULL;
|
struct pack_midx_entry *entries = NULL;
|
||||||
|
struct progress *progress = NULL;
|
||||||
int large_offsets_needed = 0;
|
int large_offsets_needed = 0;
|
||||||
int pack_name_concat_len = 0;
|
int pack_name_concat_len = 0;
|
||||||
int dropped_packs = 0;
|
int dropped_packs = 0;
|
||||||
@ -833,7 +837,14 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packs.pack_paths_checked = 0;
|
||||||
|
if (flags & MIDX_PROGRESS)
|
||||||
|
packs.progress = start_progress(_("Adding packfiles to multi-pack-index"), 0);
|
||||||
|
else
|
||||||
|
packs.progress = NULL;
|
||||||
|
|
||||||
for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &packs);
|
for_each_file_in_pack_dir(object_dir, add_pack_to_midx, &packs);
|
||||||
|
stop_progress(&packs.progress);
|
||||||
|
|
||||||
if (packs.m && packs.nr == packs.m->num_packs && !packs_to_drop)
|
if (packs.m && packs.nr == packs.m->num_packs && !packs_to_drop)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -958,6 +969,9 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
|
|||||||
written += MIDX_CHUNKLOOKUP_WIDTH;
|
written += MIDX_CHUNKLOOKUP_WIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & MIDX_PROGRESS)
|
||||||
|
progress = start_progress(_("Writing chunks to multi-pack-index"),
|
||||||
|
num_chunks);
|
||||||
for (i = 0; i < num_chunks; i++) {
|
for (i = 0; i < num_chunks; i++) {
|
||||||
if (written != chunk_offsets[i])
|
if (written != chunk_offsets[i])
|
||||||
BUG("incorrect chunk offset (%"PRIu64" != %"PRIu64") for chunk id %"PRIx32,
|
BUG("incorrect chunk offset (%"PRIu64" != %"PRIu64") for chunk id %"PRIx32,
|
||||||
@ -990,7 +1004,10 @@ static int write_midx_internal(const char *object_dir, struct multi_pack_index *
|
|||||||
BUG("trying to write unknown chunk id %"PRIx32,
|
BUG("trying to write unknown chunk id %"PRIx32,
|
||||||
chunk_ids[i]);
|
chunk_ids[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
display_progress(progress, i + 1);
|
||||||
}
|
}
|
||||||
|
stop_progress(&progress);
|
||||||
|
|
||||||
if (written != chunk_offsets[num_chunks])
|
if (written != chunk_offsets[num_chunks])
|
||||||
BUG("incorrect final offset %"PRIu64" != %"PRIu64,
|
BUG("incorrect final offset %"PRIu64" != %"PRIu64,
|
||||||
@ -1018,7 +1035,7 @@ cleanup:
|
|||||||
|
|
||||||
int write_midx_file(const char *object_dir, unsigned flags)
|
int write_midx_file(const char *object_dir, unsigned flags)
|
||||||
{
|
{
|
||||||
return write_midx_internal(object_dir, NULL, NULL);
|
return write_midx_internal(object_dir, NULL, NULL, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_midx_file(struct repository *r)
|
void clear_midx_file(struct repository *r)
|
||||||
@ -1221,7 +1238,7 @@ int expire_midx_packs(struct repository *r, const char *object_dir, unsigned fla
|
|||||||
free(count);
|
free(count);
|
||||||
|
|
||||||
if (packs_to_drop.nr)
|
if (packs_to_drop.nr)
|
||||||
result = write_midx_internal(object_dir, m, &packs_to_drop);
|
result = write_midx_internal(object_dir, m, &packs_to_drop, flags);
|
||||||
|
|
||||||
string_list_clear(&packs_to_drop, 0);
|
string_list_clear(&packs_to_drop, 0);
|
||||||
return result;
|
return result;
|
||||||
@ -1370,7 +1387,7 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = write_midx_internal(object_dir, m, NULL);
|
result = write_midx_internal(object_dir, m, NULL, flags);
|
||||||
m = NULL;
|
m = NULL;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
Loading…
Reference in New Issue
Block a user