Add global Fs instance (#15044)

This PR adds a global `Fs` instance to the app context.

This will make it easier to access the filesystem in some cases instead
of having to thread it around.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-07-23 17:59:55 -04:00 committed by GitHub
parent 5062bf0b4d
commit d36ebc8c74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 2 deletions

View file

@ -19,7 +19,7 @@ collections.workspace = true
futures.workspace = true
git.workspace = true
git2.workspace = true
gpui = { workspace = true, optional = true }
gpui.workspace = true
lazy_static.workspace = true
libc.workspace = true
parking_lot.workspace = true

View file

@ -12,6 +12,7 @@ use std::os::unix::fs::MetadataExt;
use async_tar::Archive;
use futures::{future::BoxFuture, AsyncRead, Stream, StreamExt};
use git::repository::{GitRepository, RealGitRepository};
use gpui::{AppContext, Global, ReadGlobal};
use rope::Rope;
use smol::io::AsyncWriteExt;
use std::{
@ -102,6 +103,22 @@ pub trait Fs: Send + Sync {
}
}
struct GlobalFs(Arc<dyn Fs>);
impl Global for GlobalFs {}
impl dyn Fs {
/// Returns the global [`Fs`].
pub fn global(cx: &AppContext) -> Arc<Self> {
GlobalFs::global(cx).0.clone()
}
/// Sets the global [`Fs`].
pub fn set_global(fs: Arc<Self>, cx: &mut AppContext) {
cx.set_global(GlobalFs(fs));
}
}
#[derive(Copy, Clone, Default)]
pub struct CreateOptions {
pub overwrite: bool,