Browse Source

Rename partial_clone to object_filters for clarity

Jelmer Vernooij 3 weeks ago
parent
commit
eb9790c9de
4 changed files with 31 additions and 24 deletions
  1. 7 3
      dulwich/object_filters.py
  2. 4 4
      dulwich/server.py
  3. 19 16
      tests/test_object_filters.py
  4. 1 1
      tests/test_server.py

+ 7 - 3
dulwich/partial_clone.py → dulwich/object_filters.py

@@ -1,4 +1,4 @@
-# partial_clone.py -- Partial clone filter specification handling
+# object_filters.py -- Object filtering for partial clone and similar operations
 # Copyright (C) 2024 Jelmer Vernooij <jelmer@jelmer.uk>
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
@@ -19,11 +19,15 @@
 # License, Version 2.0.
 #
 
-"""Partial clone filter specification parsing and handling.
+"""Object filtering for Git partial clone and pack generation.
 
-This module implements Git's partial clone filter specifications as documented in:
+This module implements Git's object filter specifications for partial clone,
+as documented in:
 https://git-scm.com/docs/rev-list-options#Documentation/rev-list-options.txt---filterltfilter-specgt
 
+Filter specifications control which objects are included when generating packs,
+enabling partial clone (downloading only needed objects) and similar operations.
+
 Supported filter specs:
 - blob:none - Exclude all blobs
 - blob:limit=<n>[kmg] - Exclude blobs larger than n bytes/KB/MB/GB

+ 4 - 4
dulwich/server.py

@@ -97,10 +97,7 @@ from .errors import (
     ObjectFormatException,
     UnexpectedCommandError,
 )
-from .object_store import MissingObjectFinder, PackBasedObjectStore, find_shallow
-from .objects import Commit, ObjectID, Tree, valid_hexsha
-from .pack import ObjectContainer, write_pack_from_container
-from .partial_clone import (
+from .object_filters import (
     CombineFilter,
     SparseOidFilter,
     TreeDepthFilter,
@@ -108,6 +105,9 @@ from .partial_clone import (
     filter_pack_objects_with_paths,
     parse_filter_spec,
 )
+from .object_store import MissingObjectFinder, PackBasedObjectStore, find_shallow
+from .objects import Commit, ObjectID, Tree, valid_hexsha
+from .pack import ObjectContainer, write_pack_from_container
 from .protocol import (
     CAPABILITIES_REF,
     CAPABILITY_AGENT,

+ 19 - 16
tests/test_partial_clone.py → tests/test_object_filters.py

@@ -1,4 +1,4 @@
-# test_partial_clone.py -- Tests for partial clone filter specifications
+# test_object_filters.py -- Tests for object filtering
 # Copyright (C) 2024 Jelmer Vernooij <jelmer@jelmer.uk>
 #
 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
@@ -19,14 +19,12 @@
 # License, Version 2.0.
 #
 
-"""Tests for partial clone filter specifications."""
+"""Tests for object filtering (partial clone filter specifications)."""
 
 import os
 import tempfile
 
-from dulwich.object_store import MemoryObjectStore
-from dulwich.objects import Blob, Tree
-from dulwich.partial_clone import (
+from dulwich.object_filters import (
     BlobLimitFilter,
     BlobNoneFilter,
     CombineFilter,
@@ -35,6 +33,8 @@ from dulwich.partial_clone import (
     filter_pack_objects,
     parse_filter_spec,
 )
+from dulwich.object_store import MemoryObjectStore
+from dulwich.objects import Blob, Tree
 from dulwich.repo import Repo
 from dulwich.tests.utils import make_commit
 
@@ -718,11 +718,11 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_tree_depth_filtering(self):
         """Test filtering by tree depth."""
-        from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import (
+        from dulwich.object_filters import (
             TreeDepthFilter,
             filter_pack_objects_with_paths,
         )
+        from dulwich.objects import Blob, Tree
         from dulwich.tests.utils import make_commit
 
         # Create a nested tree structure:
@@ -777,11 +777,11 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_sparse_oid_path_filtering(self):
         """Test filtering by sparse checkout patterns."""
-        from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import (
+        from dulwich.object_filters import (
             SparseOidFilter,
             filter_pack_objects_with_paths,
         )
+        from dulwich.objects import Blob, Tree
         from dulwich.tests.utils import make_commit
 
         # Create sparse patterns blob that includes only *.txt files
@@ -844,11 +844,11 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_blob_size_filtering_with_paths(self):
         """Test that blob size filtering still works with path tracking."""
-        from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import (
+        from dulwich.object_filters import (
             BlobLimitFilter,
             filter_pack_objects_with_paths,
         )
+        from dulwich.objects import Blob, Tree
         from dulwich.tests.utils import make_commit
 
         # Create blobs of different sizes
@@ -879,13 +879,13 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_combined_sparse_and_size_filter(self):
         """Test combining sparse patterns with blob size limits."""
-        from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import (
+        from dulwich.object_filters import (
             BlobLimitFilter,
             CombineFilter,
             SparseOidFilter,
             filter_pack_objects_with_paths,
         )
+        from dulwich.objects import Blob, Tree
         from dulwich.tests.utils import make_commit
 
         # Create sparse patterns: only *.txt files
@@ -938,8 +938,11 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_blob_none_filter_with_paths(self):
         """Test that blob:none excludes all blobs with path tracking."""
+        from dulwich.object_filters import (
+            BlobNoneFilter,
+            filter_pack_objects_with_paths,
+        )
         from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import BlobNoneFilter, filter_pack_objects_with_paths
         from dulwich.tests.utils import make_commit
 
         blob1 = Blob.from_string(b"content1")
@@ -968,11 +971,11 @@ class FilterPackObjectsWithPathsTests(TestCase):
 
     def test_direct_tree_want(self):
         """Test filtering when a tree (not commit) is wanted."""
-        from dulwich.objects import Blob, Tree
-        from dulwich.partial_clone import (
+        from dulwich.object_filters import (
             BlobLimitFilter,
             filter_pack_objects_with_paths,
         )
+        from dulwich.objects import Blob, Tree
 
         blob_small = Blob.from_string(b"small")
         blob_large = Blob.from_string(b"x" * 1000)

+ 1 - 1
tests/test_server.py

@@ -187,7 +187,7 @@ class UploadPackHandlerTestCase(TestCase):
 
     def test_filter_spec_parsed(self) -> None:
         """Test that filter specification is parsed from client capabilities."""
-        from dulwich.partial_clone import BlobNoneFilter
+        from dulwich.object_filters import BlobNoneFilter
 
         caps = [b"filter=blob:none", *list(self._handler.required_capabilities())]
         self._handler.set_client_capabilities(caps)