Skip to content

Commit

Permalink
fix(go): go backend supports versions prefixed with 'v' (#1753)
Browse files Browse the repository at this point in the history
* fix(go): go backend supports versions prefixed with 'v'

* fix(go): use regex macro

* fix(go): prevent clashes with Git hashes
  • Loading branch information
roele authored Mar 15, 2024
1 parent b7a9067 commit 668acc3
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
18 changes: 16 additions & 2 deletions src/forge/go.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,13 @@ impl Forge for GoForge {
let res = cmd!("go", "list", "-m", "-versions", "-json", cur_mod_path).read();
if let Ok(raw) = res {
let res = serde_json::from_str::<GoModInfo>(&raw);
if let Ok(mod_info) = res {
if let Ok(mut mod_info) = res {
// remove the leading v from the versions
mod_info.versions = mod_info
.versions
.into_iter()
.map(|v| v.trim_start_matches('v').to_string())
.collect();
return Ok(mod_info.versions);
}
};
Expand All @@ -50,9 +56,17 @@ impl Forge for GoForge {
let settings = Settings::get();
settings.ensure_experimental("go backend")?;

// if the (semantic) version has no v prefix, add it
// we allow max. 6 digits for the major version to prevent clashes with Git commit hashes
let version = if regex!(r"^\d{1,6}(\.\d+)*([+-.].+)?$").is_match(&ctx.tv.version) {
format!("v{}", ctx.tv.version)
} else {
ctx.tv.version.clone()
};

CmdLineRunner::new("go")
.arg("install")
.arg(&format!("{}@{}", self.name(), ctx.tv.version))
.arg(&format!("{}@{}", self.name(), version))
.with_pr(ctx.pr.as_ref())
.envs(config.env()?)
.env("GOBIN", ctx.tv.install_path().join("bin"))
Expand Down
5 changes: 4 additions & 1 deletion src/toolset/tool_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use std::path::PathBuf;

use console::style;
use eyre::Result;
use regex::Captures;
use versions::{Chunk, Version};

use crate::cli::args::ForgeArg;
Expand Down Expand Up @@ -33,7 +34,9 @@ impl ToolVersion {
) -> Self {
ToolVersion {
forge: tool.fa().clone(),
version,
version: regex!(r"^v(\d+(\.\d+)*([+-.].+)?)$")
.replace(&version, |caps: &Captures| format!("{}", &caps[1]))
.to_string(),
request,
opts,
}
Expand Down

0 comments on commit 668acc3

Please sign in to comment.