1
- use crate :: { extension, State } ;
1
+ use crate :: { extension, Entry , State , Version } ;
2
2
use filetime:: FileTime ;
3
3
use git_hash:: Kind ;
4
4
@@ -79,10 +79,15 @@ impl State {
79
79
// Note that we ignore all errors for optional signatures.
80
80
match start_of_extensions {
81
81
Some ( offset) => {
82
- ext = load_extensions ( & data[ offset..] , object_hash) ;
82
+ let ( ext, entries) =
83
+ git_features:: parallel:: join ( || load_extensions ( & data[ offset..] , object_hash) , || ( ) ) ;
83
84
todo ! ( "load all extensions in thread, then get IEOT, then possibly multi-threaded entry parsing" )
84
85
}
85
- None => todo ! ( "load entries singlge-threaded, then extensions" ) ,
86
+ None => {
87
+ let ( entries, data) = load_entries ( version, data, num_entries, object_hash) ?;
88
+ let ext = load_extensions ( data, object_hash) ;
89
+ todo ! ( "load entries singlge-threaded, then extensions" )
90
+ }
86
91
}
87
92
88
93
Ok ( State {
@@ -93,19 +98,31 @@ impl State {
93
98
}
94
99
}
95
100
101
+ fn load_entries (
102
+ version : Version ,
103
+ beginning_of_entries : & [ u8 ] ,
104
+ num_entries : u32 ,
105
+ object_hash : git_hash:: Kind ,
106
+ ) -> Result < ( Vec < Entry > , & [ u8 ] ) , Error > {
107
+ todo ! ( "load entries" )
108
+ }
109
+
96
110
fn load_extensions ( beginning_of_extensions : & [ u8 ] , object_hash : git_hash:: Kind ) -> Extensions {
97
- let extensions = extension:: Iter :: new_without_checksum ( beginning_of_extensions, object_hash) ;
98
- let mut ext = Extensions :: default ( ) ;
99
- for ( signature, ext_data) in extensions {
100
- match signature {
101
- extension:: tree:: SIGNATURE => {
102
- ext. cache_tree = extension:: tree:: decode ( ext_data, object_hash) ;
111
+ extension:: Iter :: new_without_checksum ( beginning_of_extensions, object_hash)
112
+ . map ( |extensions| {
113
+ let mut ext = Extensions :: default ( ) ;
114
+ for ( signature, ext_data) in extensions {
115
+ match signature {
116
+ extension:: tree:: SIGNATURE => {
117
+ ext. cache_tree = extension:: tree:: decode ( ext_data, object_hash) ;
118
+ }
119
+ extension:: end_of_index_entry:: SIGNATURE => { } // skip already done
120
+ _unknown => { } // skip unknown extensions, too
121
+ }
103
122
}
104
- extension:: end_of_index_entry:: SIGNATURE => { } // skip already done
105
- _unknown => { } // skip unknown extensions, too
106
- }
107
- }
108
- ext
123
+ ext
124
+ } )
125
+ . unwrap_or_default ( )
109
126
}
110
127
111
128
#[ derive( Default ) ]
0 commit comments