浏览代码

Support the looseCompression and compression settings.

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

+ 4 - 0
NEWS

@@ -3,6 +3,10 @@
  * Don't send "deepen None" to server if graph walker
    supports shallow. (Jelmer Vernooij, #747)
 
+ * Support tweaking the compression level for
+   loose objects through the "core.looseCompression" and
+   "core.compression" settings. (Jelmer Vernooij)
+
 0.19.15	2020-01-26
 
  * Properly handle files that are just executable for the

+ 14 - 0
dulwich/object_store.py

@@ -528,6 +528,20 @@ class DiskObjectStore(PackBasedObjectStore):
     def __repr__(self):
         return "<%s(%r)>" % (self.__class__.__name__, self.path)
 
+    @classmethod
+    def from_config(cls, path, config):
+        try:
+            default_compression_level = int(config.get(
+                (b'core', ), b'compression').decode())
+        except KeyError:
+            default_compression_level = -1
+        try:
+            loose_compression_level = int(config.get(
+                (b'core', ), b'looseCompression').decode())
+        except KeyError:
+            loose_compression_level = default_compression_level
+        return cls(path, loose_compression_level)
+
     @property
     def alternates(self):
         if self._alternates is not None:

+ 4 - 2
dulwich/repo.py

@@ -935,8 +935,10 @@ class Repo(BaseRepo):
         else:
             self._commondir = self._controldir
         self.path = root
-        object_store = DiskObjectStore(
-            os.path.join(self.commondir(), OBJECTDIR))
+        config = self.get_config()
+        object_store = DiskObjectStore.from_config(
+            os.path.join(self.commondir(), OBJECTDIR),
+            config)
         refs = DiskRefsContainer(self.commondir(), self._controldir,
                                  logger=self._write_reflog)
         BaseRepo.__init__(self, object_store, refs)

+ 9 - 0
dulwich/tests/test_repository.py

@@ -864,6 +864,15 @@ class BuildRepoRootTests(TestCase):
             encoding=b"iso8859-1")
         self.assertEqual(b"iso8859-1", r[commit_sha].encoding)
 
+    def test_compression_level(self):
+        r = self._repo
+        c = r.get_config()
+        c.set(('core',), 'compression', '3')
+        c.set(('core',), 'looseCompression', '4')
+        c.write_to_path()
+        r = Repo(self._repo_dir)
+        self.assertEqual(r.object_store.loose_compression_level, 4)
+
     def test_commit_encoding_from_config(self):
         r = self._repo
         c = r.get_config()