diff options
Diffstat (limited to 'asyncgit/src/sync/merge.rs')
-rw-r--r-- | asyncgit/src/sync/merge.rs | 144 |
1 files changed, 72 insertions, 72 deletions
diff --git a/asyncgit/src/sync/merge.rs b/asyncgit/src/sync/merge.rs index a58f7a25..f91b33a4 100644 --- a/asyncgit/src/sync/merge.rs +++ b/asyncgit/src/sync/merge.rs @@ -1,26 +1,26 @@ use crate::{ - error::{Error, Result}, - sync::{ - branch::merge_commit::commit_merge_with_head, reset_stage, - reset_workdir, utils, CommitId, - }, + error::{Error, Result}, + sync::{ + branch::merge_commit::commit_merge_with_head, reset_stage, + reset_workdir, utils, CommitId, + }, }; use git2::{BranchType, Commit, MergeOptions, Repository}; use scopetime::scope_time; /// pub fn mergehead_ids(repo_path: &str) -> Result<Vec<CommitId>> { - scope_time!("mergehead_ids"); + scope_time!("mergehead_ids"); - let mut repo = utils::repo(repo_path)?; + let mut repo = utils::repo(repo_path)?; - let mut ids: Vec<CommitId> = Vec::new(); - repo.mergehead_foreach(|id| { - ids.push(CommitId::from(*id)); - true - })?; + let mut ids: Vec<CommitId> = Vec::new(); + repo.mergehead_foreach(|id| { + ids.push(CommitId::from(*id)); + true + })?; - Ok(ids) + Ok(ids) } /// does these steps: @@ -28,114 +28,114 @@ pub fn mergehead_ids(repo_path: &str) -> Result<Vec<CommitId>> { /// * revert all changes in workdir /// * cleanup repo merge state pub fn abort_merge(repo_path: &str) -> Result<()> { - scope_time!("cleanup_state"); + scope_time!("cleanup_state"); - let repo = utils::repo(repo_path)?; + let repo = utils::repo(repo_path)?; - reset_stage(repo_path, "*")?; - reset_workdir(repo_path, "*")?; + reset_stage(repo_path, "*")?; + reset_workdir(repo_path, "*")?; - repo.cleanup_state()?; + repo.cleanup_state()?; - Ok(()) + Ok(()) } /// pub fn merge_branch(repo_path: &str, branch: &str) -> Result<()> { - scope_time!("merge_branch"); + scope_time!("merge_branch"); - let repo = utils::repo(repo_path)?; + let repo = utils::repo(repo_path)?; - merge_branch_repo(&repo, branch)?; + merge_branch_repo(&repo, branch)?; - Ok(()) + Ok(()) } /// pub fn merge_branch_repo( - repo: &Repository, - branch: &str, + repo: &Repository, + branch: &str, ) -> Result<()> { - let branch = repo.find_branch(branch, BranchType::Local)?; + let branch = repo.find_branch(branch, BranchType::Local)?; - let annotated = - repo.reference_to_annotated_commit(&branch.into_reference())?; + let annotated = + repo.reference_to_annotated_commit(&branch.into_reference())?; - let (analysis, _) = repo.merge_analysis(&[&annotated])?; + let (analysis, _) = repo.merge_analysis(&[&annotated])?; - //TODO: support merge on unborn - if analysis.is_unborn() { - return Err(Error::Generic("head is unborn".into())); - } + //TODO: support merge on unborn + if analysis.is_unborn() { + return Err(Error::Generic("head is unborn".into())); + } - let mut opt = MergeOptions::default(); + let mut opt = MergeOptions::default(); - repo.merge(&[&annotated], Some(&mut opt), None)?; + repo.merge(&[&annotated], Some(&mut opt), None)?; - Ok(()) + Ok(()) } /// pub fn merge_msg(repo_path: &str) -> Result<String> { - scope_time!("merge_msg"); + scope_time!("merge_msg"); - let repo = utils::repo(repo_path)?; - let content = repo.message()?; + let repo = utils::repo(repo_path)?; + let content = repo.message()?; - Ok(content) + Ok(content) } /// pub fn merge_commit( - repo_path: &str, - msg: &str, - ids: &[CommitId], + repo_path: &str, + msg: &str, + ids: &[CommitId], ) -> Result<CommitId> { - scope_time!("merge_commit"); + scope_time!("merge_commit"); - let repo = utils::repo(repo_path)?; + let repo = utils::repo(repo_path)?; - let mut commits: Vec<Commit> = Vec::new(); + let mut commits: Vec<Commit> = Vec::new(); - for id in ids { - commits.push(repo.find_commit((*id).into())?); - } + for id in ids { + commits.push(repo.find_commit((*id).into())?); + } - let id = commit_merge_with_head(&repo, &commits, msg)?; + let id = commit_merge_with_head(&repo, &commits, msg)?; - Ok(id) + Ok(id) } #[cfg(test)] mod tests { - use super::*; - use crate::sync::{ - create_branch, - tests::{repo_init, write_commit_file}, - }; - use pretty_assertions::assert_eq; + use super::*; + use crate::sync::{ + create_branch, + tests::{repo_init, write_commit_file}, + }; + use pretty_assertions::assert_eq; - #[test] - fn test_smoke() { - let (_td, repo) = repo_init().unwrap(); - let root = repo.path().parent().unwrap(); - let repo_path = root.as_os_str().to_str().unwrap(); + #[test] + fn test_smoke() { + let (_td, repo) = repo_init().unwrap(); + let root = repo.path().parent().unwrap(); + let repo_path = root.as_os_str().to_str().unwrap(); - let c1 = - write_commit_file(&repo, "test.txt", "test", "commit1"); + let c1 = + write_commit_file(&repo, "test.txt", "test", "commit1"); - create_branch(repo_path, "foo").unwrap(); + create_branch(repo_path, "foo").unwrap(); - write_commit_file(&repo, "test.txt", "test2", "commit2"); + write_commit_file(&repo, "test.txt", "test2", "commit2"); - merge_branch(repo_path, "master").unwrap(); + merge_branch(repo_path, "master").unwrap(); - let msg = merge_msg(repo_path).unwrap(); + let msg = merge_msg(repo_path).unwrap(); - assert_eq!(&msg[0..12], "Merge branch"); + assert_eq!(&msg[0..12], "Merge branch"); - let mergeheads = mergehead_ids(repo_path).unwrap(); + let mergeheads = mergehead_ids(repo_path).unwrap(); - assert_eq!(mergeheads[0], c1); - } + assert_eq!(mergeheads[0], c1); + } } |