diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2024-08-30 10:05:41 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2024-08-30 10:09:46 +0100 |
| commit | f735aeb69942546b4d6c2ae1156d20db2edb24f3 (patch) | |
| tree | 122b060ce96394a0c2c6b81a2630bb9b77f09970 | |
| parent | 23c5aadae9b4dc53f00e58f9b0728048c45843a8 (diff) | |
fix(remote): add auth for ssh `list` and `fetch`
as authentication is always required if clone url is ssh
| -rw-r--r-- | src/git_remote_helper.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/git_remote_helper.rs b/src/git_remote_helper.rs index 4d34850..c624857 100644 --- a/src/git_remote_helper.rs +++ b/src/git_remote_helper.rs | |||
| @@ -305,8 +305,14 @@ fn list_from_remote( | |||
| 305 | git_repo: &Repo, | 305 | git_repo: &Repo, |
| 306 | git_server_remote_url: &str, | 306 | git_server_remote_url: &str, |
| 307 | ) -> Result<HashMap<String, String>> { | 307 | ) -> Result<HashMap<String, String>> { |
| 308 | let git_config = git_repo.git_repo.config()?; | ||
| 309 | |||
| 308 | let mut git_server_remote = git_repo.git_repo.remote_anonymous(git_server_remote_url)?; | 310 | let mut git_server_remote = git_repo.git_repo.remote_anonymous(git_server_remote_url)?; |
| 309 | git_server_remote.connect(git2::Direction::Fetch)?; | 311 | // authentication may be required |
| 312 | let auth = GitAuthenticator::default(); | ||
| 313 | let mut remote_callbacks = git2::RemoteCallbacks::new(); | ||
| 314 | remote_callbacks.credentials(auth.credentials(&git_config)); | ||
| 315 | git_server_remote.connect_auth(git2::Direction::Fetch, Some(remote_callbacks), None)?; | ||
| 310 | let mut state = HashMap::new(); | 316 | let mut state = HashMap::new(); |
| 311 | for head in git_server_remote.list()? { | 317 | for head in git_server_remote.list()? { |
| 312 | if let Some(symbolic_reference) = head.symref_target() { | 318 | if let Some(symbolic_reference) = head.symref_target() { |
| @@ -560,9 +566,16 @@ fn fetch_from_git_server( | |||
| 560 | oids: &[String], | 566 | oids: &[String], |
| 561 | git_server_url: &str, | 567 | git_server_url: &str, |
| 562 | ) -> Result<()> { | 568 | ) -> Result<()> { |
| 569 | let git_config = git_repo.config()?; | ||
| 570 | |||
| 563 | let mut git_server_remote = git_repo.remote_anonymous(git_server_url)?; | 571 | let mut git_server_remote = git_repo.remote_anonymous(git_server_url)?; |
| 564 | git_server_remote.connect(git2::Direction::Fetch)?; | 572 | // authentication may be required (and will be requird if clone url is ssh) |
| 565 | git_server_remote.download(oids, None)?; | 573 | let auth = GitAuthenticator::default(); |
| 574 | let mut fetch_options = git2::FetchOptions::new(); | ||
| 575 | let mut remote_callbacks = git2::RemoteCallbacks::new(); | ||
| 576 | remote_callbacks.credentials(auth.credentials(&git_config)); | ||
| 577 | fetch_options.remote_callbacks(remote_callbacks); | ||
| 578 | git_server_remote.download(oids, Some(&mut fetch_options))?; | ||
| 566 | git_server_remote.disconnect()?; | 579 | git_server_remote.disconnect()?; |
| 567 | Ok(()) | 580 | Ok(()) |
| 568 | } | 581 | } |