@@ -42,89 +42,7 @@ pub mod init {
42
42
}
43
43
}
44
44
45
- pub mod decode {
46
- use crate :: { extension, header, State } ;
47
- use filetime:: FileTime ;
48
-
49
- mod error {
50
- use quick_error:: quick_error;
51
-
52
- use crate :: header;
53
-
54
- quick_error ! {
55
- #[ derive( Debug ) ]
56
- pub enum Error {
57
- Header ( err: header:: decode:: Error ) {
58
- display( "The header could not be decoded" )
59
- source( err)
60
- from( )
61
- }
62
- }
63
- }
64
- }
65
- pub use error:: Error ;
66
-
67
- impl State {
68
- pub fn from_bytes ( data : & [ u8 ] , timestamp : FileTime , object_hash : git_hash:: Kind ) -> Result < Self , Error > {
69
- let ( version, num_entries, post_header_data) = header:: decode ( & data, object_hash) ?;
70
- let start_of_extensions = extension:: end_of_index_entry:: decode ( & data, object_hash) ;
71
-
72
- Ok ( State { timestamp, version } )
73
- }
74
- }
75
- }
76
-
77
- pub mod header {
78
- pub ( crate ) const SIZE : usize = 4 /*signature*/ + 4 /*version*/ + 4 /* num entries */ ;
79
-
80
- pub mod decode {
81
- use quick_error:: quick_error;
82
-
83
- quick_error ! {
84
- #[ derive( Debug ) ]
85
- pub enum Error {
86
- Corrupt ( message: & ' static str ) {
87
- display( "{}" , message)
88
- }
89
- UnsupportedVersion ( version: u32 ) {
90
- display( "Index version {} is not supported" , version)
91
- }
92
- }
93
- }
94
- }
95
- use crate :: { util:: read_u32, Version } ;
96
-
97
- pub ( crate ) fn decode (
98
- data : & [ u8 ] ,
99
- object_hash : git_hash:: Kind ,
100
- ) -> Result < ( crate :: Version , u32 , & [ u8 ] ) , decode:: Error > {
101
- if data. len ( ) < ( 3 * 4 ) + object_hash. len_in_bytes ( ) {
102
- return Err ( decode:: Error :: Corrupt (
103
- "File is too small even for header with zero entries and smallest hash" ,
104
- ) ) ;
105
- }
106
-
107
- const SIGNATURE : & [ u8 ] = b"DIRC" ;
108
- let ( signature, data) = data. split_at ( 4 ) ;
109
- if signature != SIGNATURE {
110
- return Err ( decode:: Error :: Corrupt (
111
- "Signature mismatch - this doesn't claim to be a header file" ,
112
- ) ) ;
113
- }
114
-
115
- let ( version, data) = data. split_at ( 4 ) ;
116
- let version = match read_u32 ( version) {
117
- 2 => Version :: V2 ,
118
- 3 => Version :: V3 ,
119
- 4 => Version :: V4 ,
120
- unknown => return Err ( decode:: Error :: UnsupportedVersion ( unknown) ) ,
121
- } ;
122
- let ( entries, data) = data. split_at ( 4 ) ;
123
- let entries = read_u32 ( entries) ;
124
-
125
- Ok ( ( version, entries, data) )
126
- }
127
- }
45
+ pub mod decode;
128
46
129
47
/// All known versions of a git index file.
130
48
#[ derive( PartialEq , Eq , Debug , Hash , Ord , PartialOrd , Clone , Copy ) ]
0 commit comments