Use shortened SHA when displaying version to install (#31281)
This PR uses a shortened SHA when displaying the nightly version to install in the update status, for nicer tooltip formatting. Release Notes: - N/A
This commit is contained in:
parent
14d9a4189f
commit
3a1053bf0c
10 changed files with 78 additions and 35 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -14,6 +14,7 @@ dependencies = [
|
||||||
"gpui",
|
"gpui",
|
||||||
"language",
|
"language",
|
||||||
"project",
|
"project",
|
||||||
|
"release_channel",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"ui",
|
"ui",
|
||||||
"util",
|
"util",
|
||||||
|
|
|
@ -24,8 +24,9 @@ project.workspace = true
|
||||||
smallvec.workspace = true
|
smallvec.workspace = true
|
||||||
ui.workspace = true
|
ui.workspace = true
|
||||||
util.workspace = true
|
util.workspace = true
|
||||||
workspace.workspace = true
|
|
||||||
workspace-hack.workspace = true
|
workspace-hack.workspace = true
|
||||||
|
workspace.workspace = true
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
editor = { workspace = true, features = ["test-support"] }
|
editor = { workspace = true, features = ["test-support"] }
|
||||||
|
release_channel.workspace = true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use auto_update::{AutoUpdateStatus, AutoUpdater, DismissErrorMessage};
|
use auto_update::{AutoUpdateStatus, AutoUpdater, DismissErrorMessage, VersionCheckType};
|
||||||
use editor::Editor;
|
use editor::Editor;
|
||||||
use extension_host::ExtensionStore;
|
use extension_host::ExtensionStore;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
|
@ -508,14 +508,7 @@ impl ActivityIndicator {
|
||||||
};
|
};
|
||||||
move |_, _, cx| workspace::reload(&reload, cx)
|
move |_, _, cx| workspace::reload(&reload, cx)
|
||||||
})),
|
})),
|
||||||
tooltip_message: Some(format!("Install version: {}", {
|
tooltip_message: Some(Self::install_version_tooltip_message(&version)),
|
||||||
match version {
|
|
||||||
auto_update::VersionCheckType::Sha(sha) => sha.to_string(),
|
|
||||||
auto_update::VersionCheckType::Semantic(semantic_version) => {
|
|
||||||
semantic_version.to_string()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})),
|
|
||||||
}),
|
}),
|
||||||
AutoUpdateStatus::Errored => Some(Content {
|
AutoUpdateStatus::Errored => Some(Content {
|
||||||
icon: Some(
|
icon: Some(
|
||||||
|
@ -555,6 +548,17 @@ impl ActivityIndicator {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn install_version_tooltip_message(version: &VersionCheckType) -> String {
|
||||||
|
format!("Install version: {}", {
|
||||||
|
match version {
|
||||||
|
auto_update::VersionCheckType::Sha(sha) => format!("{}…", sha.short()),
|
||||||
|
auto_update::VersionCheckType::Semantic(semantic_version) => {
|
||||||
|
semantic_version.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn toggle_language_server_work_context_menu(
|
fn toggle_language_server_work_context_menu(
|
||||||
&mut self,
|
&mut self,
|
||||||
window: &mut Window,
|
window: &mut Window,
|
||||||
|
@ -686,3 +690,26 @@ impl StatusItemView for ActivityIndicator {
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use gpui::SemanticVersion;
|
||||||
|
use release_channel::AppCommitSha;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_install_version_tooltip_message() {
|
||||||
|
let message = ActivityIndicator::install_version_tooltip_message(
|
||||||
|
&VersionCheckType::Semantic(SemanticVersion::new(1, 0, 0)),
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(message, "Install version: 1.0.0");
|
||||||
|
|
||||||
|
let message = ActivityIndicator::install_version_tooltip_message(&VersionCheckType::Sha(
|
||||||
|
AppCommitSha::new("14d9a4189f058d8736339b06ff2340101eaea5af".to_string()),
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(message, "Install version: 14d9a41…");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct UpdateRequestBody {
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum VersionCheckType {
|
pub enum VersionCheckType {
|
||||||
Sha(String),
|
Sha(AppCommitSha),
|
||||||
Semantic(SemanticVersion),
|
Semantic(SemanticVersion),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -510,7 +510,7 @@ impl AutoUpdater {
|
||||||
let fetched_release_data =
|
let fetched_release_data =
|
||||||
Self::get_latest_release(&this, "zed", OS, ARCH, release_channel, &mut cx).await?;
|
Self::get_latest_release(&this, "zed", OS, ARCH, release_channel, &mut cx).await?;
|
||||||
let fetched_version = fetched_release_data.clone().version;
|
let fetched_version = fetched_release_data.clone().version;
|
||||||
let app_commit_sha = cx.update(|cx| AppCommitSha::try_global(cx).map(|sha| sha.0));
|
let app_commit_sha = cx.update(|cx| AppCommitSha::try_global(cx).map(|sha| sha.full()));
|
||||||
let newer_version = Self::check_for_newer_version(
|
let newer_version = Self::check_for_newer_version(
|
||||||
*RELEASE_CHANNEL,
|
*RELEASE_CHANNEL,
|
||||||
app_commit_sha,
|
app_commit_sha,
|
||||||
|
@ -569,9 +569,9 @@ impl AutoUpdater {
|
||||||
if let AutoUpdateStatus::Updated { version, .. } = status {
|
if let AutoUpdateStatus::Updated { version, .. } = status {
|
||||||
match version {
|
match version {
|
||||||
VersionCheckType::Sha(cached_version) => {
|
VersionCheckType::Sha(cached_version) => {
|
||||||
let should_download = fetched_version != cached_version;
|
let should_download = fetched_version != cached_version.full();
|
||||||
let newer_version =
|
let newer_version = should_download
|
||||||
should_download.then(|| VersionCheckType::Sha(fetched_version));
|
.then(|| VersionCheckType::Sha(AppCommitSha::new(fetched_version)));
|
||||||
return Ok(newer_version);
|
return Ok(newer_version);
|
||||||
}
|
}
|
||||||
VersionCheckType::Semantic(cached_version) => {
|
VersionCheckType::Semantic(cached_version) => {
|
||||||
|
@ -590,7 +590,8 @@ impl AutoUpdater {
|
||||||
.flatten()
|
.flatten()
|
||||||
.map(|sha| fetched_version != sha)
|
.map(|sha| fetched_version != sha)
|
||||||
.unwrap_or(true);
|
.unwrap_or(true);
|
||||||
let newer_version = should_download.then(|| VersionCheckType::Sha(fetched_version));
|
let newer_version = should_download
|
||||||
|
.then(|| VersionCheckType::Sha(AppCommitSha::new(fetched_version)));
|
||||||
Ok(newer_version)
|
Ok(newer_version)
|
||||||
}
|
}
|
||||||
_ => Self::check_for_newer_version_non_nightly(
|
_ => Self::check_for_newer_version_non_nightly(
|
||||||
|
@ -1041,7 +1042,7 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
newer_version.unwrap(),
|
newer_version.unwrap(),
|
||||||
Some(VersionCheckType::Sha(fetched_sha))
|
Some(VersionCheckType::Sha(AppCommitSha::new(fetched_sha)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1052,7 +1053,7 @@ mod tests {
|
||||||
let installed_version = SemanticVersion::new(1, 0, 0);
|
let installed_version = SemanticVersion::new(1, 0, 0);
|
||||||
let status = AutoUpdateStatus::Updated {
|
let status = AutoUpdateStatus::Updated {
|
||||||
binary_path: PathBuf::new(),
|
binary_path: PathBuf::new(),
|
||||||
version: VersionCheckType::Sha("b".to_string()),
|
version: VersionCheckType::Sha(AppCommitSha::new("b".to_string())),
|
||||||
};
|
};
|
||||||
let fetched_sha = "b".to_string();
|
let fetched_sha = "b".to_string();
|
||||||
|
|
||||||
|
@ -1074,7 +1075,7 @@ mod tests {
|
||||||
let installed_version = SemanticVersion::new(1, 0, 0);
|
let installed_version = SemanticVersion::new(1, 0, 0);
|
||||||
let status = AutoUpdateStatus::Updated {
|
let status = AutoUpdateStatus::Updated {
|
||||||
binary_path: PathBuf::new(),
|
binary_path: PathBuf::new(),
|
||||||
version: VersionCheckType::Sha("b".to_string()),
|
version: VersionCheckType::Sha(AppCommitSha::new("b".to_string())),
|
||||||
};
|
};
|
||||||
let fetched_sha = "c".to_string();
|
let fetched_sha = "c".to_string();
|
||||||
|
|
||||||
|
@ -1088,7 +1089,7 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
newer_version.unwrap(),
|
newer_version.unwrap(),
|
||||||
Some(VersionCheckType::Sha(fetched_sha))
|
Some(VersionCheckType::Sha(AppCommitSha::new(fetched_sha)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1110,7 +1111,7 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
newer_version.unwrap(),
|
newer_version.unwrap(),
|
||||||
Some(VersionCheckType::Sha(fetched_sha))
|
Some(VersionCheckType::Sha(AppCommitSha::new(fetched_sha)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1122,7 +1123,7 @@ mod tests {
|
||||||
let installed_version = SemanticVersion::new(1, 0, 0);
|
let installed_version = SemanticVersion::new(1, 0, 0);
|
||||||
let status = AutoUpdateStatus::Updated {
|
let status = AutoUpdateStatus::Updated {
|
||||||
binary_path: PathBuf::new(),
|
binary_path: PathBuf::new(),
|
||||||
version: VersionCheckType::Sha("b".to_string()),
|
version: VersionCheckType::Sha(AppCommitSha::new("b".to_string())),
|
||||||
};
|
};
|
||||||
let fetched_sha = "b".to_string();
|
let fetched_sha = "b".to_string();
|
||||||
|
|
||||||
|
@ -1145,7 +1146,7 @@ mod tests {
|
||||||
let installed_version = SemanticVersion::new(1, 0, 0);
|
let installed_version = SemanticVersion::new(1, 0, 0);
|
||||||
let status = AutoUpdateStatus::Updated {
|
let status = AutoUpdateStatus::Updated {
|
||||||
binary_path: PathBuf::new(),
|
binary_path: PathBuf::new(),
|
||||||
version: VersionCheckType::Sha("b".to_string()),
|
version: VersionCheckType::Sha(AppCommitSha::new("b".to_string())),
|
||||||
};
|
};
|
||||||
let fetched_sha = "c".to_string();
|
let fetched_sha = "c".to_string();
|
||||||
|
|
||||||
|
@ -1159,7 +1160,7 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
newer_version.unwrap(),
|
newer_version.unwrap(),
|
||||||
Some(VersionCheckType::Sha(fetched_sha))
|
Some(VersionCheckType::Sha(AppCommitSha::new(fetched_sha)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ impl SystemSpecs {
|
||||||
let architecture = env::consts::ARCH;
|
let architecture = env::consts::ARCH;
|
||||||
let commit_sha = match release_channel {
|
let commit_sha = match release_channel {
|
||||||
ReleaseChannel::Dev | ReleaseChannel::Nightly => {
|
ReleaseChannel::Dev | ReleaseChannel::Nightly => {
|
||||||
AppCommitSha::try_global(cx).map(|sha| sha.0.clone())
|
AppCommitSha::try_global(cx).map(|sha| sha.full().clone())
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
@ -70,9 +70,7 @@ impl SystemSpecs {
|
||||||
let memory = system.total_memory();
|
let memory = system.total_memory();
|
||||||
let architecture = env::consts::ARCH;
|
let architecture = env::consts::ARCH;
|
||||||
let commit_sha = match release_channel {
|
let commit_sha = match release_channel {
|
||||||
ReleaseChannel::Dev | ReleaseChannel::Nightly => {
|
ReleaseChannel::Dev | ReleaseChannel::Nightly => app_commit_sha.map(|sha| sha.full()),
|
||||||
app_commit_sha.map(|sha| sha.0.clone())
|
|
||||||
}
|
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -35,14 +35,19 @@ pub fn app_identifier() -> &'static str {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The Git commit SHA that Zed was built at.
|
/// The Git commit SHA that Zed was built at.
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Eq, Debug, PartialEq)]
|
||||||
pub struct AppCommitSha(pub String);
|
pub struct AppCommitSha(String);
|
||||||
|
|
||||||
struct GlobalAppCommitSha(AppCommitSha);
|
struct GlobalAppCommitSha(AppCommitSha);
|
||||||
|
|
||||||
impl Global for GlobalAppCommitSha {}
|
impl Global for GlobalAppCommitSha {}
|
||||||
|
|
||||||
impl AppCommitSha {
|
impl AppCommitSha {
|
||||||
|
/// Creates a new [`AppCommitSha`].
|
||||||
|
pub fn new(sha: String) -> Self {
|
||||||
|
AppCommitSha(sha)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the global [`AppCommitSha`], if one is set.
|
/// Returns the global [`AppCommitSha`], if one is set.
|
||||||
pub fn try_global(cx: &App) -> Option<AppCommitSha> {
|
pub fn try_global(cx: &App) -> Option<AppCommitSha> {
|
||||||
cx.try_global::<GlobalAppCommitSha>()
|
cx.try_global::<GlobalAppCommitSha>()
|
||||||
|
@ -53,6 +58,16 @@ impl AppCommitSha {
|
||||||
pub fn set_global(sha: AppCommitSha, cx: &mut App) {
|
pub fn set_global(sha: AppCommitSha, cx: &mut App) {
|
||||||
cx.set_global(GlobalAppCommitSha(sha))
|
cx.set_global(GlobalAppCommitSha(sha))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the full commit SHA.
|
||||||
|
pub fn full(&self) -> String {
|
||||||
|
self.0.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the short (7 character) commit SHA.
|
||||||
|
pub fn short(&self) -> String {
|
||||||
|
self.0.chars().take(7).collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GlobalAppVersion(SemanticVersion);
|
struct GlobalAppVersion(SemanticVersion);
|
||||||
|
|
|
@ -1702,7 +1702,7 @@ impl SshRemoteConnection {
|
||||||
) -> Result<PathBuf> {
|
) -> Result<PathBuf> {
|
||||||
let version_str = match release_channel {
|
let version_str = match release_channel {
|
||||||
ReleaseChannel::Nightly => {
|
ReleaseChannel::Nightly => {
|
||||||
let commit = commit.map(|s| s.0.to_string()).unwrap_or_default();
|
let commit = commit.map(|s| s.full()).unwrap_or_default();
|
||||||
|
|
||||||
format!("{}-{}", version, commit)
|
format!("{}-{}", version, commit)
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,7 +217,7 @@ fn main() {
|
||||||
|
|
||||||
let app_version = AppVersion::load(env!("CARGO_PKG_VERSION"));
|
let app_version = AppVersion::load(env!("CARGO_PKG_VERSION"));
|
||||||
let app_commit_sha =
|
let app_commit_sha =
|
||||||
option_env!("ZED_COMMIT_SHA").map(|commit_sha| AppCommitSha(commit_sha.to_string()));
|
option_env!("ZED_COMMIT_SHA").map(|commit_sha| AppCommitSha::new(commit_sha.to_string()));
|
||||||
|
|
||||||
if args.system_specs {
|
if args.system_specs {
|
||||||
let system_specs = feedback::system_specs::SystemSpecs::new_stateless(
|
let system_specs = feedback::system_specs::SystemSpecs::new_stateless(
|
||||||
|
|
|
@ -65,7 +65,7 @@ pub fn init_panic_hook(
|
||||||
Some(commit_sha) => format!(
|
Some(commit_sha) => format!(
|
||||||
"https://github.com/zed-industries/zed/blob/{}/src/{}#L{} \
|
"https://github.com/zed-industries/zed/blob/{}/src/{}#L{} \
|
||||||
(may not be uploaded, line may be incorrect if files modified)\n",
|
(may not be uploaded, line may be incorrect if files modified)\n",
|
||||||
commit_sha.0,
|
commit_sha.full(),
|
||||||
location.file(),
|
location.file(),
|
||||||
location.line()
|
location.line()
|
||||||
),
|
),
|
||||||
|
@ -114,7 +114,7 @@ pub fn init_panic_hook(
|
||||||
line: location.line(),
|
line: location.line(),
|
||||||
}),
|
}),
|
||||||
app_version: app_version.to_string(),
|
app_version: app_version.to_string(),
|
||||||
app_commit_sha: app_commit_sha.as_ref().map(|sha| sha.0.clone()),
|
app_commit_sha: app_commit_sha.as_ref().map(|sha| sha.full()),
|
||||||
release_channel: RELEASE_CHANNEL.dev_name().into(),
|
release_channel: RELEASE_CHANNEL.dev_name().into(),
|
||||||
target: env!("TARGET").to_owned().into(),
|
target: env!("TARGET").to_owned().into(),
|
||||||
os_name: telemetry::os_name(),
|
os_name: telemetry::os_name(),
|
||||||
|
|
|
@ -940,7 +940,7 @@ fn about(
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
let message = format!("{release_channel} {version} {debug}");
|
let message = format!("{release_channel} {version} {debug}");
|
||||||
let detail = AppCommitSha::try_global(cx).map(|sha| sha.0.clone());
|
let detail = AppCommitSha::try_global(cx).map(|sha| sha.full());
|
||||||
|
|
||||||
let prompt = window.prompt(PromptLevel::Info, &message, detail.as_deref(), &["OK"], cx);
|
let prompt = window.prompt(PromptLevel::Info, &message, detail.as_deref(), &["OK"], cx);
|
||||||
cx.foreground_executor()
|
cx.foreground_executor()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue