Skip to content

Commit 1953cda

Browse files
author
Greg Soltis
authored
chore(Turborepo): Remote CommandBase from Run (#7360)
### Description - `Run` no longer requires a `CommandBase` instance, although the constructor still takes one. ### Testing Instructions Existing test suite Closes TURBO-2335 --------- Co-authored-by: Greg Soltis <Greg Soltis>
1 parent 0b86c9b commit 1953cda

File tree

2 files changed

+44
-41
lines changed

2 files changed

+44
-41
lines changed

crates/turborepo-lib/src/config.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -607,9 +607,8 @@ mod test {
607607
use turbopath::AbsoluteSystemPathBuf;
608608

609609
use crate::config::{
610-
get_env_var_config, get_override_env_var_config, ConfigurationOptions, RawTurboJson,
611-
ResolvedConfigurationOptions, TurborepoConfigBuilder, DEFAULT_API_URL, DEFAULT_LOGIN_URL,
612-
DEFAULT_TIMEOUT,
610+
get_env_var_config, get_override_env_var_config, ConfigurationOptions,
611+
TurborepoConfigBuilder, DEFAULT_API_URL, DEFAULT_LOGIN_URL, DEFAULT_TIMEOUT,
613612
};
614613

615614
#[test]

crates/turborepo-lib/src/run/mod.rs

+42-38
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use chrono::{DateTime, Local};
2222
use itertools::Itertools;
2323
use rayon::iter::ParallelBridge;
2424
use tracing::debug;
25-
use turbopath::AnchoredSystemPath;
25+
use turbopath::{AbsoluteSystemPathBuf, AnchoredSystemPath};
2626
use turborepo_analytics::{start_analytics, AnalyticsHandle, AnalyticsSender};
2727
use turborepo_api_client::{APIAuth, APIClient};
2828
use turborepo_cache::{AsyncCache, RemoteCacheOpts};
@@ -39,7 +39,7 @@ use turborepo_telemetry::events::{
3939
repo::{RepoEventBuilder, RepoType},
4040
EventBuilder,
4141
};
42-
use turborepo_ui::{cprint, cprintln, ColorSelector, BOLD_GREY, GREY};
42+
use turborepo_ui::{cprint, cprintln, ColorSelector, BOLD_GREY, GREY, UI};
4343
#[cfg(feature = "daemon-package-discovery")]
4444
use {
4545
crate::run::package_discovery::DaemonPackageDiscovery,
@@ -67,10 +67,12 @@ use crate::{
6767
};
6868

6969
pub struct Run {
70-
base: CommandBase,
7170
processes: ProcessManager,
7271
opts: Opts,
7372
api_auth: Option<APIAuth>,
73+
repo_root: AbsoluteSystemPathBuf,
74+
ui: UI,
75+
version: &'static str,
7476
}
7577

7678
impl Run {
@@ -98,11 +100,15 @@ impl Run {
98100
if opts.run_opts.experimental_space_id.is_none() {
99101
opts.run_opts.experimental_space_id = config.spaces_id().map(|s| s.to_owned());
100102
}
103+
let version = base.version();
104+
let CommandBase { repo_root, ui, .. } = base;
101105
Ok(Self {
102-
base,
103106
processes,
104107
opts,
105108
api_auth,
109+
repo_root,
110+
ui,
111+
version,
106112
})
107113
}
108114

@@ -114,10 +120,6 @@ impl Run {
114120
});
115121
}
116122

117-
fn targets(&self) -> &[String] {
118-
self.base.args().get_tasks()
119-
}
120-
121123
fn initialize_analytics(
122124
api_auth: Option<APIAuth>,
123125
api_client: APIClient,
@@ -132,30 +134,30 @@ impl Run {
132134
fn print_run_prelude(&self, filtered_pkgs: &HashSet<WorkspaceName>) {
133135
let targets_list = self.opts.run_opts.tasks.join(", ");
134136
if self.opts.run_opts.single_package {
135-
cprint!(self.base.ui, GREY, "{}", "• Running");
136-
cprint!(self.base.ui, BOLD_GREY, " {}\n", targets_list);
137+
cprint!(self.ui, GREY, "{}", "• Running");
138+
cprint!(self.ui, BOLD_GREY, " {}\n", targets_list);
137139
} else {
138140
let mut packages = filtered_pkgs
139141
.iter()
140142
.map(|workspace_name| workspace_name.to_string())
141143
.collect::<Vec<String>>();
142144
packages.sort();
143145
cprintln!(
144-
self.base.ui,
146+
self.ui,
145147
GREY,
146148
"• Packages in scope: {}",
147149
packages.join(", ")
148150
);
149-
cprint!(self.base.ui, GREY, "{} ", "• Running");
150-
cprint!(self.base.ui, BOLD_GREY, "{}", targets_list);
151-
cprint!(self.base.ui, GREY, " in {} packages\n", filtered_pkgs.len());
151+
cprint!(self.ui, GREY, "{} ", "• Running");
152+
cprint!(self.ui, BOLD_GREY, "{}", targets_list);
153+
cprint!(self.ui, GREY, " in {} packages\n", filtered_pkgs.len());
152154
}
153155

154156
let use_http_cache = !self.opts.cache_opts.skip_remote;
155157
if use_http_cache {
156-
cprintln!(self.base.ui, GREY, "• Remote caching enabled");
158+
cprintln!(self.ui, GREY, "• Remote caching enabled");
157159
} else {
158-
cprintln!(self.base.ui, GREY, "• Remote caching disabled");
160+
cprintln!(self.ui, GREY, "• Remote caching disabled");
159161
}
160162
}
161163

@@ -210,14 +212,14 @@ impl Run {
210212
telemetry: CommandEventBuilder,
211213
) -> Result<i32, Error> {
212214
let scm = {
213-
let repo_root = self.base.repo_root.clone();
215+
let repo_root = self.repo_root.clone();
214216
tokio::task::spawn_blocking(move || SCM::new(&repo_root))
215217
};
216-
let package_json_path = self.base.repo_root.join_component("package.json");
218+
let package_json_path = self.repo_root.join_component("package.json");
217219
let root_package_json = PackageJson::load(&package_json_path)?;
218220
let run_telemetry = GenericEventBuilder::new().with_parent(&telemetry);
219221
let repo_telemetry =
220-
RepoEventBuilder::new(&self.base.repo_root.to_string()).with_parent(&telemetry);
222+
RepoEventBuilder::new(&self.repo_root.to_string()).with_parent(&telemetry);
221223

222224
// Pulled from initAnalyticsClient in run.go
223225
let is_linked = turborepo_api_client::is_linked(&self.api_auth);
@@ -252,7 +254,7 @@ impl Run {
252254
let can_start_server = true;
253255
let can_kill_server = true;
254256
let connector =
255-
DaemonConnector::new(can_start_server, can_kill_server, &self.base.repo_root);
257+
DaemonConnector::new(can_start_server, can_kill_server, &self.repo_root);
256258
match (connector.connect().await, self.opts.run_opts.daemon) {
257259
(Ok(client), _) => {
258260
run_telemetry.track_daemon_init(DaemonInitStatus::Started);
@@ -280,7 +282,7 @@ impl Run {
280282
};
281283

282284
let mut pkg_dep_graph = {
283-
let builder = PackageGraph::builder(&self.base.repo_root, root_package_json.clone())
285+
let builder = PackageGraph::builder(&self.repo_root, root_package_json.clone())
284286
.with_single_package_mode(self.opts.run_opts.single_package);
285287

286288
#[cfg(feature = "daemon-package-discovery")]
@@ -292,7 +294,7 @@ impl Run {
292294
(
293295
Some(
294296
LocalPackageDiscoveryBuilder::new(
295-
self.base.repo_root.clone(),
297+
self.repo_root.clone(),
296298
None,
297299
Some(root_package_json.clone()),
298300
)
@@ -319,18 +321,18 @@ impl Run {
319321
let scm = scm.await.expect("detecting scm panicked");
320322
let async_cache = AsyncCache::new(
321323
&self.opts.cache_opts,
322-
&self.base.repo_root,
324+
&self.repo_root,
323325
api_client.clone(),
324326
self.api_auth.clone(),
325327
analytics_sender,
326328
)?;
327329

328330
// restore config from task access trace if it's enabled
329-
let task_access = TaskAccess::new(self.base.repo_root.clone(), async_cache.clone(), &scm);
331+
let task_access = TaskAccess::new(self.repo_root.clone(), async_cache.clone(), &scm);
330332
task_access.restore_config().await;
331333

332334
let root_turbo_json = TurboJson::load(
333-
&self.base.repo_root,
335+
&self.repo_root,
334336
AnchoredSystemPath::empty(),
335337
&root_package_json,
336338
is_single_package,
@@ -341,13 +343,13 @@ impl Run {
341343
let filtered_pkgs = {
342344
let (mut filtered_pkgs, is_all_packages) = scope::resolve_packages(
343345
&self.opts.scope_opts,
344-
&self.base.repo_root,
346+
&self.repo_root,
345347
&pkg_dep_graph,
346348
&scm,
347349
)?;
348350

349351
if is_all_packages {
350-
for target in self.targets() {
352+
for target in self.opts.run_opts.tasks.iter() {
351353
let mut task_name = TaskName::from(target.as_str());
352354
// If it's not a package task, we convert to a root task
353355
if !task_name.is_package_task() {
@@ -382,7 +384,7 @@ impl Run {
382384

383385
let mut global_hash_inputs = get_global_hash_inputs(
384386
root_external_dependencies_hash.as_deref(),
385-
&self.base.repo_root,
387+
&self.repo_root,
386388
pkg_dep_graph.package_manager(),
387389
pkg_dep_graph.lockfile(),
388390
&root_turbo_json.global_deps,
@@ -403,11 +405,11 @@ impl Run {
403405

404406
let runcache = Arc::new(RunCache::new(
405407
async_cache,
406-
&self.base.repo_root,
408+
&self.repo_root,
407409
&self.opts.runcache_opts,
408410
color_selector,
409411
daemon,
410-
self.base.ui,
412+
self.ui,
411413
self.opts.run_opts.dry_run.is_some(),
412414
));
413415
if let Some(subscriber) = signal_handler.subscribe() {
@@ -433,7 +435,7 @@ impl Run {
433435
engine.tasks().par_bridge(),
434436
workspaces,
435437
engine.task_definitions(),
436-
&self.base.repo_root,
438+
&self.repo_root,
437439
&run_telemetry,
438440
)?;
439441

@@ -444,11 +446,13 @@ impl Run {
444446

445447
if let Some(graph_opts) = &self.opts.run_opts.graph {
446448
graph_visualizer::write_graph(
447-
self.base.ui,
449+
self.ui,
448450
graph_opts,
449451
&engine,
450452
self.opts.run_opts.single_package,
451-
self.base.cwd(),
453+
// Note that cwd used to be pulled from CommandBase, which had it set
454+
// as the repo root.
455+
&self.repo_root,
452456
)?;
453457
return Ok(0);
454458
}
@@ -471,8 +475,8 @@ impl Run {
471475
self.opts.synthesize_command(),
472476
self.opts.scope_opts.pkg_inference_root.as_deref(),
473477
&env_at_execution_start,
474-
&self.base.repo_root,
475-
self.base.version(),
478+
&self.repo_root,
479+
self.version,
476480
self.opts.run_opts.experimental_space_id.clone(),
477481
api_client,
478482
self.api_auth.clone(),
@@ -490,10 +494,10 @@ impl Run {
490494
&env_at_execution_start,
491495
&global_hash,
492496
global_env_mode,
493-
self.base.ui,
497+
self.ui,
494498
false,
495499
self.processes.clone(),
496-
&self.base.repo_root,
500+
&self.repo_root,
497501
global_env,
498502
);
499503

@@ -544,7 +548,7 @@ impl Run {
544548
filtered_pkgs: &HashSet<WorkspaceName>,
545549
) -> Result<Engine, Error> {
546550
let engine = EngineBuilder::new(
547-
&self.base.repo_root,
551+
&self.repo_root,
548552
pkg_dep_graph,
549553
self.opts.run_opts.single_package,
550554
)

0 commit comments

Comments
 (0)