浏览代码

Check core.repositoryformatversion.

Jelmer Vernooij 4 年之前
父节点
当前提交
5c8b3272a5
共有 3 个文件被更改,包括 25 次插入0 次删除
  1. 4 0
      NEWS
  2. 13 0
      dulwich/repo.py
  3. 8 0
      dulwich/tests/test_repository.py

+ 4 - 0
NEWS

@@ -1,3 +1,7 @@
+0.27.7	UNRELEASED
+
+ * Check core.repositoryformatversion. (Jelmer Vernooij, #803)
+
 0.20.6	2020-08-29
 
  * Add a ``RefsContainer.watch`` interface.

+ 13 - 0
dulwich/repo.py

@@ -963,6 +963,13 @@ def read_gitfile(f):
     return cs[len("gitdir: "):].rstrip("\n")
 
 
+class UnsupportedVersion(Exception):
+    """Unsupported repository version."""
+
+    def __init__(self, version):
+        self.version = version
+
+
 class Repo(BaseRepo):
     """A git repository backed by local disk.
 
@@ -1001,6 +1008,12 @@ class Repo(BaseRepo):
             self._commondir = self._controldir
         self.path = root
         config = self.get_config()
+        try:
+            format_version = int(config.get("core", "repositoryformatversion"))
+        except KeyError:
+            format_version = 0
+        if format_version != 0:
+            raise UnsupportedVersion(format_version)
         object_store = DiskObjectStore.from_config(
             os.path.join(self.commondir(), OBJECTDIR),
             config)

+ 8 - 0
dulwich/tests/test_repository.py

@@ -41,6 +41,7 @@ from dulwich.repo import (
     Repo,
     MemoryRepo,
     check_user_identity,
+    UnsupportedVersion,
     )
 from dulwich.tests import (
     TestCase,
@@ -872,6 +873,13 @@ class BuildRepoRootTests(TestCase):
         r = Repo(self._repo_dir)
         self.assertEqual(r.object_store.loose_compression_level, 4)
 
+    def test_repositoryformatversion(self):
+        r = self._repo
+        c = r.get_config()
+        c.set(('core',), 'repositoryformatversion', '2')
+        c.write_to_path()
+        self.assertRaises(UnsupportedVersion, Repo, self._repo_dir)
+
     def test_commit_encoding_from_config(self):
         r = self._repo
         c = r.get_config()