Skip to content

Commit bea7030

Browse files
committed
fix up for 8e8c5fa never showing file tree
1 parent 8e8c5fa commit bea7030

File tree

2 files changed

+53
-18
lines changed

2 files changed

+53
-18
lines changed

asyncgit/src/treefiles.rs

+14-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,17 @@ use crate::{
66
};
77
use std::sync::{Arc, Mutex};
88

9+
///
10+
pub struct FileTreeResult {
11+
///
12+
pub commit: CommitId,
13+
///
14+
pub result: Result<Vec<TreeFile>>,
15+
}
16+
917
enum JobState {
1018
Request { commit: CommitId, repo: RepoPath },
11-
Response(Result<Vec<TreeFile>>),
19+
Response(FileTreeResult),
1220
}
1321

1422
///
@@ -30,7 +38,7 @@ impl AsyncTreeFilesJob {
3038
}
3139

3240
///
33-
pub fn result(&self) -> Option<Result<Vec<TreeFile>>> {
41+
pub fn result(&self) -> Option<FileTreeResult> {
3442
if let Ok(mut state) = self.state.lock() {
3543
if let Some(state) = state.take() {
3644
return match state {
@@ -60,7 +68,10 @@ impl AsyncJob for AsyncTreeFilesJob {
6068
std::thread::sleep(
6169
std::time::Duration::from_secs(2),
6270
);
63-
JobState::Response(files)
71+
JobState::Response(FileTreeResult {
72+
commit,
73+
result: files,
74+
})
6475
}
6576
JobState::Response(result) => {
6677
JobState::Response(result)

src/components/revision_files.rs

+39-15
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,7 @@ impl RevisionFilesComponent {
9999
if !same_id {
100100
self.files = None;
101101

102-
self.async_treefiles.spawn(AsyncTreeFilesJob::new(
103-
self.repo.borrow().clone(),
104-
commit,
105-
));
102+
self.request_files(commit);
106103

107104
self.revision =
108105
Some(get_commit_info(&self.repo.borrow(), &commit)?);
@@ -129,17 +126,36 @@ impl RevisionFilesComponent {
129126
ev,
130127
AsyncNotification::Git(AsyncGitNotification::TreeFiles)
131128
) {
132-
if let Some(last) = self.async_treefiles.take_last() {
133-
if let Some(Ok(last)) = last.result() {
134-
let filenames: Vec<&Path> = last
135-
.iter()
136-
.map(|f| f.path.as_path())
137-
.collect();
138-
self.tree =
139-
FileTree::new(&filenames, &BTreeSet::new())?;
140-
self.tree.collapse_but_root();
141-
142-
self.files = Some(last);
129+
self.refresh_files()?;
130+
}
131+
132+
Ok(())
133+
}
134+
135+
fn refresh_files(&mut self) -> Result<(), anyhow::Error> {
136+
if let Some(last) = self.async_treefiles.take_last() {
137+
if let Some(result) = last.result() {
138+
if self
139+
.revision
140+
.as_ref()
141+
.map(|commit| commit.id == result.commit)
142+
.unwrap_or_default()
143+
{
144+
if let Ok(last) = result.result {
145+
let filenames: Vec<&Path> = last
146+
.iter()
147+
.map(|f| f.path.as_path())
148+
.collect();
149+
self.tree = FileTree::new(
150+
&filenames,
151+
&BTreeSet::new(),
152+
)?;
153+
self.tree.collapse_but_root();
154+
155+
self.files = Some(last);
156+
}
157+
} else if let Some(rev) = &self.revision {
158+
self.request_files(rev.id);
143159
}
144160
}
145161
}
@@ -364,6 +380,13 @@ impl RevisionFilesComponent {
364380

365381
title
366382
}
383+
384+
fn request_files(&mut self, commit: CommitId) {
385+
self.async_treefiles.spawn(AsyncTreeFilesJob::new(
386+
self.repo.borrow().clone(),
387+
commit,
388+
));
389+
}
367390
}
368391

369392
impl DrawableComponent for RevisionFilesComponent {
@@ -514,6 +537,7 @@ impl Component for RevisionFilesComponent {
514537

515538
fn show(&mut self) -> Result<()> {
516539
self.visible = true;
540+
self.refresh_files()?;
517541
Ok(())
518542
}
519543
}

0 commit comments

Comments
 (0)