commit操作初版完成

This commit is contained in:
HouXiaoxuan
2023-12-21 02:14:59 +08:00
parent b560a3f302
commit ba7797ece1
3 changed files with 19 additions and 6 deletions

View File

@@ -1,5 +1,6 @@
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use mit::commands::add::add; use mit::commands::add::add;
use mit::commands::commit::commit;
use mit::commands::init::init; use mit::commands::init::init;
/// Rust实现的简易版本的Git用于学习Rust语言 /// Rust实现的简易版本的Git用于学习Rust语言
@@ -52,7 +53,7 @@ pub fn handle_command() {
Command::Init => { Command::Init => {
let _ = init(); let _ = init();
} }
Command::Add { files , all, update} => { Command::Add { files, all, update } => {
add(files, all, update); add(files, all, update);
} }
Command::Rm { files, cached } => { Command::Rm { files, cached } => {
@@ -62,7 +63,7 @@ pub fn handle_command() {
message, message,
allow_empty, allow_empty,
} => { } => {
println!("commit: {:?}, allow empty={:?}", message, allow_empty); commit(message, allow_empty);
} }
} }
} }

View File

@@ -1,16 +1,28 @@
use crate::head; use crate::head;
use crate::models::{commit, index}; use crate::models::{commit, index};
// XXX NOT TESTED
pub fn commit(message: String, allow_enpty: bool) { pub fn commit(message: String, allow_enpty: bool) {
let index = index::Index::new(); let index = index::Index::new();
// XXX true 需要替换为 index.is_empty() // XXX true 需要替换为 index.is_empty()
if true && !allow_enpty { if false && !allow_enpty {
println!("工作区没有任何改动,不需要提交"); println!("工作区没有任何改动,不需要提交");
} }
let current_head = head::current_head();
let current_commit_hash = head::current_head_commit(); let current_commit_hash = head::current_head_commit();
let mut commit = commit::Commit::new(&index, vec![current_commit_hash], message); let mut commit =
commit::Commit::new(&index, vec![current_commit_hash.clone()], message.clone());
let commit_hash = commit.save(); let commit_hash = commit.save();
head::update_head_commit(&commit_hash); head::update_head_commit(&commit_hash);
{
let commit_target = {
match current_head {
head::Head::Branch(branch_name) => branch_name,
head::Head::Detached(commit_hash) => commit_hash[..6].to_string(),
}
};
println!("commit to [{:?}] message{:?}", commit_target, message);
println!("commit hash: {:?}", commit_hash);
}
} }

View File

@@ -5,7 +5,7 @@ pub enum Head {
Branch(String), Branch(String),
} }
fn current_head() -> Head { pub fn current_head() -> Head {
let mut head = util::get_storage_path().unwrap(); let mut head = util::get_storage_path().unwrap();
head.push("HEAD"); head.push("HEAD");
let head_content = std::fs::read_to_string(head).expect("HEAD文件损坏"); let head_content = std::fs::read_to_string(head).expect("HEAD文件损坏");