Skip to content

Commit e504b4f

Browse files
committed
pygit: wrap exceptions from merge_analysis
1 parent d4d1917 commit e504b4f

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

scmrepo/git/backend/pygit2.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,10 @@ def merge(
621621
with self.release_odb_handles():
622622
self.repo.index.read(False)
623623
obj, _ref = self.repo.resolve_refish(rev)
624-
analysis, ff_pref = self.repo.merge_analysis(obj.id)
624+
try:
625+
analysis, ff_pref = self.repo.merge_analysis(obj.id)
626+
except GitError as exc:
627+
raise SCMError("Merge analysis failed") from exc
625628

626629
if analysis == GIT_MERGE_ANALYSIS_NONE:
627630
raise SCMError(f"'{rev}' cannot be merged into HEAD")
@@ -652,19 +655,7 @@ def merge(
652655
raise SCMError(f"Cannot fast-forward HEAD to '{rev}'")
653656

654657
if commit:
655-
if not msg:
656-
raise SCMError("Merge commit message is required")
657-
user = self.default_signature
658-
tree = self.repo.index.write_tree()
659-
merge_commit = self.repo.create_commit(
660-
"HEAD",
661-
user,
662-
user,
663-
msg,
664-
tree,
665-
[self.repo.head.target, obj.id],
666-
)
667-
return str(merge_commit)
658+
return self._merge_commit(msg, obj)
668659

669660
# --squash merge:
670661
# HEAD is not moved and merge changes stay in index
@@ -686,5 +677,20 @@ def _merge_ff(self, rev: str, obj) -> str:
686677
)
687678
return str(obj.id)
688679

680+
def _merge_commit(self, msg: Optional[str], obj) -> str:
681+
if not msg:
682+
raise SCMError("Merge commit message is required")
683+
user = self.default_signature
684+
tree = self.repo.index.write_tree()
685+
merge_commit = self.repo.create_commit(
686+
"HEAD",
687+
user,
688+
user,
689+
msg,
690+
tree,
691+
[self.repo.head.target, obj.id],
692+
)
693+
return str(merge_commit)
694+
689695
def validate_git_remote(self, url: str, **kwargs):
690696
raise NotImplementedError

0 commit comments

Comments
 (0)