@@ -5,6 +5,9 @@ use winnow::prelude::*;
5
5
6
6
use crate :: { Commit , CommitRef , TagRef } ;
7
7
8
+ /// The well-known field name for gpg signatures.
9
+ pub const SIGNATURE_FIELD_NAME : & ' static str = "gpgsig" ;
10
+
8
11
mod decode;
9
12
///
10
13
pub mod message;
@@ -84,7 +87,7 @@ impl<'a> CommitRef<'a> {
84
87
}
85
88
86
89
/// Returns a convenient iterator over all extra headers.
87
- pub fn extra_headers ( & self ) -> crate :: commit :: ExtraHeaders < impl Iterator < Item = ( & BStr , & BStr ) > > {
90
+ pub fn extra_headers ( & self ) -> ExtraHeaders < impl Iterator < Item = ( & BStr , & BStr ) > > {
88
91
ExtraHeaders :: new ( self . extra_headers . iter ( ) . map ( |( k, v) | ( * k, v. as_ref ( ) ) ) )
89
92
}
90
93
@@ -147,16 +150,26 @@ where
147
150
pub fn new ( iter : I ) -> Self {
148
151
ExtraHeaders { inner : iter }
149
152
}
153
+
150
154
/// Find the _value_ of the _first_ header with the given `name`.
151
155
pub fn find ( mut self , name : & str ) -> Option < & ' a BStr > {
152
156
self . inner
153
157
. find_map ( move |( k, v) | if k == name. as_bytes ( ) . as_bstr ( ) { Some ( v) } else { None } )
154
158
}
159
+
160
+ /// Find the entry index with the given name, or return `None` if unavailable.
161
+ pub fn find_pos ( self , name : & str ) -> Option < usize > {
162
+ self . inner
163
+ . enumerate ( )
164
+ . find_map ( |( pos, ( field, _value) ) | ( field == name) . then_some ( pos) )
165
+ }
166
+
155
167
/// Return an iterator over all _values_ of headers with the given `name`.
156
168
pub fn find_all ( self , name : & ' a str ) -> impl Iterator < Item = & ' a BStr > {
157
169
self . inner
158
170
. filter_map ( move |( k, v) | if k == name. as_bytes ( ) . as_bstr ( ) { Some ( v) } else { None } )
159
171
}
172
+
160
173
/// Return an iterator over all git mergetags.
161
174
///
162
175
/// A merge tag is a tag object embedded within the respective header field of a commit, making
@@ -167,6 +180,6 @@ where
167
180
168
181
/// Return the cryptographic signature provided by gpg/pgp verbatim.
169
182
pub fn pgp_signature ( self ) -> Option < & ' a BStr > {
170
- self . find ( "gpgsig" )
183
+ self . find ( SIGNATURE_FIELD_NAME )
171
184
}
172
185
}
0 commit comments