summaryrefslogtreecommitdiffstats
path: root/asyncgit/src/sync/merge.rs
diff options
context:
space:
mode:
Diffstat (limited to 'asyncgit/src/sync/merge.rs')
-rw-r--r--asyncgit/src/sync/merge.rs144
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);
+ }
}