Fix proto migration

Anthony Eid created

Change summary

crates/project/src/git_store.rs | 23 +++++++++++++++++++----
crates/proto/proto/git.proto    |  2 +-
2 files changed, 20 insertions(+), 5 deletions(-)

Detailed changes

crates/project/src/git_store.rs 🔗

@@ -2414,9 +2414,12 @@ impl GitStore {
         let repository_id = RepositoryId::from_proto(envelope.payload.repository_id);
         let repository_handle = Self::repository_for_request(&this, repository_id, &mut cx)?;
         let directory = PathBuf::from(envelope.payload.directory);
-        let start_point = match envelope.payload.name {
-            Some(name) => CreateWorktreeStartPoint::Branched { name },
-            None => CreateWorktreeStartPoint::Detached,
+        let start_point = if envelope.payload.name.is_empty() {
+            CreateWorktreeStartPoint::Detached
+        } else {
+            CreateWorktreeStartPoint::Branched {
+                name: envelope.payload.name,
+            }
         };
         let commit = envelope.payload.commit;
 
@@ -6007,6 +6010,17 @@ impl Repository {
         path: PathBuf,
         commit: Option<String>,
     ) -> oneshot::Receiver<Result<()>> {
+        if matches!(
+            &start_point,
+            CreateWorktreeStartPoint::Branched { name } if name.is_empty()
+        ) {
+            let (sender, receiver) = oneshot::channel();
+            sender
+                .send(Err(anyhow!("branch name cannot be empty")))
+                .ok();
+            return receiver;
+        }
+
         let id = self.id;
         let message = match &start_point {
             CreateWorktreeStartPoint::Detached => "git worktree add (detached)".into(),
@@ -6020,6 +6034,7 @@ impl Repository {
                 CreateWorktreeStartPoint::Detached => None,
                 CreateWorktreeStartPoint::Branched { name } => Some(name),
             };
+            let remote_name = branch_name.clone().unwrap_or_default();
 
             match repo {
                 RepositoryState::Local(LocalRepositoryState { backend, .. }) => {
@@ -6030,7 +6045,7 @@ impl Repository {
                         .request(proto::GitCreateWorktree {
                             project_id: project_id.0,
                             repository_id: id.to_proto(),
-                            name: branch_name,
+                            name: remote_name,
                             directory: path.to_string_lossy().to_string(),
                             commit,
                         })

crates/proto/proto/git.proto 🔗

@@ -591,7 +591,7 @@ message Worktree {
 message GitCreateWorktree {
   uint64 project_id = 1;
   uint64 repository_id = 2;
-  optional string name = 3;
+  string name = 3;
   string directory = 4;
   optional string commit = 5;
 }