@@ -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+
965977int 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