Skip to content

Commit 7f7d9aa

Browse files
sftseLegend-Master
andauthored
Less statics (#14668)
* refactor(tauri-cli): introduce replacement functions * refactor(tauri-cli): apply replacement to remove.rs * refactor(tauri-cli): apply replacement to icon.rs * refactor(tauri-cli): apply replacement to bundle.rs * refactor(tauri-cli): apply replacement to build.rs * refactor(tauri-cli): apply replacement to add.rs * refactor(tauri-cli): apply replacement to dev.rs * refactor(tauri-cli): less controlflow * refactor(tauri-cli): split config loading from locking static * refactor(tauri-cli): remove duplicate checks covered by if let Some(tauri_dir) = tauri_dir tauri_dir.is_some() must be true, otherwise the entire block is not run, so the frontend_dir check is irrelevant * fmt * refactor(tauri-cli): apply replacement to inspect.rs * refactor(tauri-cli): dont use statics for config * refactor(tauri-cli): finish threading directory paths through functions * fix: clippy * fixup CI * refactor(tauri-cli): dont need mutex * refactor(tauri-cli): rescope mutex use to minimal necessary * fix CI, reduce mutex use * fixup PR #14607 * fix: clippy * refactor(tauri-cli): remove ConfigHandle * refactor(tauri-cli): remove more unwraps and panicing functions * refactor(tauri-cli): less mutexes * refactor(tauri-cli): undo mistaken change, address review comment * Split android build to 2 functions * Pass in dirs to migration v1 like the v2 beta * Add change file --------- Co-authored-by: Tony <legendmastertony@gmail.com>
1 parent 7873c4a commit 7f7d9aa

File tree

36 files changed

+683
-759
lines changed

36 files changed

+683
-759
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@tauri-apps/cli": patch:changes
3+
"tauri-cli": patch:changes
4+
---
5+
6+
Refactored internal use of static on config and directory resolvings, no user facing changes, please report any regressions if you encounter any

crates/tauri-cli/src/acl/capability/new.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@ use std::{collections::HashSet, path::PathBuf};
77
use clap::Parser;
88
use tauri_utils::acl::capability::{Capability, PermissionEntry};
99

10-
use crate::{
11-
acl::FileFormat,
12-
error::ErrorExt,
13-
helpers::{app_paths::tauri_dir, prompts},
14-
Result,
15-
};
10+
use crate::{acl::FileFormat, error::ErrorExt, helpers::prompts, Result};
1611

1712
#[derive(Debug, Parser)]
1813
#[clap(about = "Create a new permission file")]
@@ -37,7 +32,7 @@ pub struct Options {
3732
}
3833

3934
pub fn command(options: Options) -> Result<()> {
40-
crate::helpers::app_paths::resolve();
35+
let dirs = crate::helpers::app_paths::resolve_dirs();
4136

4237
let identifier = match options.identifier {
4338
Some(i) => i,
@@ -111,8 +106,7 @@ pub fn command(options: Options) -> Result<()> {
111106
.canonicalize()
112107
.fs_context("failed to canonicalize capability file path", o.clone())?,
113108
None => {
114-
let dir = tauri_dir();
115-
let capabilities_dir = dir.join("capabilities");
109+
let capabilities_dir = dirs.tauri.join("capabilities");
116110
capabilities_dir.join(format!(
117111
"{}.{}",
118112
capability.identifier,

crates/tauri-cli/src/acl/permission/ls.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use clap::Parser;
66

77
use crate::{
88
error::{Context, ErrorExt},
9-
helpers::app_paths::tauri_dir,
109
Result,
1110
};
1211
use colored::Colorize;
@@ -25,9 +24,10 @@ pub struct Options {
2524
}
2625

2726
pub fn command(options: Options) -> Result<()> {
28-
crate::helpers::app_paths::resolve();
27+
let dirs = crate::helpers::app_paths::resolve_dirs();
2928

30-
let acl_manifests_path = tauri_dir()
29+
let acl_manifests_path = dirs
30+
.tauri
3131
.join("gen")
3232
.join("schemas")
3333
.join("acl-manifests.json");

crates/tauri-cli/src/add.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
acl,
1111
error::ErrorExt,
1212
helpers::{
13-
app_paths::{resolve_frontend_dir, tauri_dir},
13+
app_paths::{resolve_frontend_dir, Dirs},
1414
cargo,
1515
npm::PackageManager,
1616
},
@@ -39,11 +39,11 @@ pub struct Options {
3939
}
4040

4141
pub fn command(options: Options) -> Result<()> {
42-
crate::helpers::app_paths::resolve();
43-
run(options)
42+
let dirs = crate::helpers::app_paths::resolve_dirs();
43+
run(options, &dirs)
4444
}
4545

46-
pub fn run(options: Options) -> Result<()> {
46+
pub fn run(options: Options, dirs: &Dirs) -> Result<()> {
4747
let (plugin, version) = options
4848
.plugin
4949
.split_once('@')
@@ -71,7 +71,6 @@ pub fn run(options: Options) -> Result<()> {
7171
}
7272

7373
let frontend_dir = resolve_frontend_dir();
74-
let tauri_dir = tauri_dir();
7574

7675
let target_str = metadata
7776
.desktop_only
@@ -90,7 +89,7 @@ pub fn run(options: Options) -> Result<()> {
9089
branch: options.branch.as_deref(),
9190
rev: options.rev.as_deref(),
9291
tag: options.tag.as_deref(),
93-
cwd: Some(tauri_dir),
92+
cwd: Some(dirs.tauri),
9493
target: target_str,
9594
})?;
9695

@@ -117,7 +116,7 @@ pub fn run(options: Options) -> Result<()> {
117116
(None, None, None, None) => npm_name,
118117
_ => crate::error::bail!("Only one of --tag, --rev and --branch can be specified"),
119118
};
120-
manager.install(&[npm_spec], tauri_dir)?;
119+
manager.install(&[npm_spec], dirs.tauri)?;
121120
}
122121

123122
let _ = acl::permission::add::command(acl::permission::add::Options {
@@ -143,7 +142,10 @@ pub fn run(options: Options) -> Result<()> {
143142
let plugin_init = format!(".plugin(tauri_plugin_{plugin_snake_case}::{plugin_init_fn})");
144143

145144
let re = Regex::new(r"(tauri\s*::\s*Builder\s*::\s*default\(\))(\s*)").unwrap();
146-
for file in [tauri_dir.join("src/main.rs"), tauri_dir.join("src/lib.rs")] {
145+
for file in [
146+
dirs.tauri.join("src/main.rs"),
147+
dirs.tauri.join("src/lib.rs"),
148+
] {
147149
let contents =
148150
std::fs::read_to_string(&file).fs_context("failed to read Rust entry point", file.clone())?;
149151

@@ -166,7 +168,7 @@ pub fn run(options: Options) -> Result<()> {
166168
log::info!("Running `cargo fmt`...");
167169
let _ = Command::new("cargo")
168170
.arg("fmt")
169-
.current_dir(tauri_dir)
171+
.current_dir(dirs.tauri)
170172
.status();
171173
}
172174

crates/tauri-cli/src/build.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use crate::{
77
error::{Context, ErrorExt},
88
helpers::{
99
self,
10-
app_paths::{frontend_dir, tauri_dir},
11-
config::{get as get_config, ConfigMetadata, FrontendDist},
10+
app_paths::Dirs,
11+
config::{get_config, ConfigMetadata, FrontendDist},
1212
},
1313
info::plugins::check_mismatched_packages,
1414
interface::{rust::get_cargo_target_dir, AppInterface, Interface},
@@ -82,7 +82,7 @@ pub struct Options {
8282
}
8383

8484
pub fn command(mut options: Options, verbosity: u8) -> Result<()> {
85-
crate::helpers::app_paths::resolve();
85+
let dirs = crate::helpers::app_paths::resolve_dirs();
8686

8787
if options.no_sign {
8888
log::warn!("--no-sign flag detected: Signing will be skipped.");
@@ -99,42 +99,38 @@ pub fn command(mut options: Options, verbosity: u8) -> Result<()> {
9999
let config = get_config(
100100
target,
101101
&options.config.iter().map(|c| &c.0).collect::<Vec<_>>(),
102+
dirs.tauri,
102103
)?;
103104

104-
let mut interface = AppInterface::new(
105-
config.lock().unwrap().as_ref().unwrap(),
106-
options.target.clone(),
107-
)?;
108-
109-
let config_guard = config.lock().unwrap();
110-
let config_ = config_guard.as_ref().unwrap();
105+
let mut interface = AppInterface::new(&config, options.target.clone(), dirs.tauri)?;
111106

112-
setup(&interface, &mut options, config_, false)?;
107+
setup(&interface, &mut options, &config, false, &dirs)?;
113108

114-
if let Some(minimum_system_version) = &config_.bundle.macos.minimum_system_version {
109+
if let Some(minimum_system_version) = &config.bundle.macos.minimum_system_version {
115110
std::env::set_var("MACOSX_DEPLOYMENT_TARGET", minimum_system_version);
116111
}
117112

118113
let app_settings = interface.app_settings();
119114
let interface_options = options.clone().into();
120115

121-
let out_dir = app_settings.out_dir(&interface_options)?;
116+
let out_dir = app_settings.out_dir(&interface_options, dirs.tauri)?;
122117

123-
let bin_path = interface.build(interface_options)?;
118+
let bin_path = interface.build(interface_options, &dirs)?;
124119

125120
log::info!(action ="Built"; "application at: {}", tauri_utils::display_path(bin_path));
126121

127122
let app_settings = interface.app_settings();
128123

129-
if !options.no_bundle && (config_.bundle.active || options.bundles.is_some()) {
124+
if !options.no_bundle && (config.bundle.active || options.bundles.is_some()) {
130125
crate::bundle::bundle(
131126
&options.into(),
132127
verbosity,
133128
ci,
134129
&interface,
135130
&*app_settings,
136-
config_,
131+
&config,
137132
&out_dir,
133+
&dirs,
138134
)?;
139135
}
140136

@@ -146,21 +142,20 @@ pub fn setup(
146142
options: &mut Options,
147143
config: &ConfigMetadata,
148144
mobile: bool,
145+
dirs: &Dirs,
149146
) -> Result<()> {
150-
let tauri_path = tauri_dir();
151-
152147
// TODO: Maybe optimize this to run in parallel in the future
153148
// see https://github.com/tauri-apps/tauri/pull/13993#discussion_r2280697117
154149
log::info!("Looking up installed tauri packages to check mismatched versions...");
155-
if let Err(error) = check_mismatched_packages(frontend_dir(), tauri_path) {
150+
if let Err(error) = check_mismatched_packages(dirs.frontend, dirs.tauri) {
156151
if options.ignore_version_mismatches {
157152
log::error!("{error}");
158153
} else {
159154
return Err(error);
160155
}
161156
}
162157

163-
set_current_dir(tauri_path).context("failed to set current directory")?;
158+
set_current_dir(dirs.tauri).context("failed to set current directory")?;
164159

165160
let bundle_identifier_source = config
166161
.find_bundle_identifier_overwriter()
@@ -191,7 +186,13 @@ pub fn setup(
191186
}
192187

193188
if let Some(before_build) = config.build.before_build_command.clone() {
194-
helpers::run_hook("beforeBuildCommand", before_build, interface, options.debug)?;
189+
helpers::run_hook(
190+
"beforeBuildCommand",
191+
before_build,
192+
interface,
193+
options.debug,
194+
dirs.frontend,
195+
)?;
195196
}
196197

197198
if let Some(FrontendDist::Directory(web_asset_path)) = &config.build.frontend_dist {
@@ -219,7 +220,7 @@ pub fn setup(
219220

220221
// Issue #13287 - Allow the use of target dir inside frontendDist/distDir
221222
// https://github.com/tauri-apps/tauri/issues/13287
222-
let target_path = get_cargo_target_dir(&options.args)?;
223+
let target_path = get_cargo_target_dir(&options.args, dirs.tauri)?;
223224
let mut out_folders = Vec::new();
224225
if let Ok(web_asset_canonical) = dunce::canonicalize(web_asset_path) {
225226
if let Ok(relative_path) = target_path.strip_prefix(&web_asset_canonical) {

crates/tauri-cli/src/bundle.rs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use crate::{
1616
error::{Context, ErrorExt},
1717
helpers::{
1818
self,
19-
app_paths::tauri_dir,
20-
config::{get as get_config, ConfigMetadata},
19+
app_paths::Dirs,
20+
config::{get_config, ConfigMetadata},
2121
updater_signature,
2222
},
2323
interface::{AppInterface, AppSettings, Interface},
@@ -118,7 +118,7 @@ impl From<crate::build::Options> for Options {
118118
}
119119

120120
pub fn command(options: Options, verbosity: u8) -> crate::Result<()> {
121-
crate::helpers::app_paths::resolve();
121+
let dirs = crate::helpers::app_paths::resolve_dirs();
122122

123123
let ci = options.ci;
124124

@@ -131,36 +131,31 @@ pub fn command(options: Options, verbosity: u8) -> crate::Result<()> {
131131
let config = get_config(
132132
target,
133133
&options.config.iter().map(|c| &c.0).collect::<Vec<_>>(),
134+
dirs.tauri,
134135
)?;
135136

136-
let interface = AppInterface::new(
137-
config.lock().unwrap().as_ref().unwrap(),
138-
options.target.clone(),
139-
)?;
140-
141-
let tauri_path = tauri_dir();
142-
std::env::set_current_dir(tauri_path).context("failed to set current directory")?;
137+
let interface = AppInterface::new(&config, options.target.clone(), dirs.tauri)?;
143138

144-
let config_guard = config.lock().unwrap();
145-
let config_ = config_guard.as_ref().unwrap();
139+
std::env::set_current_dir(dirs.tauri).context("failed to set current directory")?;
146140

147-
if let Some(minimum_system_version) = &config_.bundle.macos.minimum_system_version {
141+
if let Some(minimum_system_version) = &config.bundle.macos.minimum_system_version {
148142
std::env::set_var("MACOSX_DEPLOYMENT_TARGET", minimum_system_version);
149143
}
150144

151145
let app_settings = interface.app_settings();
152146
let interface_options = options.clone().into();
153147

154-
let out_dir = app_settings.out_dir(&interface_options)?;
148+
let out_dir = app_settings.out_dir(&interface_options, dirs.tauri)?;
155149

156150
bundle(
157151
&options,
158152
verbosity,
159153
ci,
160154
&interface,
161155
&*app_settings,
162-
config_,
156+
&config,
163157
&out_dir,
158+
&dirs,
164159
)
165160
}
166161

@@ -173,6 +168,7 @@ pub fn bundle<A: AppSettings>(
173168
app_settings: &A,
174169
config: &ConfigMetadata,
175170
out_dir: &Path,
171+
dirs: &Dirs,
176172
) -> crate::Result<()> {
177173
let package_types: Vec<PackageType> = if let Some(bundles) = &options.bundles {
178174
bundles.iter().map(|bundle| bundle.0).collect::<Vec<_>>()
@@ -198,12 +194,19 @@ pub fn bundle<A: AppSettings>(
198194
before_bundle,
199195
interface,
200196
options.debug,
197+
dirs.frontend,
201198
)?;
202199
}
203200
}
204201

205202
let mut settings = app_settings
206-
.get_bundler_settings(options.clone().into(), config, out_dir, package_types)
203+
.get_bundler_settings(
204+
options.clone().into(),
205+
config,
206+
out_dir,
207+
package_types,
208+
dirs.tauri,
209+
)
207210
.with_context(|| "failed to build bundler settings")?;
208211
settings.set_no_sign(options.no_sign);
209212

0 commit comments

Comments
 (0)