fixed bug on absolute vs relative path

This commit is contained in:
KCaverly 2023-07-06 17:15:41 -04:00
parent 6f1e988cb9
commit c03dda1a0c

View file

@ -144,12 +144,19 @@ impl ProjectState {
fn update_pending_files(&mut self, pending_file: PendingFile, indexing_time: SystemTime) {
// If Pending File Already Exists, Replace it with the new one
// but keep the old indexing time
if let Some(old_file) = self.pending_files.remove(&pending_file.path.clone()) {
self.pending_files
.insert(pending_file.path.clone(), (pending_file, old_file.1));
if let Some(old_file) = self
.pending_files
.remove(&pending_file.relative_path.clone())
{
self.pending_files.insert(
pending_file.relative_path.clone(),
(pending_file, old_file.1),
);
} else {
self.pending_files
.insert(pending_file.path.clone(), (pending_file, indexing_time));
self.pending_files.insert(
pending_file.relative_path.clone(),
(pending_file, indexing_time),
);
};
}
@ -177,7 +184,8 @@ impl ProjectState {
#[derive(Clone, Debug)]
struct PendingFile {
worktree_db_id: i64,
path: PathBuf,
relative_path: PathBuf,
absolute_path: PathBuf,
language: Arc<Language>,
modified_time: SystemTime,
}
@ -348,13 +356,14 @@ impl VectorStore {
let mut parser = Parser::new();
let mut cursor = QueryCursor::new();
while let Ok(pending_file) = parsing_files_rx.recv().await {
log::info!("Parsing File: {:?}", &pending_file.path);
log::info!("Parsing File: {:?}", &pending_file.relative_path);
if let Some((indexed_file, document_spans)) = Self::index_file(
&mut cursor,
&mut parser,
&fs,
pending_file.language,
pending_file.path.clone(),
pending_file.relative_path.clone(),
pending_file.absolute_path.clone(),
pending_file.modified_time,
)
.await
@ -393,7 +402,8 @@ impl VectorStore {
parser: &mut Parser,
fs: &Arc<dyn Fs>,
language: Arc<Language>,
file_path: PathBuf,
relative_file_path: PathBuf,
absolute_file_path: PathBuf,
mtime: SystemTime,
) -> Result<(IndexedFile, Vec<String>)> {
let grammar = language.grammar().ok_or_else(|| anyhow!("no grammar"))?;
@ -402,7 +412,7 @@ impl VectorStore {
.as_ref()
.ok_or_else(|| anyhow!("no outline query"))?;
let content = fs.load(&file_path).await?;
let content = fs.load(&absolute_file_path).await?;
parser.set_language(grammar.ts_language).unwrap();
let tree = parser
@ -455,7 +465,7 @@ impl VectorStore {
return Ok((
IndexedFile {
path: file_path,
path: relative_file_path,
mtime,
documents,
},
@ -577,7 +587,8 @@ impl VectorStore {
.try_send(PendingFile {
worktree_db_id: db_ids_by_worktree_id
[&worktree.id()],
path: path_buf,
relative_path: path_buf,
absolute_path,
language,
modified_time: file.mtime,
})
@ -666,6 +677,7 @@ impl VectorStore {
smol::block_on(async move {
for change in changes.into_iter() {
let change_path = change.0.clone();
let absolute_path = worktree.read(cx).absolutize(&change_path);
// Skip if git ignored or symlink
if let Some(entry) = worktree.read(cx).entry_for_id(change.1) {
if entry.is_ignored || entry.is_symlink {
@ -716,7 +728,8 @@ impl VectorStore {
if !already_stored {
project_state.update_pending_files(
PendingFile {
path: change_path.to_path_buf(),
relative_path: change_path.to_path_buf(),
absolute_path,
modified_time,
worktree_db_id,
language: language.clone(),