Fix handling of `--system-specs` argument so it happens before `Application::new` (#29240)
Ben Kunkle
created 8 months ago
Fixes issue described in [description of
#28683](https://github.com/zed-industries/zed/issues/28683#issue-2992849891)
Makes sure that the `--system-specs` arg is handled before
`Application::new` is called, so that it can be used even when Zed is
panicking during app initialization (e.g. Failing to create a Vulkan
context in blade)
Release Notes:
- Fixed an issue where the `--system-specs` arg wouldn't work if Zed
panicked during app initialization (e.g. When failing to create a Vulkan
context in blade)
Change summary
crates/release_channel/src/lib.rs | 4 ++--
crates/remote_server/src/unix.rs | 2 +-
crates/zed/src/main.rs | 27 ++++++++++++++-------------
3 files changed, 17 insertions(+), 16 deletions(-)
Detailed changes
@@ -63,8 +63,8 @@ impl Global for GlobalAppVersion {}
pub struct AppVersion;
impl AppVersion {
- /// Initializes the global [`AppVersion`].
- pub fn init(pkg_version: &str) -> SemanticVersion {
+ /// Load the app version from env.
+ pub fn load(pkg_version: &str) -> SemanticVersion {
if let Ok(from_env) = env::var("ZED_APP_VERSION") {
from_env.parse().expect("invalid ZED_APP_VERSION")
} else {
@@ -428,7 +428,7 @@ pub fn execute_run(
let git_hosting_provider_registry = Arc::new(GitHostingProviderRegistry::new());
gpui::Application::headless().run(move |cx| {
settings::init(cx);
- let app_version = AppVersion::init(env!("ZED_PKG_VERSION"));
+ let app_version = AppVersion::load(env!("ZED_PKG_VERSION"));
release_channel::init(app_version, cx);
gpui_tokio::init(cx);
@@ -218,6 +218,20 @@ fn main() {
};
}
+ let app_version = AppVersion::load(env!("CARGO_PKG_VERSION"));
+ let app_commit_sha =
+ option_env!("ZED_COMMIT_SHA").map(|commit_sha| AppCommitSha(commit_sha.to_string()));
+
+ if args.system_specs {
+ let system_specs = feedback::system_specs::SystemSpecs::new_stateless(
+ app_version,
+ app_commit_sha.clone(),
+ *release_channel::RELEASE_CHANNEL,
+ );
+ println!("Zed System Specs (from CLI):\n{}", system_specs);
+ return;
+ }
+
log::info!("========== starting zed ==========");
let app = Application::new().with_assets(Assets);
@@ -226,9 +240,6 @@ fn main() {
let installation_id = app.background_executor().block(installation_id()).ok();
let session_id = Uuid::new_v4().to_string();
let session = app.background_executor().block(Session::new());
- let app_version = AppVersion::init(env!("CARGO_PKG_VERSION"));
- let app_commit_sha =
- option_env!("ZED_COMMIT_SHA").map(|commit_sha| AppCommitSha(commit_sha.to_string()));
reliability::init_panic_hook(
app_version,
@@ -238,16 +249,6 @@ fn main() {
session_id.clone(),
);
- if args.system_specs {
- let system_specs = feedback::system_specs::SystemSpecs::new_stateless(
- app_version,
- app_commit_sha.clone(),
- *release_channel::RELEASE_CHANNEL,
- );
- println!("Zed System Specs (from CLI):\n{}", system_specs);
- return;
- }
-
let (open_listener, mut open_rx) = OpenListener::new();
let failed_single_instance_check =