mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2025-01-06 09:41:27 +03:00
Merge pull request #4446 from gitbutlerapp/error-codes-for-commit-failures
Adds error codes for commit failures
This commit is contained in:
commit
603df1c998
@ -1697,18 +1697,23 @@ pub fn commit(
|
|||||||
Some(&["../.husky"]),
|
Some(&["../.husky"]),
|
||||||
&mut message_buffer,
|
&mut message_buffer,
|
||||||
)
|
)
|
||||||
.context("failed to run hook")?;
|
.context("failed to run hook")
|
||||||
|
.context(Code::CommitHookFailed)?;
|
||||||
|
|
||||||
if let HookResult::RunNotSuccessful { stdout, .. } = hook_result {
|
if let HookResult::RunNotSuccessful { stdout, .. } = hook_result {
|
||||||
bail!("commit-msg hook rejected: {}", stdout.trim());
|
return Err(anyhow!("commit-msg hook rejected: {}", stdout.trim())
|
||||||
|
.context(Code::CommitHookFailed));
|
||||||
}
|
}
|
||||||
|
|
||||||
let hook_result =
|
let hook_result =
|
||||||
git2_hooks::hooks_pre_commit(project_repository.repo(), Some(&["../.husky"]))
|
git2_hooks::hooks_pre_commit(project_repository.repo(), Some(&["../.husky"]))
|
||||||
.context("failed to run hook")?;
|
.context("failed to run hook")
|
||||||
|
.context(Code::CommitHookFailed)?;
|
||||||
|
|
||||||
if let HookResult::RunNotSuccessful { stdout, .. } = hook_result {
|
if let HookResult::RunNotSuccessful { stdout, .. } = hook_result {
|
||||||
bail!("commit hook rejected: {}", stdout.trim());
|
return Err(
|
||||||
|
anyhow!("commit hook rejected: {}", stdout.trim()).context(Code::CommitHookFailed)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1725,9 +1730,12 @@ pub fn commit(
|
|||||||
.find(|(branch, _)| branch.id == branch_id)
|
.find(|(branch, _)| branch.id == branch_id)
|
||||||
.with_context(|| format!("branch {branch_id} not found"))?;
|
.with_context(|| format!("branch {branch_id} not found"))?;
|
||||||
|
|
||||||
update_conflict_markers(project_repository, &files)?;
|
update_conflict_markers(project_repository, &files)
|
||||||
|
.context(Code::CommitMergeConflictFailure)?;
|
||||||
|
|
||||||
project_repository.assure_unconflicted()?;
|
project_repository
|
||||||
|
.assure_unconflicted()
|
||||||
|
.context(Code::CommitMergeConflictFailure)?;
|
||||||
|
|
||||||
let tree_oid = if let Some(ownership) = ownership {
|
let tree_oid = if let Some(ownership) = ownership {
|
||||||
let files = files.into_iter().filter_map(|(filepath, hunks)| {
|
let files = files.into_iter().filter_map(|(filepath, hunks)| {
|
||||||
@ -1766,8 +1774,9 @@ pub fn commit(
|
|||||||
.context(format!("failed to find tree {:?}", tree_oid))?;
|
.context(format!("failed to find tree {:?}", tree_oid))?;
|
||||||
|
|
||||||
// now write a commit, using a merge parent if it exists
|
// now write a commit, using a merge parent if it exists
|
||||||
let extra_merge_parent =
|
let extra_merge_parent = conflicts::merge_parent(project_repository)
|
||||||
conflicts::merge_parent(project_repository).context("failed to get merge parent")?;
|
.context("failed to get merge parent")
|
||||||
|
.context(Code::CommitMergeConflictFailure)?;
|
||||||
|
|
||||||
let commit_oid = match extra_merge_parent {
|
let commit_oid = match extra_merge_parent {
|
||||||
Some(merge_parent) => {
|
Some(merge_parent) => {
|
||||||
@ -1780,7 +1789,9 @@ pub fn commit(
|
|||||||
&[&parent_commit, &merge_parent],
|
&[&parent_commit, &merge_parent],
|
||||||
None,
|
None,
|
||||||
)?;
|
)?;
|
||||||
conflicts::clear(project_repository).context("failed to clear conflicts")?;
|
conflicts::clear(project_repository)
|
||||||
|
.context("failed to clear conflicts")
|
||||||
|
.context(Code::CommitMergeConflictFailure)?;
|
||||||
commit_oid
|
commit_oid
|
||||||
}
|
}
|
||||||
None => project_repository.commit(message, &tree, &[&parent_commit], None)?,
|
None => project_repository.commit(message, &tree, &[&parent_commit], None)?,
|
||||||
@ -1788,7 +1799,8 @@ pub fn commit(
|
|||||||
|
|
||||||
if run_hooks {
|
if run_hooks {
|
||||||
git2_hooks::hooks_post_commit(project_repository.repo(), Some(&["../.husky"]))
|
git2_hooks::hooks_post_commit(project_repository.repo(), Some(&["../.husky"]))
|
||||||
.context("failed to run hook")?;
|
.context("failed to run hook")
|
||||||
|
.context(Code::CommitHookFailed)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let vb_state = project_repository.project().virtual_branches();
|
let vb_state = project_repository.project().virtual_branches();
|
||||||
|
@ -2163,7 +2163,10 @@ fn pre_commit_hook_rejection() -> Result<()> {
|
|||||||
let res = commit(project_repository, branch1_id, "test commit", None, true);
|
let res = commit(project_repository, branch1_id, "test commit", None, true);
|
||||||
|
|
||||||
let err = res.unwrap_err();
|
let err = res.unwrap_err();
|
||||||
assert_eq!(err.to_string(), "commit hook rejected: rejected");
|
assert_eq!(
|
||||||
|
err.source().unwrap().to_string(),
|
||||||
|
"commit hook rejected: rejected"
|
||||||
|
);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -2256,7 +2259,10 @@ fn commit_msg_hook_rejection() -> Result<()> {
|
|||||||
let res = commit(project_repository, branch1_id, "test commit", None, true);
|
let res = commit(project_repository, branch1_id, "test commit", None, true);
|
||||||
|
|
||||||
let err = res.unwrap_err();
|
let err = res.unwrap_err();
|
||||||
assert_eq!(err.to_string(), "commit-msg hook rejected: rejected");
|
assert_eq!(
|
||||||
|
err.source().unwrap().to_string(),
|
||||||
|
"commit-msg hook rejected: rejected"
|
||||||
|
);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,8 @@ pub enum Code {
|
|||||||
ProjectGitAuth,
|
ProjectGitAuth,
|
||||||
DefaultTargetNotFound,
|
DefaultTargetNotFound,
|
||||||
CommitSigningFailed,
|
CommitSigningFailed,
|
||||||
|
CommitHookFailed,
|
||||||
|
CommitMergeConflictFailure,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::fmt::Display for Code {
|
impl std::fmt::Display for Code {
|
||||||
@ -142,6 +144,8 @@ impl std::fmt::Display for Code {
|
|||||||
Code::ProjectGitAuth => "errors.projects.git.auth",
|
Code::ProjectGitAuth => "errors.projects.git.auth",
|
||||||
Code::DefaultTargetNotFound => "errors.projects.default_target.not_found",
|
Code::DefaultTargetNotFound => "errors.projects.default_target.not_found",
|
||||||
Code::CommitSigningFailed => "errors.commit.signing_failed",
|
Code::CommitSigningFailed => "errors.commit.signing_failed",
|
||||||
|
Code::CommitHookFailed => "errors.commit.hook_failed",
|
||||||
|
Code::CommitMergeConflictFailure => "errors.commit.merge_conflict_failure",
|
||||||
};
|
};
|
||||||
f.write_str(code)
|
f.write_str(code)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user