Skip to content

Commit df06e5e

Browse files
committed
Fix SSH agent authentication not used when cloning submodules
1 parent 8ffd9e9 commit df06e5e

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

RELEASES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# 📝 Release notes
22

3+
## 0.8.5
4+
5+
*Unreleased*
6+
7+
- [Fix SSH agent authentication not used when cloning submodules][todo]
8+
39
## 0.8.4
410

511
*July 8th, 2025*

src/util/git.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::sync::LazyLock as Lazy;
66
use anyhow::Context as ResultExt;
77
use git2::{
88
BranchType, Cred, CredentialType, Error, FetchOptions, Oid, RemoteCallbacks, Repository,
9-
ResetType,
9+
ResetType, SubmoduleUpdateOptions,
1010
};
1111
use 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

108117
fn resolve_refname(repo: &Repository, refname: &str) -> Result<Oid, Error> {

0 commit comments

Comments
 (0)