feat(tvix/store/pathinfosvc): add calculate_nar method

Putting this in the PathInfoService trait makes much more sense, we can
have direct control over where/how to cache the results in the
implementation.

This now requires each PathInfoService to hold pointers to BlobService
and DirectoryService.

Change-Id: I4faae780d43eae4beeb57bd5e190e6d1a5d3314e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8724
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
Florian Klink 2023-06-09 10:28:02 +03:00 committed by clbot
parent 8d05c0ceaa
commit 6f85dbfc06
12 changed files with 147 additions and 67 deletions

View file

@ -1,6 +1,6 @@
use crate::directoryservice::DirectoryService;
use crate::nar::calculate_size_and_sha256;
use crate::nar::writer_nar;
use crate::nar::write_nar;
use crate::proto::DirectoryNode;
use crate::proto::FileNode;
use crate::proto::SymlinkNode;
@ -13,7 +13,7 @@ use std::io;
fn single_symlink() {
let mut buf: Vec<u8> = vec![];
writer_nar(
write_nar(
&mut buf,
&crate::proto::node::Node::Symlink(SymlinkNode {
name: "doesntmatter".to_string(),
@ -33,7 +33,7 @@ fn single_symlink() {
fn single_file_missing_blob() {
let mut buf: Vec<u8> = vec![];
let e = writer_nar(
let e = write_nar(
&mut buf,
&crate::proto::node::Node::File(FileNode {
name: "doesntmatter".to_string(),
@ -74,7 +74,7 @@ fn single_file_wrong_blob_size() {
{
let mut buf: Vec<u8> = vec![];
let e = writer_nar(
let e = write_nar(
&mut buf,
&crate::proto::node::Node::File(FileNode {
name: "doesntmatter".to_string(),
@ -99,7 +99,7 @@ fn single_file_wrong_blob_size() {
{
let mut buf: Vec<u8> = vec![];
let e = writer_nar(
let e = write_nar(
&mut buf,
&crate::proto::node::Node::File(FileNode {
name: "doesntmatter".to_string(),
@ -136,7 +136,7 @@ fn single_file() {
let mut buf: Vec<u8> = vec![];
writer_nar(
write_nar(
&mut buf,
&crate::proto::node::Node::File(FileNode {
name: "doesntmatter".to_string(),
@ -174,7 +174,7 @@ fn test_complicated() {
let mut buf: Vec<u8> = vec![];
writer_nar(
write_nar(
&mut buf,
&crate::proto::node::Node::Directory(DirectoryNode {
name: "doesntmatter".to_string(),

View file

@ -12,6 +12,9 @@ pub fn gen_directory_service() -> impl DirectoryService + Send + Sync + Clone +
MemoryDirectoryService::default()
}
pub fn gen_pathinfo_service() -> impl PathInfoService {
MemoryPathInfoService::default()
pub fn gen_pathinfo_service<DS: DirectoryService + Clone>(
blob_service: Box<dyn BlobService>,
directory_service: DS,
) -> impl PathInfoService {
MemoryPathInfoService::new(blob_service, directory_service)
}