mirror of
https://github.com/extrawurst/gitui.git
synced 2024-12-28 03:22:51 +03:00
fix up for 8e8c5fa
never showing file tree
This commit is contained in:
parent
8e8c5fad55
commit
bea70306e2
@ -6,9 +6,17 @@ use crate::{
|
||||
};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
///
|
||||
pub struct FileTreeResult {
|
||||
///
|
||||
pub commit: CommitId,
|
||||
///
|
||||
pub result: Result<Vec<TreeFile>>,
|
||||
}
|
||||
|
||||
enum JobState {
|
||||
Request { commit: CommitId, repo: RepoPath },
|
||||
Response(Result<Vec<TreeFile>>),
|
||||
Response(FileTreeResult),
|
||||
}
|
||||
|
||||
///
|
||||
@ -30,7 +38,7 @@ impl AsyncTreeFilesJob {
|
||||
}
|
||||
|
||||
///
|
||||
pub fn result(&self) -> Option<Result<Vec<TreeFile>>> {
|
||||
pub fn result(&self) -> Option<FileTreeResult> {
|
||||
if let Ok(mut state) = self.state.lock() {
|
||||
if let Some(state) = state.take() {
|
||||
return match state {
|
||||
@ -60,7 +68,10 @@ impl AsyncJob for AsyncTreeFilesJob {
|
||||
std::thread::sleep(
|
||||
std::time::Duration::from_secs(2),
|
||||
);
|
||||
JobState::Response(files)
|
||||
JobState::Response(FileTreeResult {
|
||||
commit,
|
||||
result: files,
|
||||
})
|
||||
}
|
||||
JobState::Response(result) => {
|
||||
JobState::Response(result)
|
||||
|
@ -99,10 +99,7 @@ impl RevisionFilesComponent {
|
||||
if !same_id {
|
||||
self.files = None;
|
||||
|
||||
self.async_treefiles.spawn(AsyncTreeFilesJob::new(
|
||||
self.repo.borrow().clone(),
|
||||
commit,
|
||||
));
|
||||
self.request_files(commit);
|
||||
|
||||
self.revision =
|
||||
Some(get_commit_info(&self.repo.borrow(), &commit)?);
|
||||
@ -129,17 +126,36 @@ impl RevisionFilesComponent {
|
||||
ev,
|
||||
AsyncNotification::Git(AsyncGitNotification::TreeFiles)
|
||||
) {
|
||||
if let Some(last) = self.async_treefiles.take_last() {
|
||||
if let Some(Ok(last)) = last.result() {
|
||||
let filenames: Vec<&Path> = last
|
||||
.iter()
|
||||
.map(|f| f.path.as_path())
|
||||
.collect();
|
||||
self.tree =
|
||||
FileTree::new(&filenames, &BTreeSet::new())?;
|
||||
self.tree.collapse_but_root();
|
||||
self.refresh_files()?;
|
||||
}
|
||||
|
||||
self.files = Some(last);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn refresh_files(&mut self) -> Result<(), anyhow::Error> {
|
||||
if let Some(last) = self.async_treefiles.take_last() {
|
||||
if let Some(result) = last.result() {
|
||||
if self
|
||||
.revision
|
||||
.as_ref()
|
||||
.map(|commit| commit.id == result.commit)
|
||||
.unwrap_or_default()
|
||||
{
|
||||
if let Ok(last) = result.result {
|
||||
let filenames: Vec<&Path> = last
|
||||
.iter()
|
||||
.map(|f| f.path.as_path())
|
||||
.collect();
|
||||
self.tree = FileTree::new(
|
||||
&filenames,
|
||||
&BTreeSet::new(),
|
||||
)?;
|
||||
self.tree.collapse_but_root();
|
||||
|
||||
self.files = Some(last);
|
||||
}
|
||||
} else if let Some(rev) = &self.revision {
|
||||
self.request_files(rev.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -364,6 +380,13 @@ impl RevisionFilesComponent {
|
||||
|
||||
title
|
||||
}
|
||||
|
||||
fn request_files(&mut self, commit: CommitId) {
|
||||
self.async_treefiles.spawn(AsyncTreeFilesJob::new(
|
||||
self.repo.borrow().clone(),
|
||||
commit,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
impl DrawableComponent for RevisionFilesComponent {
|
||||
@ -514,6 +537,7 @@ impl Component for RevisionFilesComponent {
|
||||
|
||||
fn show(&mut self) -> Result<()> {
|
||||
self.visible = true;
|
||||
self.refresh_files()?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user