updated vector_store to handle for removed files

KCaverly created

Change summary

crates/vector_store/src/vector_store.rs | 93 +++++++++++++++-----------
1 file changed, 53 insertions(+), 40 deletions(-)

Detailed changes

crates/vector_store/src/vector_store.rs 🔗

@@ -635,8 +635,6 @@ impl VectorStore {
                 })
                 .await?;
 
-            dbg!(&documents);
-
             this.read_with(&cx, |this, _| {
                 let project_state = if let Some(state) = this.projects.get(&project.downgrade()) {
                     state
@@ -687,6 +685,7 @@ impl VectorStore {
             for change in changes.into_iter() {
                 let change_path = change.0.clone();
                 let absolute_path = worktree.absolutize(&change_path);
+
                 // Skip if git ignored or symlink
                 if let Some(entry) = worktree.entry_for_id(change.1) {
                     if entry.is_ignored || entry.is_symlink || entry.is_external {
@@ -694,46 +693,60 @@ impl VectorStore {
                     }
                 }
 
-                if let Ok(language) = language_registry
-                    .language_for_file(&change_path.to_path_buf(), None)
-                    .await
-                {
-                    if language
-                        .grammar()
-                        .and_then(|grammar| grammar.embedding_config.as_ref())
-                        .is_none()
-                    {
-                        continue;
-                    }
+                match change.2 {
+                    PathChange::Removed => this.update(&mut cx, |this, _| {
+                        this.db_update_tx
+                            .try_send(DbOperation::Delete {
+                                worktree_id: worktree_db_id,
+                                path: absolute_path,
+                            })
+                            .unwrap();
+                    }),
+                    _ => {
+                        if let Ok(language) = language_registry
+                            .language_for_file(&change_path.to_path_buf(), None)
+                            .await
+                        {
+                            if language
+                                .grammar()
+                                .and_then(|grammar| grammar.embedding_config.as_ref())
+                                .is_none()
+                            {
+                                continue;
+                            }
+
+                            let modified_time =
+                                change_path.metadata().log_err()?.modified().log_err()?;
+
+                            let existing_time = file_mtimes.get(&change_path.to_path_buf());
+                            let already_stored = existing_time
+                                .map_or(false, |existing_time| &modified_time != existing_time);
+
+                            if !already_stored {
+                                this.update(&mut cx, |this, _| {
+                                    let reindex_time = modified_time
+                                        + Duration::from_secs(REINDEXING_DELAY_SECONDS);
+
+                                    let project_state =
+                                        this.projects.get_mut(&project.downgrade())?;
+                                    project_state.update_pending_files(
+                                        PendingFile {
+                                            relative_path: change_path.to_path_buf(),
+                                            absolute_path,
+                                            modified_time,
+                                            worktree_db_id,
+                                            language: language.clone(),
+                                        },
+                                        reindex_time,
+                                    );
 
-                    let modified_time = change_path.metadata().log_err()?.modified().log_err()?;
-
-                    let existing_time = file_mtimes.get(&change_path.to_path_buf());
-                    let already_stored = existing_time
-                        .map_or(false, |existing_time| &modified_time != existing_time);
-
-                    if !already_stored {
-                        this.update(&mut cx, |this, _| {
-                            let reindex_time =
-                                modified_time + Duration::from_secs(REINDEXING_DELAY_SECONDS);
-
-                            let project_state = this.projects.get_mut(&project.downgrade())?;
-                            project_state.update_pending_files(
-                                PendingFile {
-                                    relative_path: change_path.to_path_buf(),
-                                    absolute_path,
-                                    modified_time,
-                                    worktree_db_id,
-                                    language: language.clone(),
-                                },
-                                reindex_time,
-                            );
-
-                            for file in project_state.get_outstanding_files() {
-                                this.parsing_files_tx.try_send(file).unwrap();
+                                    for file in project_state.get_outstanding_files() {
+                                        this.parsing_files_tx.try_send(file).unwrap();
+                                    }
+                                    Some(())
+                                });
                             }
-                            Some(())
-                        });
+                        }
                     }
                 }
             }