Skip to content

Commit 2273c79

Browse files
authored
Merge pull request #1156 from spkenv/open-repo-type-state
Combine FsRepository and OpenFsRepository
2 parents 3e5577b + 14018ba commit 2273c79

File tree

29 files changed

+451
-134
lines changed

29 files changed

+451
-134
lines changed

crates/spfs-cli/main/src/cmd_init.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl InitSubcommand {
3636
pub async fn run(&self, _config: &spfs::Config) -> Result<i32> {
3737
match self {
3838
Self::Repo { path } => {
39-
spfs::storage::fs::FsRepository::create(&path).await?;
39+
spfs::storage::fs::MaybeOpenFsRepository::create(&path).await?;
4040
Ok(0)
4141
}
4242
}

crates/spfs-vfs/src/fuse.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use fuser::{
3030
};
3131
use spfs::OsError;
3232
use spfs::prelude::*;
33+
use spfs::storage::LocalRepository;
3334
#[cfg(feature = "fuse-backend-abi-7-31")]
3435
use spfs::tracking::BlobRead;
3536
use spfs::tracking::{Entry, EntryKind, EnvSpec, Manifest};
@@ -381,7 +382,7 @@ impl Filesystem {
381382
reply.error(libc::ENOENT);
382383
return;
383384
};
384-
let payload_path = fs_repo.payloads.build_digest_path(digest);
385+
let payload_path = fs_repo.payloads().build_digest_path(digest);
385386
match std::fs::OpenOptions::new().read(true).open(payload_path) {
386387
Ok(file) => {
387388
handle = Some(Handle::BlobFile { entry, file });

crates/spfs-vfs/src/winfsp/mount.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use dashmap::DashMap;
1010
use libc::c_void;
1111
use spfs::OsError;
1212
use spfs::prelude::*;
13+
use spfs::storage::LocalRepository;
1314
use spfs::tracking::{Entry, EntryKind};
1415
use tokio::io::AsyncReadExt;
1516
use windows::Win32::Foundation::{ERROR_SEEK_ON_DEVICE, STATUS_NOT_A_DIRECTORY};
@@ -287,7 +288,7 @@ impl winfsp::filesystem::FileSystemContext for Mount {
287288
send.send(Err(winfsp::FspError::IO(std::io::ErrorKind::NotFound)));
288289
return;
289290
};
290-
let payload_path = fs_repo.payloads.build_digest_path(&digest);
291+
let payload_path = fs_repo.payloads().build_digest_path(&digest);
291292
match std::fs::OpenOptions::new().read(true).open(payload_path) {
292293
Ok(file) => {
293294
let _ = send.send(Ok(Some(Handle::BlobFile { entry, file })));

crates/spfs/benches/spfs_bench.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub fn commit_benchmark(c: &mut Criterion) {
4444
.expect("create a temp directory for spfs repo");
4545
let repo: Arc<RepositoryHandle> = Arc::new(
4646
tokio_runtime
47-
.block_on(spfs::storage::fs::FsRepository::create(
47+
.block_on(spfs::storage::fs::MaybeOpenFsRepository::create(
4848
repo_path.path().join("repo"),
4949
))
5050
.expect("create spfs repo")

crates/spfs/src/bootstrap_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ async fn test_shell_initialization_startup_scripts(
3333
};
3434
let root = tmpdir.path().to_string_lossy().to_string();
3535
let repo = crate::storage::RepositoryHandle::from(
36-
crate::storage::fs::FsRepository::create(&root)
36+
crate::storage::fs::MaybeOpenFsRepository::create(&root)
3737
.await
3838
.unwrap(),
3939
);
@@ -118,7 +118,7 @@ async fn test_shell_initialization_no_startup_scripts(
118118
};
119119
let root = tmpdir.path().to_string_lossy().to_string();
120120
let repo = crate::storage::RepositoryHandle::from(
121-
crate::storage::fs::FsRepository::create(&root)
121+
crate::storage::fs::MaybeOpenFsRepository::create(&root)
122122
.await
123123
.unwrap(),
124124
);

crates/spfs/src/clean.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::prune::PruneParameters;
2020
use crate::io::Pluralize;
2121
use crate::prelude::*;
2222
use crate::runtime::makedirs_with_perms;
23-
use crate::storage::fs::OpenFsRepository;
23+
use crate::storage::fs::FsRepositoryOps;
2424
use crate::storage::{TagNamespace, TagNamespaceBuf};
2525
use crate::{Digest, Error, Result, encoding, graph, storage, tracking};
2626

@@ -705,7 +705,7 @@ where
705705
async fn remove_unvisited_renders_and_proxies_for_storage(
706706
&self,
707707
username: Option<String>,
708-
repo: &storage::fs::OpenFsRepository,
708+
repo: impl FsRepositoryOps,
709709
) -> Result<CleanResult> {
710710
let mut result = CleanResult::default();
711711
let mut stream = repo
@@ -811,7 +811,8 @@ where
811811
let future = async move {
812812
if !self.dry_run {
813813
tracing::trace!(?path, "removing proxy render");
814-
OpenFsRepository::remove_dir_atomically(&path, &workdir).await?;
814+
storage::fs::OpenFsRepository::remove_dir_atomically(&path, &workdir)
815+
.await?;
815816
}
816817
Ok(digest)
817818
};

crates/spfs/src/clean_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ async fn test_clean_untagged_objects_layers_platforms(#[future] tmprepo: TempRep
453453
async fn test_clean_manifest_renders(tmpdir: tempfile::TempDir) {
454454
init_logging();
455455
let tmprepo = Arc::new(
456-
storage::fs::FsRepository::create(tmpdir.path())
456+
storage::fs::MaybeOpenFsRepository::create(tmpdir.path())
457457
.await
458458
.unwrap()
459459
.into(),
@@ -482,7 +482,7 @@ async fn test_clean_manifest_renders(tmpdir: tempfile::TempDir) {
482482
};
483483
let fs_repo = fs_repo.opened().await.unwrap();
484484

485-
storage::fs::Renderer::new(&*fs_repo)
485+
storage::fs::Renderer::new(&fs_repo)
486486
.render_manifest(&manifest.to_graph_manifest(), None)
487487
.await
488488
.unwrap();

crates/spfs/src/commit_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ use crate::fixtures::*;
1313
async fn test_commit_empty(tmpdir: tempfile::TempDir) {
1414
let root = tmpdir.path().to_string_lossy().to_string();
1515
let repo = crate::storage::RepositoryHandle::from(
16-
crate::storage::fs::FsRepository::create(&root)
16+
crate::storage::fs::MaybeOpenFsRepository::create(&root)
1717
.await
1818
.unwrap(),
1919
);
2020
let storage = crate::runtime::Storage::new(repo).unwrap();
2121
let repo = crate::storage::RepositoryHandle::from(
22-
crate::storage::fs::FsRepository::create(root)
22+
crate::storage::fs::MaybeOpenFsRepository::create(root)
2323
.await
2424
.unwrap(),
2525
);

crates/spfs/src/config.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,9 @@ impl RemoteConfig {
311311
inner,
312312
} = self;
313313
let mut handle: storage::RepositoryHandle = match inner.clone() {
314-
RepositoryConfig::Fs(config) => {
315-
storage::fs::FsRepository::from_config(config).await?.into()
316-
}
314+
RepositoryConfig::Fs(config) => storage::fs::MaybeOpenFsRepository::from_config(config)
315+
.await?
316+
.into(),
317317
RepositoryConfig::Tar(config) => storage::tar::TarRepository::from_config(config)
318318
.await?
319319
.into(),
@@ -574,7 +574,8 @@ impl Config {
574574
source,
575575
})?;
576576

577-
local_repo.set_tag_namespace(self.storage.tag_namespace.clone());
577+
Arc::make_mut(&mut local_repo.fs_impl)
578+
.set_tag_namespace(self.storage.tag_namespace.clone());
578579

579580
Ok(local_repo)
580581
}
@@ -583,8 +584,8 @@ impl Config {
583584
///
584585
/// The returned repo is guaranteed to be created, valid and open already. Ie
585586
/// the local repository is not allowed to be lazily opened.
586-
pub async fn get_local_repository(&self) -> Result<storage::fs::FsRepository> {
587-
self.get_opened_local_repository().await.map(Into::into)
587+
pub async fn get_local_repository(&self) -> Result<storage::fs::OpenFsRepository> {
588+
self.get_opened_local_repository().await
588589
}
589590

590591
/// Get the local repository handle as configured, creating it if needed.

crates/spfs/src/config_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ async fn test_config_get_remote() {
4141
.tempdir()
4242
.unwrap();
4343
let remote = tmpdir.path().join("remote");
44-
let _ = crate::storage::fs::FsRepository::create(&remote)
44+
let _ = crate::storage::fs::MaybeOpenFsRepository::create(&remote)
4545
.await
4646
.unwrap();
4747

0 commit comments

Comments
 (0)