@@ -5,6 +5,9 @@ use winnow::prelude::*;
55
66use crate :: { Commit , CommitRef , TagRef } ;
77
8+ /// The well-known field name for gpg signatures.
9+ pub const SIGNATURE_FIELD_NAME : & str = "gpgsig" ;
10+
811mod decode;
912///
1013pub mod message;
@@ -84,7 +87,7 @@ impl<'a> CommitRef<'a> {
8487 }
8588
8689 /// 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 ) > > {
8891 ExtraHeaders :: new ( self . extra_headers . iter ( ) . map ( |( k, v) | ( * k, v. as_ref ( ) ) ) )
8992 }
9093
@@ -147,16 +150,26 @@ where
147150 pub fn new ( iter : I ) -> Self {
148151 ExtraHeaders { inner : iter }
149152 }
153+
150154 /// Find the _value_ of the _first_ header with the given `name`.
151155 pub fn find ( mut self , name : & str ) -> Option < & ' a BStr > {
152156 self . inner
153157 . find_map ( move |( k, v) | if k == name. as_bytes ( ) . as_bstr ( ) { Some ( v) } else { None } )
154158 }
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+
155167 /// Return an iterator over all _values_ of headers with the given `name`.
156168 pub fn find_all ( self , name : & ' a str ) -> impl Iterator < Item = & ' a BStr > {
157169 self . inner
158170 . filter_map ( move |( k, v) | if k == name. as_bytes ( ) . as_bstr ( ) { Some ( v) } else { None } )
159171 }
172+
160173 /// Return an iterator over all git mergetags.
161174 ///
162175 /// A merge tag is a tag object embedded within the respective header field of a commit, making
@@ -167,6 +180,6 @@ where
167180
168181 /// Return the cryptographic signature provided by gpg/pgp verbatim.
169182 pub fn pgp_signature ( self ) -> Option < & ' a BStr > {
170- self . find ( "gpgsig" )
183+ self . find ( SIGNATURE_FIELD_NAME )
171184 }
172185}
0 commit comments