From 2255cdaf0945d665fa13e24ed3b6708d6d5c44d3 Mon Sep 17 00:00:00 2001 From: mrbeanc Date: Wed, 20 Dec 2023 13:13:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=BA=8F=E5=88=97=E5=8C=96=E4=B8=AD[t?= =?UTF-8?q?o=5Fstring]=E6=94=B9=E4=B8=BA[to=5Fstring=5Fpretty]=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E6=A0=BC=E5=BC=8F=E5=8C=96=EF=BC=8C=E6=94=B9=E5=96=84?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/blob.rs | 1 + src/models/commit.rs | 2 +- src/models/index.rs | 15 ++++++++------- src/models/tree.rs | 2 +- src/store.rs | 4 +--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/models/blob.rs b/src/models/blob.rs index 4f23967..8c34d8e 100644 --- a/src/models/blob.rs +++ b/src/models/blob.rs @@ -33,6 +33,7 @@ impl Blob { } } + /// 写入文件;优化:文件已存在时不做操作 pub fn save(&self) { let s = Store::new(); if !s.contains(&self.hash) { diff --git a/src/models/commit.rs b/src/models/commit.rs index 7a6d50e..22ef6f3 100644 --- a/src/models/commit.rs +++ b/src/models/commit.rs @@ -44,7 +44,7 @@ impl Commit { pub fn save(&mut self) -> String { // unimplemented!() let s = store::Store::new(); - let commit_data = serde_json::to_string(&self).unwrap(); + let commit_data = serde_json::to_string_pretty(&self).unwrap(); let hash = s.save(&commit_data); self.hash = hash.clone(); hash diff --git a/src/models/index.rs b/src/models/index.rs index b30180d..84cc016 100644 --- a/src/models/index.rs +++ b/src/models/index.rs @@ -1,6 +1,6 @@ use crate::models::blob::Blob; use crate::models::object::Hash; -use crate::utils::util::{get_file_mode, get_working_dir}; +use crate::utils::util; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::fs; @@ -25,7 +25,7 @@ impl FileMetaData { size: meta.len(), created_time: meta.created().unwrap(), modified_time: meta.modified().unwrap(), - mode: get_file_mode(file), + mode: util::get_file_mode(file), } } } @@ -42,7 +42,7 @@ impl Index { pub(crate) fn new() -> Index { let mut index = Index { entries: HashMap::new(), - working_dir: get_working_dir().unwrap(), + working_dir: util::get_working_dir().unwrap(), }; index.load(); return index; @@ -112,12 +112,13 @@ impl Index { self.entries.insert(path, data); } - fn load(&mut self) {} + fn load(&mut self) { + } /// 二进制序列化 pub fn save(&self) { //要先转化为相对路径 - let ser = serde_json::to_string(&self).unwrap(); + let ser = serde_json::to_string_pretty(&self).unwrap(); println!("{}", ser); } @@ -143,7 +144,7 @@ mod tests { #[test] fn test_index() { // 示例:获取文件的元数据 - let metadata = fs::metadata("lines.txt").unwrap(); + let metadata = fs::metadata(".gitignore").unwrap(); println!("{:?}", util::format_time(&metadata.created().unwrap())); println!("{:?}", util::format_time(&metadata.modified().unwrap())); println!("{:?}", metadata.len()); @@ -151,7 +152,7 @@ mod tests { #[test] fn test_save() { - util::setup_test_with_mit(); + util::setup_test_with_clean_mit(); let mut index = Index::new(); let metadata = fs::metadata("../.gitignore").unwrap(); let file_meta_data = FileMetaData { diff --git a/src/models/tree.rs b/src/models/tree.rs index 2e4df0f..4d32416 100644 --- a/src/models/tree.rs +++ b/src/models/tree.rs @@ -41,7 +41,7 @@ impl Tree { pub fn save(&self) -> String { let s = store::Store::new(); - let tree_data = serde_json::to_string(&self).unwrap(); + let tree_data = serde_json::to_string_pretty(&self).unwrap(); let hash = s.save(&tree_data); hash } diff --git a/src/store.rs b/src/store.rs index 8e3702f..4980586 100644 --- a/src/store.rs +++ b/src/store.rs @@ -34,13 +34,11 @@ impl Store { pub fn save(&self, content: &String) -> String { /* 保存文件内容 */ - println!("store_path: {:?}", self.store_path); let hash = util::calc_hash(content); let mut path = self.store_path.clone(); - println!("path: {:?}", path); path.push("objects"); path.push(&hash); - println!("path: {:?}", path); + println!("Saved to: [{}]", path.display()); match std::fs::write(path, content) { Ok(_) => hash, Err(_) => panic!("储存库疑似损坏,无法写入文件"),