summaryrefslogtreecommitdiff
path: root/rola-bucket/src/bucket
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-18 20:56:05 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-18 20:56:05 +0800
commit68daa10abfe3015beca966825d32cf67c9f5d5d7 (patch)
treec28f0470240e7cdc3748cee57ef74353514c47b7 /rola-bucket/src/bucket
parent669898193bebeadc975881bee496fe0239df76a0 (diff)
feat(bucket): implement bucket initialization and logging infrastructure
Add bucket init logic with directory structure creation and log macros for tracing
Diffstat (limited to 'rola-bucket/src/bucket')
-rw-r--r--rola-bucket/src/bucket/init.rs50
-rw-r--r--rola-bucket/src/bucket/space.rs22
2 files changed, 60 insertions, 12 deletions
diff --git a/rola-bucket/src/bucket/init.rs b/rola-bucket/src/bucket/init.rs
index 8b13789..2733a37 100644
--- a/rola-bucket/src/bucket/init.rs
+++ b/rola-bucket/src/bucket/init.rs
@@ -1 +1,51 @@
+use std::path::{Path, PathBuf};
+use shared_constants::{
+ bucket::{
+ DIR_BUCKET_COMPRESSED_OBJ, DIR_BUCKET_DELTA, DIR_BUCKET_ID_REVS, DIR_BUCKET_ID_TAGS,
+ DIR_BUCKET_OBJ,
+ },
+ common::FILE_BUCKET_ROOT_CONFIG,
+};
+use space_system::SpaceError;
+use tokio::fs;
+
+pub(crate) async fn init_bucket_at(path: PathBuf) -> Result<(), SpaceError> {
+ let bucket_config_file = path.join(FILE_BUCKET_ROOT_CONFIG);
+
+ // Check if directory is empty
+ let mut dir_entries = std::fs::read_dir(&path).map_err(SpaceError::Io)?;
+ if dir_entries.next().is_some() {
+ return Err(SpaceError::RequireEmptyDirectory);
+ }
+
+ write_config(&bucket_config_file).await?;
+ create_dirs(&bucket_config_file).await?;
+
+ Ok(())
+}
+
+async fn write_config(bucket_config_file: &Path) -> Result<(), SpaceError> {
+ fs::write(bucket_config_file, include_str!("../../res/bucket.toml"))
+ .await
+ .map_err(SpaceError::Io)
+}
+
+async fn create_dirs(bucket_config_file: &Path) -> Result<(), SpaceError> {
+ let dirs = [
+ DIR_BUCKET_OBJ,
+ DIR_BUCKET_COMPRESSED_OBJ,
+ DIR_BUCKET_DELTA,
+ DIR_BUCKET_ID_REVS,
+ DIR_BUCKET_ID_TAGS,
+ ];
+
+ for dir in dirs {
+ let full_path = bucket_config_file.join(dir);
+ fs::create_dir_all(&full_path)
+ .await
+ .map_err(SpaceError::Io)?;
+ }
+
+ Ok(())
+}
diff --git a/rola-bucket/src/bucket/space.rs b/rola-bucket/src/bucket/space.rs
index 9559b1d..ed1311c 100644
--- a/rola-bucket/src/bucket/space.rs
+++ b/rola-bucket/src/bucket/space.rs
@@ -1,22 +1,20 @@
-use shared_constants::common::DRAFT_META_DIR;
-use space_system::{SpaceError, SpaceRoot, SpaceRootFindPattern};
-use tokio::fs::create_dir_all;
+// use log::trace;
+use shared_constants::common::FILE_BUCKET_ROOT_CONFIG;
+use shared_functions::trace;
+use space_system::{SpaceRoot, SpaceRootFindPattern};
-use crate::{AsyncBucketTransferProtocol, Bucket};
+use crate::{AsyncBucketTransferProtocol, Bucket, bucket::init::init_bucket_at};
impl<Protocol: AsyncBucketTransferProtocol + Send + Sync> SpaceRoot for Bucket<Protocol> {
fn get_pattern() -> SpaceRootFindPattern {
- SpaceRootFindPattern::IncludeDotDir(DRAFT_META_DIR.into())
+ SpaceRootFindPattern::IncludeFile(FILE_BUCKET_ROOT_CONFIG.into())
}
async fn create_space(path: &std::path::Path) -> Result<(), space_system::SpaceError> {
- let draft_meta_dir = path.join(DRAFT_META_DIR);
-
- // Create workspace directory
- create_dir_all(&draft_meta_dir)
- .await
- .map_err(SpaceError::from)?;
-
+ let path_str = path.display().to_string();
+ trace!("Creating bucket at: {}", &path_str);
+ init_bucket_at(path.into()).await?;
+ trace!("Bucket created at: {}", &path_str);
Ok(())
}
}