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 <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff Hostetler committed
Mar 21, 2019 at 12:36 UTC
430efb8a74bd9ce9b6019b37cda21063914b0038
1 file changed
+24
-2
midx.c
+24
-2
@@ -962,6 +962,18 @@ static void midx_report(const char *fmt, ...)
962
va_end(ap);
963
}
964
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
+
977
int verify_midx_file(const char *object_dir)
978
{
979
uint32_t i;
@@ -972,10 +984,15 @@ int verify_midx_file(const char *object_dir)
984
if (!m)
985
return 0;
986
987
+ progress = start_progress(_("Looking for referenced packfiles"),
988
+ m->num_packs);
989
for (i = 0; i < m->num_packs; i++) {
990
if (prepare_midx_pack(m, i))
991
midx_report("failed to load pack in position %d", i);
992
+
993
+ display_progress(progress, i + 1);
994
}
995
+ stop_progress(&progress);
996
997
for (i = 0; i < 255; i++) {
998
uint32_t oid_fanout1 = ntohl(m->chunk_oid_fanout[i]);
@@ -986,6 +1003,8 @@ int verify_midx_file(const char *object_dir)
1003
i, oid_fanout1, oid_fanout2, i + 1);
1004
}
1005
1006
+ progress = start_sparse_progress(_("Verifying OID order in MIDX"),
1007
+ m->num_objects - 1);
1008
for (i = 0; i < m->num_objects - 1; i++) {
1009
struct object_id oid1, oid2;
1010
@@ -995,9 +1014,12 @@ int verify_midx_file(const char *object_dir)
1014
if (oidcmp(&oid1, &oid2) >= 0)
1015
midx_report(_("oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"),
1016
i, oid_to_hex(&oid1), oid_to_hex(&oid2), i + 1);
1017
+
1018
+ midx_display_sparse_progress(progress, i + 1);
1019
}
1020
+ stop_progress(&progress);
1021
1000
- progress = start_progress(_("Verifying object offsets"), m->num_objects);
1022
+ progress = start_sparse_progress(_("Verifying object offsets"), m->num_objects);
1023
for (i = 0; i < m->num_objects; i++) {
1024
struct object_id oid;
1025
struct pack_entry e;
@@ -1023,7 +1045,7 @@ int verify_midx_file(const char *object_dir)
1045
midx_report(_("incorrect object offset for oid[%d] = %s: %"PRIx64" != %"PRIx64),
1046
i, oid_to_hex(&oid), m_offset, p_offset);
1047
1026
- display_progress(progress, i + 1);
1048
+ midx_display_sparse_progress(progress, i + 1);
1049
}
1050
stop_progress(&progress);
1051