Check for rsync before downloading updates (#19392)

Peter Tripp created

Change summary

Cargo.lock                            | 1 +
crates/auto_update/Cargo.toml         | 1 +
crates/auto_update/src/auto_update.rs | 7 +++++++
3 files changed, 9 insertions(+)

Detailed changes

Cargo.lock 🔗

@@ -1009,6 +1009,7 @@ dependencies = [
  "smol",
  "tempfile",
  "util",
+ "which 6.0.3",
  "workspace",
 ]
 

crates/auto_update/Cargo.toml 🔗

@@ -32,4 +32,5 @@ settings.workspace = true
 smol.workspace = true
 tempfile.workspace = true
 util.workspace = true
+which.workspace = true
 workspace.workspace = true

crates/auto_update/src/auto_update.rs 🔗

@@ -33,6 +33,7 @@ use std::{
 };
 use update_notification::UpdateNotification;
 use util::ResultExt;
+use which::which;
 use workspace::notifications::NotificationId;
 use workspace::Workspace;
 
@@ -560,6 +561,12 @@ impl AutoUpdater {
             "linux" => Ok("zed.tar.gz"),
             _ => Err(anyhow!("not supported: {:?}", OS)),
         }?;
+
+        anyhow::ensure!(
+            which("rsync").is_ok(),
+            "Aborting. Could not find rsync which is required for auto-updates."
+        );
+
         let downloaded_asset = temp_dir.path().join(filename);
         download_release(&downloaded_asset, release, client, &cx).await?;