mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-18 18:08:07 +03:00
Restored a lost API and got everything compiling
This commit is contained in:
parent
bcf608e9e9
commit
ae890212e3
@ -4700,6 +4700,8 @@ impl Project {
|
||||
repos: &Vec<RepositoryEntry>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
debug_assert!(worktree.read(cx).is_local());
|
||||
|
||||
for (_, buffer) in &self.opened_buffers {
|
||||
if let Some(buffer) = buffer.upgrade(cx) {
|
||||
let file = match File::from_dyn(buffer.read(cx).file()) {
|
||||
|
@ -722,19 +722,24 @@ impl LocalWorktree {
|
||||
let fs = self.fs.clone();
|
||||
let snapshot = self.snapshot();
|
||||
|
||||
let mut index_task = None;
|
||||
|
||||
if let Some(repo) = snapshot.repo_for(&path) {
|
||||
let repo_path = repo.work_directory.relativize(&path).unwrap();
|
||||
if let Some(repo) = self.git_repositories.get(&repo.git_dir_entry_id) {
|
||||
let repo = repo.to_owned();
|
||||
index_task = Some(
|
||||
cx.background()
|
||||
.spawn(async move { repo.lock().load_index_text(&repo_path) }),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
cx.spawn(|this, mut cx| async move {
|
||||
let text = fs.load(&abs_path).await?;
|
||||
|
||||
let diff_base = if let Some((work_directory, repo)) = snapshot.repo_for_metadata(&path)
|
||||
{
|
||||
if let Ok(repo_relative) = path.strip_prefix(&work_directory) {
|
||||
let repo_relative = repo_relative.to_owned();
|
||||
cx.background()
|
||||
.spawn(async move { repo.lock().load_index_text(&repo_relative) })
|
||||
.await
|
||||
} else {
|
||||
None
|
||||
}
|
||||
let diff_base = if let Some(index_task) = index_task {
|
||||
index_task.await
|
||||
} else {
|
||||
None
|
||||
};
|
||||
@ -1466,6 +1471,12 @@ impl Snapshot {
|
||||
}
|
||||
|
||||
impl LocalSnapshot {
|
||||
pub(crate) fn repo_for(&self, path: &Path) -> Option<RepositoryEntry> {
|
||||
dbg!(&self.repository_entries)
|
||||
.closest(&RepositoryWorkDirectory(path.into()))
|
||||
.map(|(_, entry)| entry.to_owned())
|
||||
}
|
||||
|
||||
pub(crate) fn repo_for_metadata(
|
||||
&self,
|
||||
path: &Path,
|
||||
@ -3429,37 +3440,27 @@ mod tests {
|
||||
.await;
|
||||
tree.flush_fs_events(cx).await;
|
||||
|
||||
fn entry(key: &RepositoryWorkDirectory, tree: &LocalWorktree) -> RepositoryEntry {
|
||||
tree.repository_entries.get(key).unwrap().to_owned()
|
||||
}
|
||||
|
||||
tree.read_with(cx, |tree, _cx| {
|
||||
let tree = tree.as_local().unwrap();
|
||||
|
||||
assert!(tree.repo_for_metadata("c.txt".as_ref()).is_none());
|
||||
assert!(tree.repo_for("c.txt".as_ref()).is_none());
|
||||
|
||||
let (work_directory, _repo_entry) =
|
||||
tree.repo_for_metadata("dir1/src/b.txt".as_ref()).unwrap();
|
||||
assert_eq!(work_directory.0.as_ref(), Path::new("dir1"));
|
||||
assert_eq!(
|
||||
entry(&work_directory, &tree).git_dir_path.as_ref(),
|
||||
Path::new("dir1/.git")
|
||||
);
|
||||
let entry = tree.repo_for("dir1/src/b.txt".as_ref()).unwrap();
|
||||
assert_eq!(entry.work_directory.0.as_ref(), Path::new("dir1"));
|
||||
assert_eq!(entry.git_dir_path.as_ref(), Path::new("dir1/.git"));
|
||||
|
||||
let _repo = tree
|
||||
.repo_for_metadata("dir1/deps/dep1/src/a.txt".as_ref())
|
||||
.unwrap();
|
||||
assert_eq!(work_directory.deref(), Path::new("dir1/deps/dep1"));
|
||||
let entry = tree.repo_for("dir1/deps/dep1/src/a.txt".as_ref()).unwrap();
|
||||
assert_eq!(entry.work_directory.deref(), Path::new("dir1/deps/dep1"));
|
||||
assert_eq!(
|
||||
entry(&work_directory, &tree).git_dir_path.as_ref(),
|
||||
entry.git_dir_path.as_ref(),
|
||||
Path::new("dir1/deps/dep1/.git"),
|
||||
);
|
||||
});
|
||||
|
||||
let original_scan_id = tree.read_with(cx, |tree, _cx| {
|
||||
let tree = tree.as_local().unwrap();
|
||||
let (key, _) = tree.repo_for_metadata("dir1/src/b.txt".as_ref()).unwrap();
|
||||
entry(&key, &tree).scan_id
|
||||
let entry = tree.repo_for("dir1/src/b.txt".as_ref()).unwrap();
|
||||
entry.scan_id
|
||||
});
|
||||
|
||||
std::fs::write(root.path().join("dir1/.git/random_new_file"), "hello").unwrap();
|
||||
@ -3468,8 +3469,8 @@ mod tests {
|
||||
tree.read_with(cx, |tree, _cx| {
|
||||
let tree = tree.as_local().unwrap();
|
||||
let new_scan_id = {
|
||||
let (key, _) = tree.repo_for_metadata("dir1/src/b.txt".as_ref()).unwrap();
|
||||
entry(&key, &tree).scan_id
|
||||
let entry = tree.repo_for("dir1/src/b.txt".as_ref()).unwrap();
|
||||
entry.scan_id
|
||||
};
|
||||
assert_ne!(
|
||||
original_scan_id, new_scan_id,
|
||||
@ -3483,7 +3484,7 @@ mod tests {
|
||||
tree.read_with(cx, |tree, _cx| {
|
||||
let tree = tree.as_local().unwrap();
|
||||
|
||||
assert!(tree.repo_for_metadata("dir1/src/b.txt".as_ref()).is_none());
|
||||
assert!(tree.repo_for("dir1/src/b.txt".as_ref()).is_none());
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user