Bump collab min version (#9521)

Conrad Irwin created

We made a change last week to allow creating files with names. This
means some files have null saved_mtime, which old versions of zed panic
on.

A fix is available in 0.126.3 and above

Release Notes:


- N/A

Change summary

crates/collab/src/rpc.rs                 | 15 +--------------
crates/collab/src/rpc/connection_pool.rs |  9 +++------
crates/util/src/semantic_version.rs      |  8 ++++++++
crates/util/src/util.rs                  |  2 +-
4 files changed, 13 insertions(+), 21 deletions(-)

Detailed changes

crates/collab/src/rpc.rs 🔗

@@ -909,7 +909,7 @@ pub async fn handle_websocket_request(
             .into_response();
     };
 
-    if !version.is_supported() {
+    if !version.can_collaborate() {
         return (
             StatusCode::UPGRADE_REQUIRED,
             "client must be upgraded".to_string(),
@@ -1347,19 +1347,6 @@ async fn set_room_participant_role(
     let user_id = UserId::from_proto(request.user_id);
     let role = ChannelRole::from(request.role());
 
-    if role == ChannelRole::Talker {
-        let pool = session.connection_pool().await;
-
-        for connection in pool.user_connections(user_id) {
-            if !connection.zed_version.supports_talker_role() {
-                Err(anyhow!(
-                    "This user is on zed {} which does not support unmute",
-                    connection.zed_version
-                ))?;
-            }
-        }
-    }
-
     let (live_kit_room, can_publish) = {
         let room = session
             .db()

crates/collab/src/rpc/connection_pool.rs 🔗

@@ -4,7 +4,7 @@ use collections::{BTreeMap, HashMap, HashSet};
 use rpc::ConnectionId;
 use serde::Serialize;
 use tracing::instrument;
-use util::SemanticVersion;
+use util::{semver, SemanticVersion};
 
 #[derive(Default, Serialize)]
 pub struct ConnectionPool {
@@ -29,11 +29,8 @@ impl fmt::Display for ZedVersion {
 }
 
 impl ZedVersion {
-    pub fn is_supported(&self) -> bool {
-        self.0 != SemanticVersion::new(0, 123, 0)
-    }
-    pub fn supports_talker_role(&self) -> bool {
-        self.0 >= SemanticVersion::new(0, 125, 0)
+    pub fn can_collaborate(&self) -> bool {
+        self.0 >= semver(0, 127, 3) || (self.0 >= semver(0, 126, 3) && self.0 < semver(0, 127, 0))
     }
 }
 

crates/util/src/semantic_version.rs 🔗

@@ -14,6 +14,14 @@ pub struct SemanticVersion {
     pub patch: usize,
 }
 
+pub fn semver(major: usize, minor: usize, patch: usize) -> SemanticVersion {
+    SemanticVersion {
+        major,
+        minor,
+        patch,
+    }
+}
+
 impl SemanticVersion {
     pub fn new(major: usize, minor: usize, patch: usize) -> Self {
         Self {

crates/util/src/util.rs 🔗

@@ -10,7 +10,7 @@ pub mod test;
 use futures::Future;
 use lazy_static::lazy_static;
 use rand::{seq::SliceRandom, Rng};
-pub use semantic_version::SemanticVersion;
+pub use semantic_version::*;
 use std::{
     borrow::Cow,
     cmp::{self, Ordering},