Răsfoiți Sursa

Fix merge functionality to handle missing merge3 dependency gracefully

Fixes #1759
Jelmer Vernooij 5 luni în urmă
părinte
comite
15c6faad0c
3 a modificat fișierele cu 29 adăugiri și 0 ștergeri
  1. 4 0
      NEWS
  2. 20 0
      dulwich/merge.py
  3. 5 0
      tests/test_merge_drivers.py

+ 4 - 0
NEWS

@@ -1,5 +1,9 @@
 0.24.2	UNRELEASED
 
+ * Fix merge functionality to gracefully handle missing optional merge3 dependency
+   by raising informative ImportError with installation instructions.
+   (Jelmer Vernooij, #1759)
+
  * Fix worktree CLI tests to properly change to repository directory.
    (Jelmer Vernooij, #1738)
 

+ 20 - 0
dulwich/merge.py

@@ -163,6 +163,11 @@ def merge_blobs(
             return ours_blob.data, False
         else:
             # Both added different content - conflict
+            if merge3 is None:
+                raise ImportError(
+                    "merge3 module is required for three-way merging. "
+                    "Install it with: pip install merge3"
+                )
             m = merge3.Merge3(
                 [],
                 ours_blob.data.splitlines(True),
@@ -185,6 +190,11 @@ def merge_blobs(
                 return b"", False  # They didn't modify, accept deletion
             else:
                 # Conflict: we deleted, they modified
+                if merge3 is None:
+                    raise ImportError(
+                        "merge3 module is required for three-way merging. "
+                        "Install it with: pip install merge3"
+                    )
                 m = merge3.Merge3(
                     base_content.splitlines(True),
                     [],
@@ -197,6 +207,11 @@ def merge_blobs(
                 return b"", False  # We didn't modify, accept deletion
             else:
                 # Conflict: they deleted, we modified
+                if merge3 is None:
+                    raise ImportError(
+                        "merge3 module is required for three-way merging. "
+                        "Install it with: pip install merge3"
+                    )
                 m = merge3.Merge3(
                     base_content.splitlines(True),
                     ours_content.splitlines(True),
@@ -213,6 +228,11 @@ def merge_blobs(
         return ours_content, False
 
     # Perform three-way merge
+    if merge3 is None:
+        raise ImportError(
+            "merge3 module is required for three-way merging. "
+            "Install it with: pip install merge3"
+        )
     m = merge3.Merge3(
         base_content.splitlines(True),
         ours_content.splitlines(True),

+ 5 - 0
tests/test_merge_drivers.py

@@ -20,6 +20,7 @@
 
 """Tests for merge driver support."""
 
+import importlib.util
 import sys
 import unittest
 from typing import Optional
@@ -209,6 +210,10 @@ class MergeBlobsWithDriversTests(unittest.TestCase):
 
     def setUp(self):
         """Set up test fixtures."""
+        # Check if merge3 module is available
+        if importlib.util.find_spec("merge3") is None:
+            raise unittest.SkipTest("merge3 module not available, skipping merge tests")
+
         # Reset global registry
         global _merge_driver_registry
         from dulwich import merge_drivers