浏览代码

Only write Git index extensions when they contain meaningful data (#1644)

Previously, dulwich would write empty extensions to the index file,
causing unnecessary bloat. Now we filter out extensions with no data
before writing.

Fixes #1643
Jelmer Vernooij 1 月之前
父节点
当前提交
7e0b361d8a
共有 2 个文件被更改,包括 17 次插入2 次删除
  1. 7 0
      NEWS
  2. 10 2
      dulwich/index.py

+ 7 - 0
NEWS

@@ -1,3 +1,10 @@
+0.23.2	UNRELEASED
+
+ * Only write Git index extensions when they contain meaningful data.
+   Previously, dulwich would write empty extensions to the index file,
+   causing unnecessary bloat.
+   (Jelmer Vernooij, #1643)
+
 0.23.1	2025-06-30
 
  * Support ``untracked_files="normal"`` argument to ``porcelain.status``,

+ 10 - 2
dulwich/index.py

@@ -897,13 +897,21 @@ class Index:
 
         f = GitFile(self._filename, "wb")
         try:
+            # Filter out extensions with no meaningful data
+            meaningful_extensions = []
+            for ext in self._extensions:
+                # Skip extensions that have empty data
+                ext_data = ext.to_bytes()
+                if ext_data:
+                    meaningful_extensions.append(ext)
+
             if self._skip_hash:
                 # When skipHash is enabled, write the index without computing SHA1
                 write_index_dict(
                     cast(BinaryIO, f),
                     self._byname,
                     version=self._version,
-                    extensions=self._extensions,
+                    extensions=meaningful_extensions,
                 )
                 # Write 20 zero bytes instead of SHA1
                 f.write(b"\x00" * 20)
@@ -914,7 +922,7 @@ class Index:
                     cast(BinaryIO, sha1_writer),
                     self._byname,
                     version=self._version,
-                    extensions=self._extensions,
+                    extensions=meaningful_extensions,
                 )
                 sha1_writer.close()
         except: