Browse Source

Prevent removal of refs directory.

Jelmer Vernooij 4 years ago
parent
commit
37208088b5
3 changed files with 14 additions and 2 deletions
  1. 5 2
      NEWS
  2. 2 0
      dulwich/refs.py
  3. 7 0
      dulwich/tests/test_refs.py

+ 5 - 2
NEWS

@@ -1,6 +1,9 @@
-%(version)s	%(date)s
+0.20.22	UNRELEASED
 
-%(version)s	%(date)s
+ * Prevent removal of refs directory when the last ref is
+   deleted. (Jelmer Vernooij)
+
+0.20.21	2021-03-20
 
  * Add basic support for a GcsObjectStore that stores
    pack files in gcs. (Jelmer Vernooij)

+ 2 - 0
dulwich/refs.py

@@ -1068,6 +1068,8 @@ class DiskRefsContainer(RefsContainer):
             except ValueError:
                 break
 
+            if parent == b'refs':
+                break
             parent_filename = self.refpath(parent)
             try:
                 os.rmdir(parent_filename)

+ 7 - 0
dulwich/tests/test_refs.py

@@ -452,6 +452,13 @@ class DiskRefsContainerTests(RefsContainerTests, TestCase):
             b"42d06bd4b77fed026b154d16493e5deab78f02ec",
         )
 
+    def test_delete_refs_container(self):
+        # We shouldn't delete the refs directory
+        self._refs[b'refs/heads/blah'] = b"42d06bd4b77fed026b154d16493e5deab78f02ec"
+        for ref in self._refs.allkeys():
+            del self._refs[ref]
+        self.assertTrue(os.path.exists(os.path.join(self._refs.path, b'refs')))
+
     def test_setitem_packed(self):
         with open(os.path.join(self._refs.path, b"packed-refs"), "w") as f:
             f.write("# pack-refs with: peeled fully-peeled sorted \n")