Skip to content

Commit 14018ba

Browse files
committed
Implement Deref for FSRepository
Allow some places to not have to write `fs_impl`. Signed-off-by: J Robert Ray <[email protected]>
1 parent 86adff7 commit 14018ba

File tree

9 files changed

+36
-27
lines changed

9 files changed

+36
-27
lines changed

crates/spfs/src/clean_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ async fn test_clean_manifest_renders(tmpdir: tempfile::TempDir) {
487487
.await
488488
.unwrap();
489489

490-
let files = list_files(fs_repo.fs_impl.objects.root());
490+
let files = list_files(fs_repo.objects.root());
491491
assert!(!files.is_empty(), "should have stored data");
492492

493493
let cleaner = Cleaner::new(&tmprepo).with_reporter(TracingCleanReporter);
@@ -497,7 +497,7 @@ async fn test_clean_manifest_renders(tmpdir: tempfile::TempDir) {
497497
.expect("failed to clean repo");
498498
println!("{result:#?}");
499499

500-
let files = list_files(fs_repo.fs_impl.renders.as_ref().unwrap().renders.root());
500+
let files = list_files(fs_repo.renders.as_ref().unwrap().renders.root());
501501
assert_eq!(
502502
files,
503503
Vec::<String>::new(),

crates/spfs/src/runtime/storage.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ impl Storage {
11851185
pub async fn durable_path(&self, name: String) -> Result<PathBuf> {
11861186
match &*self.inner {
11871187
RepositoryHandle::FS(repo) => {
1188-
let mut upper_root_path = repo.fs_impl.root();
1188+
let mut upper_root_path = repo.root();
11891189
upper_root_path.push(DURABLE_EDITS_DIR);
11901190
upper_root_path.push(name);
11911191
Ok(upper_root_path)

crates/spfs/src/storage/fallback/repository.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,12 +387,12 @@ impl Address for FallbackProxy {
387387
impl LocalRepository for FallbackProxy {
388388
#[inline]
389389
fn payloads(&self) -> &FsHashStore {
390-
self.primary.fs_impl.payloads()
390+
self.primary.payloads()
391391
}
392392

393393
#[inline]
394394
fn render_store(&self) -> Result<&RenderStore> {
395-
self.primary.fs_impl.render_store()
395+
self.primary.render_store()
396396
}
397397
}
398398

crates/spfs/src/storage/fallback/repository_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ async fn test_proxy_payload_repair(tmpdir: tempfile::TempDir) {
3636
.unwrap();
3737

3838
// Delete the payload file from the primary repo.
39-
let payload_path = primary.fs_impl.payloads.build_digest_path(&digest);
39+
let payload_path = primary.payloads.build_digest_path(&digest);
4040
tokio::fs::remove_file(payload_path).await.unwrap();
4141

4242
// Loading the payload from the primary should fail.

crates/spfs/src/storage/fs/database.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ impl graph::DatabaseExt for super::MaybeOpenFsRepository {
8282
#[async_trait::async_trait]
8383
impl DatabaseView for super::OpenFsRepository {
8484
async fn has_object(&self, digest: encoding::Digest) -> bool {
85-
let filepath = self.fs_impl.objects.build_digest_path(&digest);
85+
let filepath = self.objects.build_digest_path(&digest);
8686
tokio::fs::symlink_metadata(filepath).await.is_ok()
8787
}
8888

8989
async fn read_object(&self, digest: encoding::Digest) -> Result<graph::Object> {
90-
let filepath = self.fs_impl.objects.build_digest_path(&digest);
90+
let filepath = self.objects.build_digest_path(&digest);
9191
let mut file =
9292
tokio::io::BufReader::new(tokio::fs::File::open(&filepath).await.map_err(|err| {
9393
match err.kind() {
@@ -109,7 +109,7 @@ impl DatabaseView for super::OpenFsRepository {
109109
&self,
110110
search_criteria: graph::DigestSearchCriteria,
111111
) -> Pin<Box<dyn Stream<Item = Result<encoding::Digest>> + Send>> {
112-
Box::pin(self.fs_impl.objects.find(search_criteria))
112+
Box::pin(self.objects.find(search_criteria))
113113
}
114114

115115
fn iter_objects(&self) -> graph::DatabaseIterator<'_> {
@@ -124,14 +124,14 @@ impl DatabaseView for super::OpenFsRepository {
124124
&self,
125125
partial: &encoding::PartialDigest,
126126
) -> Result<encoding::Digest> {
127-
self.fs_impl.objects.resolve_full_digest(partial).await
127+
self.objects.resolve_full_digest(partial).await
128128
}
129129
}
130130

131131
#[async_trait::async_trait]
132132
impl graph::Database for super::OpenFsRepository {
133133
async fn remove_object(&self, digest: encoding::Digest) -> crate::Result<()> {
134-
let filepath = self.fs_impl.objects.build_digest_path(&digest);
134+
let filepath = self.objects.build_digest_path(&digest);
135135

136136
// this might fail but we don't consider that fatal just yet
137137
#[cfg(unix)]
@@ -156,7 +156,7 @@ impl graph::Database for super::OpenFsRepository {
156156
older_than: DateTime<Utc>,
157157
digest: encoding::Digest,
158158
) -> crate::Result<bool> {
159-
let filepath = self.fs_impl.objects.build_digest_path(&digest);
159+
let filepath = self.objects.build_digest_path(&digest);
160160

161161
// this might fail but we don't consider that fatal just yet
162162
#[cfg(unix)]
@@ -203,7 +203,7 @@ impl graph::Database for super::OpenFsRepository {
203203
impl graph::DatabaseExt for super::OpenFsRepository {
204204
async fn write_object<T: ObjectProto>(&self, obj: &graph::FlatObject<T>) -> Result<()> {
205205
let digest = obj.digest()?;
206-
let filepath = self.fs_impl.objects.build_digest_path(&digest);
206+
let filepath = self.objects.build_digest_path(&digest);
207207
if filepath.exists() {
208208
tracing::trace!(%digest, kind=%std::any::type_name::<T>(), "object already exists");
209209
return Ok(());
@@ -214,8 +214,8 @@ impl graph::DatabaseExt for super::OpenFsRepository {
214214
// other processes don't try to read our incomplete
215215
// object from the database
216216
let uuid = uuid::Uuid::new_v4().to_string();
217-
let working_file = self.fs_impl.objects.workdir().join(uuid);
218-
self.fs_impl.objects.ensure_base_dir(&working_file)?;
217+
let working_file = self.objects.workdir().join(uuid);
218+
self.objects.ensure_base_dir(&working_file)?;
219219
let mut encoded = Vec::new();
220220
obj.encode(&mut encoded)?;
221221
let mut writer = tokio::io::BufWriter::new(
@@ -258,7 +258,7 @@ impl graph::DatabaseExt for super::OpenFsRepository {
258258
}
259259
#[cfg(unix)]
260260
{
261-
let perms = std::fs::Permissions::from_mode(self.fs_impl.objects.file_permissions);
261+
let perms = std::fs::Permissions::from_mode(self.objects.file_permissions);
262262
if let Err(err) = tokio::fs::set_permissions(&working_file, perms).await {
263263
let _ = tokio::fs::remove_file(&working_file).await;
264264
return Err(Error::StorageWriteError(
@@ -268,7 +268,7 @@ impl graph::DatabaseExt for super::OpenFsRepository {
268268
));
269269
}
270270
}
271-
self.fs_impl.objects.ensure_base_dir(&filepath)?;
271+
self.objects.ensure_base_dir(&filepath)?;
272272
match tokio::fs::rename(&working_file, &filepath).await {
273273
Ok(_) => Ok(()),
274274
Err(err) => {

crates/spfs/src/storage/fs/payloads.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,26 +54,26 @@ impl crate::storage::PayloadStorage for MaybeOpenFsRepository {
5454
#[async_trait::async_trait]
5555
impl crate::storage::PayloadStorage for OpenFsRepository {
5656
async fn has_payload(&self, digest: encoding::Digest) -> bool {
57-
let path = self.fs_impl.payloads.build_digest_path(&digest);
57+
let path = self.payloads.build_digest_path(&digest);
5858
tokio::fs::symlink_metadata(path).await.is_ok()
5959
}
6060

6161
fn iter_payload_digests(&self) -> Pin<Box<dyn Stream<Item = Result<encoding::Digest>> + Send>> {
62-
Box::pin(self.fs_impl.payloads.iter())
62+
Box::pin(self.payloads.iter())
6363
}
6464

6565
async unsafe fn write_data(
6666
&self,
6767
reader: Pin<Box<dyn BlobRead>>,
6868
) -> Result<(encoding::Digest, u64)> {
69-
self.fs_impl.payloads.write_data(reader).await
69+
self.payloads.write_data(reader).await
7070
}
7171

7272
async fn open_payload(
7373
&self,
7474
digest: encoding::Digest,
7575
) -> Result<(Pin<Box<dyn BlobRead>>, std::path::PathBuf)> {
76-
let path = self.fs_impl.payloads.build_digest_path(&digest);
76+
let path = self.payloads.build_digest_path(&digest);
7777
match tokio::fs::File::open(&path).await {
7878
Ok(file) => Ok((Box::pin(tokio::io::BufReader::new(file)), path)),
7979
Err(err) => match err.kind() {
@@ -97,7 +97,7 @@ impl crate::storage::PayloadStorage for OpenFsRepository {
9797
}
9898

9999
async fn remove_payload(&self, digest: encoding::Digest) -> Result<()> {
100-
let path = self.fs_impl.payloads.build_digest_path(&digest);
100+
let path = self.payloads.build_digest_path(&digest);
101101
match tokio::fs::remove_file(&path).await {
102102
Ok(()) => Ok(()),
103103
Err(err) => match err.kind() {

crates/spfs/src/storage/fs/renderer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ pub enum RenderType {
4949

5050
impl OpenFsRepository {
5151
fn get_render_storage(&self) -> Result<&crate::storage::fs::FsHashStore> {
52-
match &self.fs_impl.renders {
52+
match &self.renders {
5353
Some(render_store) => Ok(&render_store.renders),
5454
None => Err(Error::NoRenderStorage(self.address().into_owned())),
5555
}
5656
}
5757

5858
pub async fn has_rendered_manifest(&self, digest: encoding::Digest) -> bool {
59-
let renders = match &self.fs_impl.renders {
59+
let renders = match &self.renders {
6060
Some(render_store) => &render_store.renders,
6161
None => return false,
6262
};
@@ -84,7 +84,7 @@ impl OpenFsRepository {
8484

8585
/// Remove the identified render from this storage.
8686
pub async fn remove_rendered_manifest(&self, digest: crate::encoding::Digest) -> Result<()> {
87-
let renders = match &self.fs_impl.renders {
87+
let renders = match &self.renders {
8888
Some(render_store) => &render_store.renders,
8989
None => return Ok(()),
9090
};
@@ -123,7 +123,7 @@ impl OpenFsRepository {
123123
older_than: DateTime<Utc>,
124124
digest: encoding::Digest,
125125
) -> Result<bool> {
126-
let renders = match &self.fs_impl.renders {
126+
let renders = match &self.renders {
127127
Some(render_store) => &render_store.renders,
128128
None => return Ok(false),
129129
};

crates/spfs/src/storage/fs/repository.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,15 @@ pub struct FsRepository<FS> {
189189
pub(crate) fs_impl: Arc<FS>,
190190
}
191191

192+
impl<FS> std::ops::Deref for FsRepository<FS> {
193+
type Target = FS;
194+
195+
#[inline]
196+
fn deref(&self) -> &Self::Target {
197+
&self.fs_impl
198+
}
199+
}
200+
192201
#[async_trait::async_trait]
193202
impl<FS> FsRepositoryOps for FsRepository<FS>
194203
where

crates/spfs/src/storage/fs/tag.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ impl MaybeOpenFsRepository {
156156

157157
impl OpenFsRepository {
158158
fn tags_root_in_namespace(&self, namespace: Option<&TagNamespace>) -> PathBuf {
159-
let mut tags_root = self.fs_impl.root().join("tags");
159+
let mut tags_root = self.root().join("tags");
160160
if let Some(tag_namespace) = namespace {
161161
for component in tag_namespace.as_rel_path().components() {
162162
// Assuming the tag namespace is only made up of `Normal`

0 commit comments

Comments
 (0)