fix: install dependencies of packages in x command

This commit is contained in:
daimond113 2024-11-26 12:50:14 +01:00
parent 15d6655889
commit b5b3257cac
No known key found for this signature in database
GPG key ID: 3A8ECE51328B513C
7 changed files with 59 additions and 18 deletions

View file

@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Make `includes` use glob patterns by @daimond113
- Use symlinks for workspace dependencies to not require reinstalling by @daimond113
### Fixed
- Install dependencies of packages in `x` command
## [0.5.0-rc.12] - 2024-11-22
### Added
- Support fallback Wally registries by @daimond113

View file

@ -1,7 +1,8 @@
use crate::cli::{config::read_config, VersionedPackageName};
use crate::cli::{config::read_config, progress_bar, VersionedPackageName};
use anyhow::Context;
use clap::Args;
use fs_err::tokio as fs;
use indicatif::MultiProgress;
use pesde::{
linking::generator::generate_bin_linking_module,
manifest::target::TargetKind,
@ -31,7 +32,12 @@ pub struct ExecuteCommand {
}
impl ExecuteCommand {
pub async fn run(self, project: Project, reqwest: reqwest::Client) -> anyhow::Result<()> {
pub async fn run(
self,
project: Project,
multi: MultiProgress,
reqwest: reqwest::Client,
) -> anyhow::Result<()> {
let index = match self.index {
Some(index) => Some(index),
None => read_config().await.ok().map(|c| c.default_index),
@ -77,24 +83,54 @@ impl ExecuteCommand {
log::info!("found package {}@{version}", pkg_ref.name);
let tmp_dir = project.cas_dir().join(".tmp");
fs::create_dir_all(&tmp_dir)
.await
.context("failed to create temporary directory")?;
let tempdir =
tempfile::tempdir_in(tmp_dir).context("failed to create temporary directory")?;
let project = Project::new(
tempdir.path(),
None::<std::path::PathBuf>,
project.data_dir(),
project.cas_dir(),
project.auth_config().clone(),
);
let (fs, target) = source
.download(&pkg_ref, &project, &reqwest)
.await
.context("failed to download package")?;
let bin_path = target.bin_path().context("package has no binary export")?;
let tmp_dir = project.cas_dir().join(".tmp");
fs::create_dir_all(&tmp_dir)
.await
.context("failed to create temporary directory")?;
let tempdir =
tempfile::tempdir_in(tmp_dir).context("failed to create temporary directory")?;
fs.write_to(tempdir.path(), project.cas_dir(), true)
.await
.context("failed to write package contents")?;
let mut refreshed_sources = HashSet::new();
let graph = project
.dependency_graph(None, &mut refreshed_sources, true)
.await
.context("failed to build dependency graph")?;
let rx = project
.download_graph(&graph, &mut refreshed_sources, &reqwest, true, true)
.await
.context("failed to download dependencies")?
.0;
progress_bar(
graph.values().map(|versions| versions.len() as u64).sum(),
rx,
&multi,
"📥 ".to_string(),
"downloading dependencies".to_string(),
"downloaded dependencies".to_string(),
)
.await?;
let mut caller =
tempfile::NamedTempFile::new_in(tempdir.path()).context("failed to create tempfile")?;
caller

View file

@ -195,7 +195,7 @@ impl InstallCommand {
println!("{} 📦 building dependency graph", job(2));
let graph = project
.dependency_graph(old_graph.as_ref(), &mut refreshed_sources)
.dependency_graph(old_graph.as_ref(), &mut refreshed_sources, false)
.await
.context("failed to build dependency graph")?;

View file

@ -96,7 +96,7 @@ impl Subcommand {
Subcommand::Add(add) => add.run(project).await,
Subcommand::Update(update) => update.run(project, multi, reqwest).await,
Subcommand::Outdated(outdated) => outdated.run(project).await,
Subcommand::Execute(execute) => execute.run(project, reqwest).await,
Subcommand::Execute(execute) => execute.run(project, multi, reqwest).await,
}
}
}

View file

@ -230,9 +230,10 @@ info: otherwise, the file was deemed unnecessary, if you don't understand why, p
);
}
if roblox_target.as_mut().is_some_and(|build_files| {
build_files.insert(first_part.to_string())
}) {
if roblox_target
.as_mut()
.is_some_and(|build_files| build_files.insert(first_part.to_string()))
{
println!(
"{}: {name} was not in build files, adding {first_part}",
"warn".yellow().bold()

View file

@ -31,7 +31,7 @@ impl UpdateCommand {
);
let graph = project
.dependency_graph(None, &mut refreshed_sources)
.dependency_graph(None, &mut refreshed_sources, false)
.await
.context("failed to build dependency graph")?;

View file

@ -19,6 +19,7 @@ impl Project {
&self,
previous_graph: Option<&DependencyGraph>,
refreshed_sources: &mut HashSet<PackageSources>,
manifest_transformed: bool,
) -> Result<DependencyGraph, Box<errors::DependencyGraphError>> {
let manifest = self
.deser_manifest()
@ -139,7 +140,7 @@ impl Project {
);
let source = match &specifier {
DependencySpecifiers::Pesde(specifier) => {
let index_url = if depth == 0 || overridden {
let index_url = if !manifest_transformed && (depth == 0 || overridden) {
let index_name = specifier.index.as_deref().unwrap_or(DEFAULT_INDEX_NAME);
manifest
@ -163,7 +164,7 @@ impl Project {
}
#[cfg(feature = "wally-compat")]
DependencySpecifiers::Wally(specifier) => {
let index_url = if depth == 0 || overridden {
let index_url = if !manifest_transformed && (depth == 0 || overridden) {
let index_name = specifier.index.as_deref().unwrap_or(DEFAULT_INDEX_NAME);
manifest