Skip to content

Commit

Permalink
fix(go): go backend supports versions prefixed with 'v'
Browse files Browse the repository at this point in the history
  • Loading branch information
roele committed Mar 6, 2024
1 parent 0d95fde commit fc0d860
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
17 changes: 15 additions & 2 deletions src/forge/go.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use crate::config::{Config, Settings};

use crate::forge::{Forge, ForgeType};
use crate::install_context::InstallContext;
use crate::plugins::VERSION_V_PREFIX_REGEX;

#[derive(Debug)]
pub struct GoForge {
Expand All @@ -32,7 +33,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 +57,15 @@ impl Forge for GoForge {
let settings = Settings::get();
settings.ensure_experimental("go backend")?;

let version = if VERSION_V_PREFIX_REGEX.is_match(ctx.tv.version.as_str()) {
ctx.tv.version.clone()
} else {
format!("v{}", ctx.tv.version)
};

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
3 changes: 3 additions & 0 deletions src/plugins/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ pub static VERSION_REGEX: Lazy<regex::Regex> = Lazy::new(|| {
.unwrap()
});

pub static VERSION_V_PREFIX_REGEX: Lazy<regex::Regex> =
Lazy::new(|| Regex::new(r"^v(\d+(\.\d+)*([+-.].+)?)$").unwrap());

pub fn get(name: &str) -> Arc<dyn Forge> {
let fa = ForgeArg::new(ForgeType::Asdf, name);
forge::get(&fa)
Expand Down
6 changes: 5 additions & 1 deletion src/toolset/tool_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ use std::path::PathBuf;

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

use crate::cli::args::ForgeArg;
use crate::config::Config;
use crate::forge;
use crate::forge::{AForge, Forge};
use crate::hash::hash_to_str;
use crate::plugins::VERSION_V_PREFIX_REGEX;
use crate::toolset::{ToolVersionOptions, ToolVersionRequest};

/// represents a single version of a tool for a particular plugin
Expand All @@ -33,7 +35,9 @@ impl ToolVersion {
) -> Self {
ToolVersion {
forge: tool.fa().clone(),
version,
version: VERSION_V_PREFIX_REGEX
.replace(&version, |caps: &Captures| format!("{}", &caps[1]))
.to_string(),
request,
opts,
}
Expand Down

0 comments on commit fc0d860

Please sign in to comment.