@@ -962,6 +962,18 @@ static void midx_report(const char *fmt, ...)
962
962
va_end (ap );
963
963
}
964
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
+
965
977
int verify_midx_file (const char * object_dir )
966
978
{
967
979
uint32_t i ;
@@ -972,10 +984,15 @@ int verify_midx_file(const char *object_dir)
972
984
if (!m )
973
985
return 0 ;
974
986
987
+ progress = start_progress (_ ("Looking for referenced packfiles" ),
988
+ m -> num_packs );
975
989
for (i = 0 ; i < m -> num_packs ; i ++ ) {
976
990
if (prepare_midx_pack (m , i ))
977
991
midx_report ("failed to load pack in position %d" , i );
992
+
993
+ display_progress (progress , i + 1 );
978
994
}
995
+ stop_progress (& progress );
979
996
980
997
for (i = 0 ; i < 255 ; i ++ ) {
981
998
uint32_t oid_fanout1 = ntohl (m -> chunk_oid_fanout [i ]);
@@ -986,6 +1003,8 @@ int verify_midx_file(const char *object_dir)
986
1003
i , oid_fanout1 , oid_fanout2 , i + 1 );
987
1004
}
988
1005
1006
+ progress = start_sparse_progress (_ ("Verifying OID order in MIDX" ),
1007
+ m -> num_objects - 1 );
989
1008
for (i = 0 ; i < m -> num_objects - 1 ; i ++ ) {
990
1009
struct object_id oid1 , oid2 ;
991
1010
@@ -995,9 +1014,12 @@ int verify_midx_file(const char *object_dir)
995
1014
if (oidcmp (& oid1 , & oid2 ) >= 0 )
996
1015
midx_report (_ ("oid lookup out of order: oid[%d] = %s >= %s = oid[%d]" ),
997
1016
i , oid_to_hex (& oid1 ), oid_to_hex (& oid2 ), i + 1 );
1017
+
1018
+ midx_display_sparse_progress (progress , i + 1 );
998
1019
}
1020
+ stop_progress (& progress );
999
1021
1000
- progress = start_progress (_ ("Verifying object offsets" ), m -> num_objects );
1022
+ progress = start_sparse_progress (_ ("Verifying object offsets" ), m -> num_objects );
1001
1023
for (i = 0 ; i < m -> num_objects ; i ++ ) {
1002
1024
struct object_id oid ;
1003
1025
struct pack_entry e ;
@@ -1023,7 +1045,7 @@ int verify_midx_file(const char *object_dir)
1023
1045
midx_report (_ ("incorrect object offset for oid[%d] = %s: %" PRIx64 " != %" PRIx64 ),
1024
1046
i , oid_to_hex (& oid ), m_offset , p_offset );
1025
1047
1026
- display_progress (progress , i + 1 );
1048
+ midx_display_sparse_progress (progress , i + 1 );
1027
1049
}
1028
1050
stop_progress (& progress );
1029
1051
0 commit comments