Skip to content

Commit 430efb8

Browse files
jeffhostetlergitster
authored andcommitted
midx: add progress indicators in multi-pack-index verify
Add progress indicators to more parts of midx verify. Use sparse progress indicator for object iteration. Signed-off-by: Jeff Hostetler <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d829223 commit 430efb8

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

midx.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,18 @@ static void midx_report(const char *fmt, ...)
962962
va_end(ap);
963963
}
964964

965+
/*
966+
* Limit calls to display_progress() for performance reasons.
967+
* The interval here was arbitrarily chosen.
968+
*/
969+
#define SPARSE_PROGRESS_INTERVAL (1 << 12)
970+
#define midx_display_sparse_progress(progress, n) \
971+
do { \
972+
uint64_t _n = (n); \
973+
if ((_n & (SPARSE_PROGRESS_INTERVAL - 1)) == 0) \
974+
display_progress(progress, _n); \
975+
} while (0)
976+
965977
int verify_midx_file(const char *object_dir)
966978
{
967979
uint32_t i;
@@ -972,10 +984,15 @@ int verify_midx_file(const char *object_dir)
972984
if (!m)
973985
return 0;
974986

987+
progress = start_progress(_("Looking for referenced packfiles"),
988+
m->num_packs);
975989
for (i = 0; i < m->num_packs; i++) {
976990
if (prepare_midx_pack(m, i))
977991
midx_report("failed to load pack in position %d", i);
992+
993+
display_progress(progress, i + 1);
978994
}
995+
stop_progress(&progress);
979996

980997
for (i = 0; i < 255; i++) {
981998
uint32_t oid_fanout1 = ntohl(m->chunk_oid_fanout[i]);
@@ -986,6 +1003,8 @@ int verify_midx_file(const char *object_dir)
9861003
i, oid_fanout1, oid_fanout2, i + 1);
9871004
}
9881005

1006+
progress = start_sparse_progress(_("Verifying OID order in MIDX"),
1007+
m->num_objects - 1);
9891008
for (i = 0; i < m->num_objects - 1; i++) {
9901009
struct object_id oid1, oid2;
9911010

@@ -995,9 +1014,12 @@ int verify_midx_file(const char *object_dir)
9951014
if (oidcmp(&oid1, &oid2) >= 0)
9961015
midx_report(_("oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"),
9971016
i, oid_to_hex(&oid1), oid_to_hex(&oid2), i + 1);
1017+
1018+
midx_display_sparse_progress(progress, i + 1);
9981019
}
1020+
stop_progress(&progress);
9991021

1000-
progress = start_progress(_("Verifying object offsets"), m->num_objects);
1022+
progress = start_sparse_progress(_("Verifying object offsets"), m->num_objects);
10011023
for (i = 0; i < m->num_objects; i++) {
10021024
struct object_id oid;
10031025
struct pack_entry e;
@@ -1023,7 +1045,7 @@ int verify_midx_file(const char *object_dir)
10231045
midx_report(_("incorrect object offset for oid[%d] = %s: %"PRIx64" != %"PRIx64),
10241046
i, oid_to_hex(&oid), m_offset, p_offset);
10251047

1026-
display_progress(progress, i + 1);
1048+
midx_display_sparse_progress(progress, i + 1);
10271049
}
10281050
stop_progress(&progress);
10291051

0 commit comments

Comments
 (0)