From dc3e297c56d67932041a6d06988c90a6fd4cbe58 Mon Sep 17 00:00:00 2001 From: Illia Kripaka Date: Thu, 3 Sep 2026 18:07:26 +0300 Subject: [PATCH 1/2] install: add branch option resolution in deps installation --- crates/build/src/config/dependency.rs | 14 +++++++++----- crates/build/src/error.rs | 4 ++-- crates/build/src/resolver.rs | 7 ++++--- crates/cli/assets/Simplex.default.toml | 2 +- crates/cli/src/commands/install.rs | 3 +++ 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/crates/build/src/config/dependency.rs b/crates/build/src/config/dependency.rs index 9de32e3..271f783 100644 --- a/crates/build/src/config/dependency.rs +++ b/crates/build/src/config/dependency.rs @@ -31,6 +31,7 @@ pub enum Dependency { pub enum GitRef { Rev(String), Tag(String), + Branch(String), } #[derive(Deserialize, Default)] @@ -51,6 +52,8 @@ struct RawDependency { rev: Option, /// The specific tag to download (only applicable if `git` is provided). tag: Option, + /// The specific branch to download (only applicable if `branch` is provided) + branch: Option, } impl DependencyConfig { @@ -144,17 +147,18 @@ impl RawDependency { (Some(_), Some(_)) => Err(DependencyValidationError::Conflicting(name.into())), (None, None) => Err(DependencyValidationError::Missing(name.into())), (Some(p), None) => { - if self.rev.is_some() || self.tag.is_some() { + if self.rev.is_some() || self.tag.is_some() || self.branch.is_some() { return Err(DependencyValidationError::PathWithGitField(name.into())); } Ok(Dependency::Path(p)) } (None, Some(url)) => { - let reference = match (self.rev, self.tag) { - (None, None) => None, - (Some(v), None) => Some(GitRef::Rev(v)), - (None, Some(t)) => Some(GitRef::Tag(t)), + let reference = match (self.rev, self.tag, self.branch) { + (None, None, None) => None, + (Some(v), None, None) => Some(GitRef::Rev(v)), + (None, Some(t), None) => Some(GitRef::Tag(t)), + (None, None, Some(t)) => Some(GitRef::Branch(t)), _ => return Err(DependencyValidationError::ConflictingGitRef(name.into())), }; diff --git a/crates/build/src/error.rs b/crates/build/src/error.rs index 8b6ce53..6080ce5 100644 --- a/crates/build/src/error.rs +++ b/crates/build/src/error.rs @@ -15,10 +15,10 @@ pub enum DependencyValidationError { #[error("Invalid dependency '{0}': cannot specify both 'path' and 'git', choose one")] Conflicting(String), - #[error("Invalid dependency '{0}': `path` cannot be combined with git-only fields (rev/tag)")] + #[error("Invalid dependency '{0}': `path` cannot be combined with git-only fields (rev/tag/branch)")] PathWithGitField(String), - #[error("Invalid dependency '{0}': only one of `rev`, `tag` may be set")] + #[error("Invalid dependency '{0}': only one of `rev`, `tag`, `branch` may be set")] ConflictingGitRef(String), } diff --git a/crates/build/src/resolver.rs b/crates/build/src/resolver.rs index b5a5c85..d39d42a 100644 --- a/crates/build/src/resolver.rs +++ b/crates/build/src/resolver.rs @@ -113,9 +113,10 @@ impl ArtifactsResolver { let repo_name = clean_url.split('/').next_back()?; let tag = match reference { - Some(GitRef::Rev(rev)) => rev.as_str(), - Some(GitRef::Tag(tag)) => tag.as_str(), - None => "HEAD", + Some(GitRef::Rev(rev)) => format!("rev={rev}"), + Some(GitRef::Tag(tag)) => format!("tag={tag}"), + Some(GitRef::Branch(branch)) => format!("branch={branch}"), + None => "HEAD".into(), }; let url = format!("{url}@{tag}"); diff --git a/crates/cli/assets/Simplex.default.toml b/crates/cli/assets/Simplex.default.toml index 5ab8f8b..a82e912 100644 --- a/crates/cli/assets/Simplex.default.toml +++ b/crates/cli/assets/Simplex.default.toml @@ -6,7 +6,7 @@ # out_dir = "./src/artifacts" # [dependencies] -# some_dep = { git = "", path = "", = "" } +# some_dep = { git = "", path = "", = "" } # [regtest] # mnemonic = "exist carry drive collect lend cereal occur much tiger just involve mean" diff --git a/crates/cli/src/commands/install.rs b/crates/cli/src/commands/install.rs index b8b0cd9..fa03636 100644 --- a/crates/cli/src/commands/install.rs +++ b/crates/cli/src/commands/install.rs @@ -115,6 +115,9 @@ impl Install { execute_git(&["clone", url, target_str])?; execute_git(&["-C", target_str, "checkout", rev.as_str()])?; } + Some(GitRef::Branch(branch)) => { + execute_git(&["clone", "-b", branch, url, target_str])?; + } None => { execute_git(&["clone", "--depth", "1", url, target_str])?; } From 227fe9161db6101102ed4a9df44203161d4a333c Mon Sep 17 00:00:00 2001 From: Illia Kripaka Date: Mon, 7 Sep 2026 14:42:49 +0300 Subject: [PATCH 2/2] refactor: apply comment changes --- crates/build/src/config/dependency.rs | 2 +- crates/cli/src/commands/install.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/build/src/config/dependency.rs b/crates/build/src/config/dependency.rs index 271f783..bd31a48 100644 --- a/crates/build/src/config/dependency.rs +++ b/crates/build/src/config/dependency.rs @@ -158,7 +158,7 @@ impl RawDependency { (None, None, None) => None, (Some(v), None, None) => Some(GitRef::Rev(v)), (None, Some(t), None) => Some(GitRef::Tag(t)), - (None, None, Some(t)) => Some(GitRef::Branch(t)), + (None, None, Some(b)) => Some(GitRef::Branch(b)), _ => return Err(DependencyValidationError::ConflictingGitRef(name.into())), }; diff --git a/crates/cli/src/commands/install.rs b/crates/cli/src/commands/install.rs index fa03636..dedf7a9 100644 --- a/crates/cli/src/commands/install.rs +++ b/crates/cli/src/commands/install.rs @@ -116,7 +116,7 @@ impl Install { execute_git(&["-C", target_str, "checkout", rev.as_str()])?; } Some(GitRef::Branch(branch)) => { - execute_git(&["clone", "-b", branch, url, target_str])?; + execute_git(&["clone", "--depth", "1", "--branch", branch.as_str(), url, target_str])?; } None => { execute_git(&["clone", "--depth", "1", url, target_str])?;