@@ -621,7 +621,10 @@ def merge(
621
621
with self .release_odb_handles ():
622
622
self .repo .index .read (False )
623
623
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
625
628
626
629
if analysis == GIT_MERGE_ANALYSIS_NONE :
627
630
raise SCMError (f"'{ rev } ' cannot be merged into HEAD" )
@@ -652,19 +655,7 @@ def merge(
652
655
raise SCMError (f"Cannot fast-forward HEAD to '{ rev } '" )
653
656
654
657
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 )
668
659
669
660
# --squash merge:
670
661
# HEAD is not moved and merge changes stay in index
@@ -686,5 +677,20 @@ def _merge_ff(self, rev: str, obj) -> str:
686
677
)
687
678
return str (obj .id )
688
679
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
+
689
695
def validate_git_remote (self , url : str , ** kwargs ):
690
696
raise NotImplementedError
0 commit comments