diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-10 00:32:08 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-10 00:32:08 +0900 |
| commit | 8cc1ba8a02c0318b65658f1634de378c780392b9 (patch) | |
| tree | fdd5cb61e488018891a486b25991b87c84220bb8 /crates/mozart-vcs/src/util/svn.rs | |
| parent | 72b2e877c01e67ba7edd37e34ac2eadb7a1c62c4 (diff) | |
| download | php-mozart-8cc1ba8a02c0318b65658f1634de378c780392b9.tar.gz php-mozart-8cc1ba8a02c0318b65658f1634de378c780392b9.tar.zst php-mozart-8cc1ba8a02c0318b65658f1634de378c780392b9.zip | |
refactor(workspace): consolidate crates into mozart-core
Merged mozart-archiver, mozart-autoload, mozart-registry,
mozart-sat-resolver, and mozart-vcs into mozart-core to align
the source layout with Composer's structure.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart-vcs/src/util/svn.rs')
| -rw-r--r-- | crates/mozart-vcs/src/util/svn.rs | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/crates/mozart-vcs/src/util/svn.rs b/crates/mozart-vcs/src/util/svn.rs deleted file mode 100644 index e9a6813..0000000 --- a/crates/mozart-vcs/src/util/svn.rs +++ /dev/null @@ -1,91 +0,0 @@ -use std::path::Path; - -use anyhow::Result; - -use crate::process::{ProcessExecutor, ProcessOutput}; - -/// SVN credentials for authenticated operations. -#[derive(Debug, Clone)] -pub struct SvnCredentials { - pub username: String, - pub password: String, -} - -/// SVN utility for command execution with credential handling. -pub struct SvnUtil { - process: ProcessExecutor, -} - -impl SvnUtil { - pub fn new(process: ProcessExecutor) -> Self { - Self { process } - } - - /// Execute an SVN command with `--non-interactive`. - pub fn execute(&self, args: &[&str], cwd: Option<&Path>) -> Result<ProcessOutput> { - let mut full_args = vec!["svn"]; - full_args.extend_from_slice(args); - full_args.push("--non-interactive"); - self.process.execute_checked(&full_args, cwd) - } - - /// Execute an SVN command with optional credentials, retrying on auth failure. - pub fn execute_with_credentials( - &self, - args: &[&str], - creds: Option<&SvnCredentials>, - cwd: Option<&Path>, - ) -> Result<ProcessOutput> { - let mut full_args = vec!["svn"]; - full_args.extend_from_slice(args); - full_args.push("--non-interactive"); - - let cred_args: Vec<String>; - if let Some(c) = creds { - cred_args = vec![ - "--username".to_string(), - c.username.clone(), - "--password".to_string(), - c.password.clone(), - ]; - for arg in &cred_args { - full_args.push(arg); - } - } - - let full_args_refs: Vec<&str> = full_args.iter().map(|s| &**s).collect(); - - // Retry up to 5 times on auth failure - let max_retries = 5; - let mut last_output = None; - for _ in 0..max_retries { - let output = self.process.execute(&full_args_refs, cwd)?; - if output.status == 0 { - return Ok(output); - } - // Check if it's an auth error (SVN exit code or stderr hint) - if !output.stderr.contains("authorization failed") - && !output.stderr.contains("Could not authenticate") - && !output.stderr.contains("Authentication failed") - { - // Not an auth error, return immediately - last_output = Some(output); - break; - } - last_output = Some(output); - } - - match last_output { - Some(output) if output.status != 0 => { - anyhow::bail!( - "SVN command `{}` failed with exit code {}\nstderr: {}", - full_args_refs.join(" "), - output.status, - output.stderr.trim(), - ); - } - Some(output) => Ok(output), - None => anyhow::bail!("SVN command failed with no output"), - } - } -} |
