diff --git a/crates/turborepo-repository/src/inference.rs b/crates/turborepo-repository/src/inference.rs index e44c1a1fc2627..4cab4c0f12921 100644 --- a/crates/turborepo-repository/src/inference.rs +++ b/crates/turborepo-repository/src/inference.rs @@ -366,11 +366,9 @@ mod test { .unwrap(); let repo_state = RepoState::infer(&package_foo).unwrap(); - // These assertions are the buggy behavior - assert_eq!(repo_state.root, package_foo); - assert_eq!(repo_state.mode, RepoMode::SinglePackage); - // TODO: the following assertions are the correct behavior - // assert_eq!(repo_state.root, monorepo_root); - // assert_eq!(repo_state.mode, RepoMode::MultiPackage); + // With our fix for leading ./ in workspace globs, we now expect the correct + // behavior + assert_eq!(repo_state.root, monorepo_root); + assert_eq!(repo_state.mode, RepoMode::MultiPackage); } } diff --git a/crates/turborepo-repository/src/workspaces.rs b/crates/turborepo-repository/src/workspaces.rs index 2f8b381d81c34..6997bb79e1aba 100644 --- a/crates/turborepo-repository/src/workspaces.rs +++ b/crates/turborepo-repository/src/workspaces.rs @@ -80,7 +80,10 @@ impl WorkspaceGlobs { // take ownership of the inputs let raw_inclusions: Vec = inclusions .into_iter() - .map(|s| s.into()) + .map(|s| { + let s_str: String = s.into(); + s_str.strip_prefix("./").unwrap_or(&s_str).to_string() + }) .collect::>(); let package_json_inclusions = raw_inclusions .iter() @@ -175,4 +178,17 @@ mod test { &["scripts/package.json", "packages/**/package.json"] ); } + + #[test] + fn test_workspace_globs_leading_dot_slash() { + let globs = WorkspaceGlobs::new(vec!["./packages/foo", "./packages/bar"], vec![]).unwrap(); + assert_eq!( + &globs + .package_json_inclusions + .iter() + .map(|i| i.as_str()) + .collect::>(), + &["packages/foo/package.json", "packages/bar/package.json"] + ); + } }