From a84d3cb7e9659b57ad3bbca6cc894a46fbf741fd Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Wed, 4 Jun 2025 00:11:41 +0200 Subject: Make integration actually work Add logs Add remote keys for each user --- server/common/src/git.rs | 17 +++++++++++++++++ server/common/src/tests.rs | 2 ++ 2 files changed, 19 insertions(+) (limited to 'server/common/src') diff --git a/server/common/src/git.rs b/server/common/src/git.rs index ac0bdb3..6678db7 100644 --- a/server/common/src/git.rs +++ b/server/common/src/git.rs @@ -49,6 +49,7 @@ pub struct Repository { project_id: Option, socket: Option, githook: Option, + ssh_config: Option, // Lock for any repo task, 90% of all tasks are readers but there are some writers // where nothing else may be done. @@ -138,6 +139,15 @@ impl RepoData { self.config_set(repo, "eyeballs.socket", relative.to_str().unwrap()) .await?; } + if let Some(ssh_config) = repo.ssh_config() { + let relative = diff_paths(ssh_config, repo.path()).unwrap(); + self.config_set( + repo, + "core.sshcommand", + format!("ssh -F {}", relative.to_str().unwrap()).as_str(), + ) + .await?; + } // Handled by pre-receive hook, allow fast forwards for reviews that expect it. self.config_set(repo, "receive.denyNonFastForwards", "false") @@ -454,10 +464,12 @@ impl Repository { remote: Option>, project_id: Option>, githook: Option>, + ssh_config: Option>, ) -> Self { let path = path.into(); let project_id = project_id.map(|x| x.into()); let githook = githook.map(|x| x.into()); + let ssh_config = ssh_config.map(|x| x.into()); let socket: Option; if let Some(project_id) = &project_id { socket = Some( @@ -475,6 +487,7 @@ impl Repository { path, socket, githook, + ssh_config, bare, lock: RwLock::new(RepoData::new()), } @@ -500,6 +513,10 @@ impl Repository { self.githook.as_deref() } + pub fn ssh_config(&self) -> Option<&Path> { + self.ssh_config.as_deref() + } + pub fn is_bare(&self) -> bool { self.bare } diff --git a/server/common/src/tests.rs b/server/common/src/tests.rs index 41f44fe..5a02119 100644 --- a/server/common/src/tests.rs +++ b/server/common/src/tests.rs @@ -59,6 +59,7 @@ async fn git_setup(bare: bool) -> git::Repository { None::, None::, None::, + None::, ); assert_eq!(repo.remote(), None); assert_eq!(repo.project_id(), None); @@ -212,6 +213,7 @@ async fn git_fetch(bare: bool) -> git::Repository { Some(remote.as_str()), None::, None::, + None::, ); assert_eq!(repo.remote(), Some(remote.as_str())); repo.setup().await.unwrap(); -- cgit v1.2.3-70-g09d2