@@ -10,7 +10,7 @@ use git::{
},
status::{FileStatus, GitStatus, StatusCode, TrackedStatus, UnmergedStatus},
};
-use gpui::{AsyncApp, BackgroundExecutor, SharedString};
+use gpui::{AsyncApp, BackgroundExecutor, SharedString, Task};
use ignore::gitignore::GitignoreBuilder;
use rope::Rope;
use smol::future::FutureExt as _;
@@ -183,7 +183,7 @@ impl GitRepository for FakeGitRepository {
async move { None }.boxed()
}
- fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result<GitStatus>> {
+ fn status(&self, path_prefixes: &[RepoPath]) -> Task<Result<GitStatus>> {
let workdir_path = self.dot_git_path.parent().unwrap();
// Load gitignores
@@ -311,7 +311,10 @@ impl GitRepository for FakeGitRepository {
entries: entries.into(),
})
});
- async move { result? }.boxed()
+ Task::ready(match result {
+ Ok(result) => result,
+ Err(e) => Err(e),
+ })
}
fn branches(&self) -> BoxFuture<'_, Result<Vec<Branch>>> {
@@ -6,7 +6,7 @@ use collections::HashMap;
use futures::future::BoxFuture;
use futures::{AsyncWriteExt, FutureExt as _, select_biased};
use git2::BranchType;
-use gpui::{AppContext as _, AsyncApp, BackgroundExecutor, SharedString};
+use gpui::{AppContext as _, AsyncApp, BackgroundExecutor, SharedString, Task};
use parking_lot::Mutex;
use rope::Rope;
use schemars::JsonSchema;
@@ -338,7 +338,7 @@ pub trait GitRepository: Send + Sync {
fn merge_message(&self) -> BoxFuture<'_, Option<String>>;
- fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result<GitStatus>>;
+ fn status(&self, path_prefixes: &[RepoPath]) -> Task<Result<GitStatus>>;
fn branches(&self) -> BoxFuture<'_, Result<Vec<Branch>>>;
@@ -953,25 +953,27 @@ impl GitRepository for RealGitRepository {
.boxed()
}
- fn status(&self, path_prefixes: &[RepoPath]) -> BoxFuture<'_, Result<GitStatus>> {
+ fn status(&self, path_prefixes: &[RepoPath]) -> Task<Result<GitStatus>> {
let git_binary_path = self.git_binary_path.clone();
- let working_directory = self.working_directory();
- let path_prefixes = path_prefixes.to_owned();
- self.executor
- .spawn(async move {
- let output = new_std_command(&git_binary_path)
- .current_dir(working_directory?)
- .args(git_status_args(&path_prefixes))
- .output()?;
- if output.status.success() {
- let stdout = String::from_utf8_lossy(&output.stdout);
- stdout.parse()
- } else {
- let stderr = String::from_utf8_lossy(&output.stderr);
- anyhow::bail!("git status failed: {stderr}");
- }
- })
- .boxed()
+ let working_directory = match self.working_directory() {
+ Ok(working_directory) => working_directory,
+ Err(e) => return Task::ready(Err(e)),
+ };
+ let args = git_status_args(&path_prefixes);
+ log::debug!("Checking for git status in {path_prefixes:?}");
+ self.executor.spawn(async move {
+ let output = new_std_command(&git_binary_path)
+ .current_dir(working_directory)
+ .args(args)
+ .output()?;
+ if output.status.success() {
+ let stdout = String::from_utf8_lossy(&output.stdout);
+ stdout.parse()
+ } else {
+ let stderr = String::from_utf8_lossy(&output.stderr);
+ anyhow::bail!("git status failed: {stderr}");
+ }
+ })
}
fn branches(&self) -> BoxFuture<'_, Result<Vec<Branch>>> {
@@ -251,7 +251,15 @@ pub fn main() {
return;
}
- log::info!("========== starting zed ==========");
+ log::info!(
+ "========== starting zed version {}, sha {} ==========",
+ app_version,
+ app_commit_sha
+ .as_ref()
+ .map(|sha| sha.short())
+ .as_deref()
+ .unwrap_or("unknown"),
+ );
let app = Application::new().with_assets(Assets);