aboutsummaryrefslogtreecommitdiff
path: root/src/git/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/git/mod.rs')
-rw-r--r--src/git/mod.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/git/mod.rs b/src/git/mod.rs
new file mode 100644
index 0000000..60d0b46
--- /dev/null
+++ b/src/git/mod.rs
@@ -0,0 +1,27 @@
+pub fn git_credentials_callback(
+ _user: &str,
+ user_from_url: Option<&str>,
+ _cred: git2::CredentialType,
+) -> Result<git2::Cred, git2::Error> {
+ if let Some(user) = user_from_url {
+ git2::Cred::ssh_key_from_agent(user)
+ } else {
+ Err(git2::Error::from_str("no url username found"))
+ }
+}
+
+pub fn callbacks<'g>() -> git2::RemoteCallbacks<'g> {
+ let mut callbacks = git2::RemoteCallbacks::new();
+ callbacks.credentials(git_credentials_callback);
+
+ callbacks
+}
+
+#[tracing::instrument(level = "trace")]
+pub fn fetch_options<'g>() -> git2::FetchOptions<'g> {
+ let mut opts = git2::FetchOptions::new();
+ opts.remote_callbacks(callbacks());
+ opts.download_tags(git2::AutotagOption::All);
+
+ opts
+}