From af5e36c24cc3c7ecd0451a4400029c376c9f8c85 Mon Sep 17 00:00:00 2001 From: mrbeanc Date: Mon, 18 Dec 2023 13:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E5=90=8D=E6=96=87=E4=BB=B6=E5=A4=B9ob?= =?UTF-8?q?jects->models=EF=BC=8C=E5=B9=B6=E5=A2=9E=E6=B7=BBindex.rs?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 1 + src/lib.rs | 2 +- src/main.rs | 2 -- src/{objects => models}/blob.rs | 2 +- src/{objects => models}/commit.rs | 0 src/models/index.rs | 36 +++++++++++++++++++++++++++++++ src/{objects => models}/mod.rs | 3 ++- src/{objects => models}/object.rs | 0 src/{objects => models}/tree.rs | 0 src/utils/util.rs | 12 +++++++++++ 10 files changed, 53 insertions(+), 5 deletions(-) rename src/{objects => models}/blob.rs (84%) rename src/{objects => models}/commit.rs (100%) create mode 100644 src/models/index.rs rename src/{objects => models}/mod.rs (59%) rename src/{objects => models}/object.rs (100%) rename src/{objects => models}/tree.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 08fcec6..e2a80c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,4 @@ edition = "2021" sha1 = "0.10.6" hex = "0.4.3" clap = { version = "4.4.11", features = ["derive"] } +chrono = "0.4.31" diff --git a/src/lib.rs b/src/lib.rs index 82e690a..f246b1b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ // 不使用lib.rs的话,就无法在tests里引用到src中的模块 -pub mod objects; +pub mod models; pub mod utils; pub mod commands; mod store; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 3a6a223..fa88689 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,3 @@ -use std::collections::HashMap; -type Index = HashMap; mod cli; fn main() { cli::handle_command(); diff --git a/src/objects/blob.rs b/src/models/blob.rs similarity index 84% rename from src/objects/blob.rs rename to src/models/blob.rs index 277bd4e..dd5c452 100644 --- a/src/objects/blob.rs +++ b/src/models/blob.rs @@ -1,4 +1,4 @@ -use crate::objects::object::Hash; +use crate::models::object::Hash; /*Blob * Blob是git中最基本的对象,他储存一份文件的内容,并使用hash作为标识符。 */ diff --git a/src/objects/commit.rs b/src/models/commit.rs similarity index 100% rename from src/objects/commit.rs rename to src/models/commit.rs diff --git a/src/models/index.rs b/src/models/index.rs new file mode 100644 index 0000000..65e00ea --- /dev/null +++ b/src/models/index.rs @@ -0,0 +1,36 @@ +use std::collections::HashMap; +use std::path::PathBuf; +use std::time::SystemTime; +use crate::models::object::Hash; + +// 文件元数据结构 +#[derive(Debug, Clone)] +struct FileMetaData { + hash: Hash, // SHA-1 哈希值 + size: u64, // 文件大小 + created_time: SystemTime, // 创建时间 + modified_time: SystemTime, // 修改时间 + mode: String, // 文件模式 +} + +// 索引数据结构 +#[derive(Debug, Default)] +struct Index { + entries: HashMap, +} + +#[cfg(test)] +mod tests { + use std::fs; + use crate::utils::util; + use super::*; + + #[test] + fn test_index() { + // 示例:获取文件的元数据 + let metadata = fs::metadata("lines.txt").unwrap(); + println!("{:?}", util::format_time(&metadata.created().unwrap())); + println!("{:?}", util::format_time(&metadata.modified().unwrap())); + println!("{:?}", metadata.len()); + } +} \ No newline at end of file diff --git a/src/objects/mod.rs b/src/models/mod.rs similarity index 59% rename from src/objects/mod.rs rename to src/models/mod.rs index e0c18af..3a27bc2 100644 --- a/src/objects/mod.rs +++ b/src/models/mod.rs @@ -1,4 +1,5 @@ pub mod commit; pub mod blob; pub mod tree; -mod object; \ No newline at end of file +pub mod object; +pub mod index; \ No newline at end of file diff --git a/src/objects/object.rs b/src/models/object.rs similarity index 100% rename from src/objects/object.rs rename to src/models/object.rs diff --git a/src/objects/tree.rs b/src/models/tree.rs similarity index 100% rename from src/objects/tree.rs rename to src/models/tree.rs diff --git a/src/utils/util.rs b/src/utils/util.rs index b375d24..b1edad5 100644 --- a/src/utils/util.rs +++ b/src/utils/util.rs @@ -34,6 +34,11 @@ pub fn get_storage_path() -> Result { } } +pub fn format_time(time: &std::time::SystemTime) -> String { + let datetime: chrono::DateTime = time.clone().into(); + datetime.format("%Y-%m-%d %H:%M:%S.%3f").to_string() +} + #[cfg(test)] mod tests { use super::*; @@ -49,4 +54,11 @@ mod tests { }, } } + + #[test] + fn test_format_time() { + let time = std::time::SystemTime::now(); + let formatted_time = format_time(&time); + println!("{}", formatted_time); + } } \ No newline at end of file