@@ -6,7 +6,7 @@ use std::sync::LazyLock as Lazy;
66use anyhow:: Context as ResultExt ;
77use git2:: {
88 BranchType , Cred , CredentialType , Error , FetchOptions , Oid , RemoteCallbacks , Repository ,
9- ResetType ,
9+ ResetType , SubmoduleUpdateOptions ,
1010} ;
1111use url:: Url ;
1212
@@ -89,20 +89,29 @@ pub fn checkout(repo: &Repository, oid: Oid) -> anyhow::Result<()> {
8989}
9090
9191/// Recursively update Git submodules.
92- pub fn submodule_update ( repo : & Repository ) -> Result < ( ) , Error > {
93- fn _submodule_update ( repo : & Repository , todo : & mut Vec < Repository > ) -> Result < ( ) , Error > {
92+ pub fn submodule_update ( repo : & Repository ) -> anyhow:: Result < ( ) > {
93+ fn _submodule_update (
94+ repo : & Repository ,
95+ todo : & mut Vec < Repository > ,
96+ opts : & mut SubmoduleUpdateOptions < ' _ > ,
97+ ) -> anyhow:: Result < ( ) > {
9498 for mut submodule in repo. submodules ( ) ? {
95- submodule. update ( true , None ) ?;
99+ submodule. update ( true , Some ( opts ) ) ?;
96100 todo. push ( submodule. open ( ) ?) ;
97101 }
98102 Ok ( ( ) )
99103 }
100- let mut repos = Vec :: new ( ) ;
101- _submodule_update ( repo, & mut repos) ?;
102- while let Some ( repo) = repos. pop ( ) {
103- _submodule_update ( & repo, & mut repos) ?;
104- }
105- Ok ( ( ) )
104+
105+ with_fetch_options ( |fetch_opts| {
106+ let mut opts = SubmoduleUpdateOptions :: new ( ) ;
107+ let mut opts = opts. fetch ( fetch_opts) ;
108+ let mut repos = Vec :: new ( ) ;
109+ _submodule_update ( repo, & mut repos, & mut opts) ?;
110+ while let Some ( repo) = repos. pop ( ) {
111+ _submodule_update ( & repo, & mut repos, & mut opts) ?;
112+ }
113+ Ok ( ( ) )
114+ } )
106115}
107116
108117fn resolve_refname ( repo : & Repository , refname : & str ) -> Result < Oid , Error > {
0 commit comments