From 174e139508f4972cd293261c8d76afac591f3810 Mon Sep 17 00:00:00 2001 From: HouXiaoxuan Date: Sat, 23 Dec 2023 15:49:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0clran=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commands/merge.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/commands/merge.rs b/src/commands/merge.rs index e258827..e89bc7c 100644 --- a/src/commands/merge.rs +++ b/src/commands/merge.rs @@ -1,17 +1,20 @@ -use clap::builder::Str; - use crate::{ - commands, head, + commands::{ + self, + status::{changes_to_be_committed, changes_to_be_staged}, + }, + head, models::{commit::Commit, object::Hash}, store::Store, utils::util, }; -enum MergeError { +enum MergeErr { NoFastForward, + NoClean, } -fn check_ff(current: &Hash, target: Hash) -> Result { +fn check_ff(current: &Hash, target: Hash) -> Result { let target_commit = Commit::load(&target); // 检查current是否是target的祖先 if *current == target_commit.get_hash() { @@ -23,11 +26,20 @@ fn check_ff(current: &Hash, target: Hash) -> Result { return result; } } - return Err(MergeError::NoFastForward); + return Err(MergeErr::NoFastForward); } /** commit 以fast forward到形式合并到当前分支 */ -fn merge_ff(commit_hash: String) -> Result<(), MergeError> { +fn merge_ff(commit_hash: String) -> Result<(), MergeErr> { + // 检查更改 + if !changes_to_be_staged().is_empty() { + println!("fatal: 你有未暂存的更改,切换分支会导致更改丢失"); + return Err(MergeErr::NoClean); + } else if !changes_to_be_committed().is_empty() { + println!("fatal: 你有未提交的更改,无法切换分支"); + return Err(MergeErr::NoClean); + } + // 检查当前分支是否可以fast forward到commit let current_commit = head::current_head_commit(); let check = check_ff(¤t_commit, commit_hash.clone());