summaryrefslogtreecommitdiff
path: root/src/repository.rs
diff options
context:
space:
mode:
authorRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-03-18 15:32:50 +0700
committerRosyid Haryadi <rosyid_haryadi@protonmail.com>2025-03-18 15:32:50 +0700
commita8cf3b2757dee028e86f7cc6848b741c46dd933a (patch)
treed263a03b8f0089c6d4ef84fbb3700ccfc1ba8e6d /src/repository.rs
parenta173c17a4b45f30a0190050beb96684cf03ab5f0 (diff)
upd: implementing cat-file & add readme
Diffstat (limited to 'src/repository.rs')
-rw-r--r--src/repository.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/repository.rs b/src/repository.rs
index f5ecffb..97b7816 100644
--- a/src/repository.rs
+++ b/src/repository.rs
@@ -5,6 +5,7 @@ use ini::ini;
use std::collections::HashMap;
use std::io::Write;
use std::path::PathBuf;
+use crate::object::{GitCommit, GitObject, GitObjectType};
pub struct GitRepository {
pub worktree: PathBuf,
@@ -70,4 +71,16 @@ impl GitRepository {
}
println!("Git repository initialized in {}", repo.worktree.display());
}
+
+ pub fn cat_file(&self, object_type: GitObjectType, sha: &str) {
+ match object_type {
+ GitObjectType::Commit => {
+ let path = self.gitdir.join(&sha[..2]).join(&sha[2..]);
+ let git_object = GitObject::from_file(path);
+ let git_commit = GitCommit::from_git_object(git_object);
+ println!("{}", git_commit);
+ }
+ _ => {}
+ }
+ }
} \ No newline at end of file