diff --git a/cli/internal/fs/hash.go b/cli/internal/fs/hash.go index 677d62d38cc07b..79905aae6b2c5c 100644 --- a/cli/internal/fs/hash.go +++ b/cli/internal/fs/hash.go @@ -37,7 +37,6 @@ func HashTask(task *hash.TaskHashable) (string, error) { // HashGlobal produces the global hash value to be incorporated in every task hash func HashGlobal(global hash.GlobalHashable) (string, error) { - fmt.Printf("HashGlobal: %+v\n", global) return hash.HashGlobalHashable(&global) } diff --git a/cli/internal/fs/package_json.go b/cli/internal/fs/package_json.go index 3db36a4bc49368..c58f2fe5930648 100644 --- a/cli/internal/fs/package_json.go +++ b/cli/internal/fs/package_json.go @@ -3,7 +3,6 @@ package fs import ( "bytes" "encoding/json" - "fmt" "sort" "sync" @@ -135,10 +134,6 @@ func (p *PackageJSON) SetExternalDeps(externalDeps mapset.Set) error { sort.Sort(lockfile.ByKey(p.TransitiveDeps)) - if p.Name == "my-turborepo" { - fmt.Println(len(p.TransitiveDeps)) - } - hashOfExternalDeps, err := HashLockfilePackages(p.TransitiveDeps) if err != nil { return err diff --git a/crates/turborepo-lib/src/package_graph/builder.rs b/crates/turborepo-lib/src/package_graph/builder.rs index f56d048b9ab950..047e182c72a8e6 100644 --- a/crates/turborepo-lib/src/package_graph/builder.rs +++ b/crates/turborepo-lib/src/package_graph/builder.rs @@ -183,19 +183,12 @@ impl<'a> BuildState<'a, ResolvedPackageManager> { ) -> Result<(), Error> { let relative_json_path = AnchoredSystemPathBuf::relative_path_between(self.repo_root, &package_json_path); -<<<<<<< HEAD let name = WorkspaceName::Other( json.name .clone() .ok_or(Error::PackageJsonMissingName(package_json_path))?, ); -======= - let name = WorkspaceName::Other(json.name.clone().ok_or_else(|| { - Error::PackageJsonMissingName { - path: package_json_path, - } - })?); ->>>>>>> 8c3242ddf (Fixes) + let entry = WorkspaceInfo { package_json: json, package_json_path: relative_json_path, diff --git a/crates/turborepo-lib/src/package_graph/mod.rs b/crates/turborepo-lib/src/package_graph/mod.rs index d4f9d607bd9afb..a45926b300507e 100644 --- a/crates/turborepo-lib/src/package_graph/mod.rs +++ b/crates/turborepo-lib/src/package_graph/mod.rs @@ -15,6 +15,8 @@ mod builder; pub use builder::{Error, PackageGraphBuilder}; +use crate::hash::{LockFilePackages, TurboHash}; + pub struct PackageGraph { workspace_graph: petgraph::Graph, #[allow(dead_code)] @@ -36,6 +38,25 @@ impl WorkspaceInfo { pub fn package_json_path(&self) -> &AnchoredSystemPathBuf { &self.package_json_path } + + pub fn get_external_deps_hash(&self) -> String { + let mut transitive_deps = Vec::with_capacity( + self.transitive_dependencies + .as_ref() + .map_or(0, |deps| deps.len()), + ); + + for dependency in self.transitive_dependencies.iter().flatten() { + transitive_deps.push(dependency.clone()); + } + + transitive_deps.sort_by(|a, b| match a.key.cmp(&b.key) { + std::cmp::Ordering::Equal => a.version.cmp(&b.version), + other => other, + }); + + LockFilePackages(transitive_deps).hash() + } } #[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)] diff --git a/crates/turborepo-lib/src/package_json.rs b/crates/turborepo-lib/src/package_json.rs index e2ca7edb01d479..298d3222249679 100644 --- a/crates/turborepo-lib/src/package_json.rs +++ b/crates/turborepo-lib/src/package_json.rs @@ -1,12 +1,10 @@ -use std::collections::{BTreeMap, HashSet}; +use std::collections::BTreeMap; use anyhow::Result; use serde::{Deserialize, Serialize}; use serde_json::Value; use turbopath::{AbsoluteSystemPath, RelativeUnixPathBuf}; -use crate::hash::{LockFilePackages, TurboHash}; - #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PackageJson { @@ -76,23 +74,6 @@ impl PackageJson { .chain(self.dev_dependencies.iter().flatten()) .chain(self.optional_dependencies.iter().flatten()) } - - pub fn get_external_deps_hash( - &self, - external_deps: HashSet<&turborepo_lockfiles::Package>, - ) -> String { - let mut transitive_deps = Vec::with_capacity(external_deps.len()); - for dependency in external_deps { - transitive_deps.push(dependency.clone()); - } - - transitive_deps.sort_by(|a, b| match a.key.cmp(&b.key) { - std::cmp::Ordering::Equal => a.version.cmp(&b.version), - other => other, - }); - - LockFilePackages(transitive_deps).hash() - } } #[cfg(test)] diff --git a/crates/turborepo-lib/src/run/global_hash.rs b/crates/turborepo-lib/src/run/global_hash.rs index 5a3a9b0dccbf3a..dd26099092b0da 100644 --- a/crates/turborepo-lib/src/run/global_hash.rs +++ b/crates/turborepo-lib/src/run/global_hash.rs @@ -12,7 +12,7 @@ use turborepo_scm::SCM; use crate::{ cli::EnvMode, hash::{GlobalHashable, TurboHash}, - package_json::PackageJson, + package_graph::WorkspaceInfo, package_manager::PackageManager, }; @@ -41,9 +41,8 @@ pub struct GlobalHashableInputs { #[allow(clippy::too_many_arguments)] pub fn get_global_hash_inputs( - root_external_dependencies: HashSet<&turborepo_lockfiles::Package>, + root_workspace: &WorkspaceInfo, root_path: &AbsoluteSystemPath, - root_package_json: &PackageJson, package_manager: &PackageManager, lockfile: Option<&L>, global_file_dependencies: Vec, @@ -107,8 +106,7 @@ pub fn get_global_hash_inputs( } } - let root_external_dependencies_hash = - root_package_json.get_external_deps_hash(root_external_dependencies); + let root_external_dependencies_hash = root_workspace.get_external_deps_hash(); debug!( "rust external deps hash: {}", @@ -169,8 +167,6 @@ impl GlobalHashableInputs { dot_env: self.dot_env, }; - println!("global hashable: {:#?}", global_hashable); - global_hashable.hash() } } diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 77db69a6222f6f..cc5a12265b1507 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -114,9 +114,6 @@ impl Run { // } let env_at_execution_start = EnvironmentVariableMap::infer(); - let root_external_dependencies = - pkg_dep_graph.transitive_external_dependencies(std::iter::once(&WorkspaceName::Root)); - let team_id = self.base.repo_config()?.team_id(); let token = self.base.user_config()?.token(); @@ -180,10 +177,13 @@ impl Run { return Ok(()); } + let root_workspace = pkg_dep_graph + .workspace_info(&WorkspaceName::Root) + .expect("must have root workspace"); + let global_hash_inputs = get_global_hash_inputs( - root_external_dependencies, + root_workspace, &self.base.repo_root, - pkg_dep_graph.root_package_json(), pkg_dep_graph.package_manager(), pkg_dep_graph.lockfile(), // TODO: Fill in these vec![] once turbo.json is ported @@ -232,13 +232,13 @@ impl Run { let root_turbo_json = TurboJson::load(&self.base.repo_root, &root_package_json, is_single_package)?; - let root_external_dependencies = - pkg_dep_graph.transitive_external_dependencies(std::iter::once(&WorkspaceName::Root)); + let root_workspace = pkg_dep_graph + .workspace_info(&WorkspaceName::Root) + .expect("must have root workspace"); let global_hash_inputs = get_global_hash_inputs( - root_external_dependencies, + root_workspace, &self.base.repo_root, - pkg_dep_graph.root_package_json(), pkg_dep_graph.package_manager(), pkg_dep_graph.lockfile(), root_turbo_json.global_deps,