Commit Diff


commit - ce10dd1ea24c4100428ebe322e17c73c73ae3474
commit + 26246d71f3ba583c13c99c25114cc2396da836b4
blob - 0011d02259c9d6d075f7be453fb014257758f0a7
blob + ddbbb2608f5a854380539c12e6ba871564aa6cf8
--- dulwich/client.py
+++ dulwich/client.py
@@ -172,8 +172,18 @@ def _win32_peek_avail(handle):
 
 
 COMMON_CAPABILITIES = [CAPABILITY_OFS_DELTA, CAPABILITY_SIDE_BAND_64K]
-UPLOAD_CAPABILITIES = [CAPABILITY_THIN_PACK, CAPABILITY_MULTI_ACK, CAPABILITY_MULTI_ACK_DETAILED, CAPABILITY_SHALLOW, *COMMON_CAPABILITIES]
-RECEIVE_CAPABILITIES = [CAPABILITY_REPORT_STATUS, CAPABILITY_DELETE_REFS, *COMMON_CAPABILITIES]
+UPLOAD_CAPABILITIES = [
+    CAPABILITY_THIN_PACK,
+    CAPABILITY_MULTI_ACK,
+    CAPABILITY_MULTI_ACK_DETAILED,
+    CAPABILITY_SHALLOW,
+    *COMMON_CAPABILITIES,
+]
+RECEIVE_CAPABILITIES = [
+    CAPABILITY_REPORT_STATUS,
+    CAPABILITY_DELETE_REFS,
+    *COMMON_CAPABILITIES,
+]
 
 
 class ReportStatusParser:
@@ -888,9 +898,7 @@ class GitClient:
             k, v = parse_capability(capability)
             if k == CAPABILITY_AGENT:
                 agent = v
-        unknown_capabilities = (  # noqa: F841
-            extract_capability_names(server_capabilities) - KNOWN_RECEIVE_CAPABILITIES
-        )
+        (extract_capability_names(server_capabilities) - KNOWN_RECEIVE_CAPABILITIES)
         # TODO(jelmer): warn about unknown capabilities
         return negotiated_capabilities, agent
 
@@ -940,9 +948,7 @@ class GitClient:
         return None
 
     def _negotiate_upload_pack_capabilities(self, server_capabilities):
-        unknown_capabilities = (  # noqa: F841
-            extract_capability_names(server_capabilities) - KNOWN_UPLOAD_CAPABILITIES
-        )
+        (extract_capability_names(server_capabilities) - KNOWN_UPLOAD_CAPABILITIES)
         # TODO(jelmer): warn about unknown capabilities
         symrefs = {}
         agent = None
@@ -1018,7 +1024,7 @@ class TraditionalGitClient(GitClient):
           cmd: The git service name to which we should connect.
           path: The path we should pass to the service. (as bytestirng)
         """
-        raise NotImplementedError()
+        raise NotImplementedError
 
     def send_pack(self, path, update_refs, generate_pack_data, progress=None):
         """Upload a pack to a remote repository.
@@ -1618,6 +1624,7 @@ class SubprocessSSHVendor(SSHVendor):
 
         if ssh_command:
             import shlex
+
             args = [*shlex.split(ssh_command, posix=sys.platform != "win32"), "-x"]
         else:
             args = ["ssh", "-x"]
@@ -1659,6 +1666,7 @@ class PLinkSSHVendor(SSHVendor):
     ):
         if ssh_command:
             import shlex
+
             args = [*shlex.split(ssh_command, posix=sys.platform != "win32"), "-ssh"]
         elif sys.platform == "win32":
             args = ["plink.exe", "-ssh"]
@@ -2268,7 +2276,7 @@ class Urllib3HttpGitClient(AbstractHttpGitClient):
             raise GitProtocolError(str(e)) from e
 
         if resp.status == 404:
-            raise NotGitRepository()
+            raise NotGitRepository
         if resp.status == 401:
             raise HTTPUnauthorized(resp.headers.get("WWW-Authenticate"), url)
         if resp.status == 407:
blob - 57af8991566be1982fe87e2daf2457ae057ba10a
blob + 19f35ce31de8b5488a569b9f742b26e7434e67d1
--- dulwich/config.py
+++ dulwich/config.py
@@ -364,11 +364,9 @@ class ConfigDict(Config, MutableMapping[Section, Mutab
 
 def _format_string(value: bytes) -> bytes:
     if (
-        value.startswith(b" ")
-        or value.startswith(b"\t")
-        or value.endswith(b" ")
+        value.startswith((b" ", b"\t"))
+        or value.endswith((b" ", b"\t"))
         or b"#" in value
-        or value.endswith(b"\t")
     ):
         return b'"' + _escape_value(value) + b'"'
     else:
blob - bd3e0767dfd307c8e79fa80683da9b4c2143f857
blob + 89012677c04fb8e77b6f4df88d1ed21515aa0994
--- dulwich/contrib/requests_vendor.py
+++ dulwich/contrib/requests_vendor.py
@@ -72,7 +72,7 @@ class RequestsHttpGitClient(AbstractHttpGitClient):
             resp = self.session.get(url, headers=req_headers)
 
         if resp.status_code == 404:
-            raise NotGitRepository()
+            raise NotGitRepository
         if resp.status_code == 401:
             raise HTTPUnauthorized(resp.headers.get("WWW-Authenticate"), url)
         if resp.status_code == 407:
blob - 9280bd026273ea3a650443380885f6c3b4513825
blob + 588e4e24428de3565f982884a49a3b9698cb29b2
--- dulwich/contrib/swift.py
+++ dulwich/contrib/swift.py
@@ -305,7 +305,9 @@ class SwiftConnector:
             o_store for o_store in catalogs if o_store["type"] == "object-store"
         )
         endpoints = object_store["endpoints"]
-        endpoint = next(endp for endp in endpoints if endp["region"] == self.region_name)
+        endpoint = next(
+            endp for endp in endpoints if endp["region"] == self.region_name
+        )
         return endpoint[self.endpoint_type], token
 
     def test_root_exists(self):
blob - 1f8756f4cba991159a3e43a954eb29ac1263e271
blob + 7e8ed261b8c47bc1d7b663a4574e91931880cc98
--- dulwich/contrib/test_release_robot.py
+++ dulwich/contrib/test_release_robot.py
@@ -70,7 +70,9 @@ class GetRecentTagsTest(unittest.TestCase):
     test_repo = os.path.join(BASEDIR, "dulwich_test_repo.zip")
     committer = b"Mark Mikofski <mark.mikofski@sunpowercorp.com>"
     test_tags: ClassVar[List[bytes]] = [b"v0.1a", b"v0.1"]
-    tag_test_data: ClassVar[Dict[bytes, Tuple[int, bytes, Optional[Tuple[int, bytes]]]]] = {
+    tag_test_data: ClassVar[
+        Dict[bytes, Tuple[int, bytes, Optional[Tuple[int, bytes]]]]
+    ] = {
         test_tags[0]: (1484788003, b"3" * 40, None),
         test_tags[1]: (1484788314, b"1" * 40, (1484788401, b"2" * 40)),
     }
blob - ff1352138d49a02f0b6895c0e0e453a7a9a01119
blob + 32015c225076acdc6e13bfd76727c7682622f88b
--- dulwich/contrib/test_swift.py
+++ dulwich/contrib/test_swift.py
@@ -36,12 +36,12 @@ from ..tests.test_object_store import ObjectStoreTests
 missing_libs = []
 
 try:
-    import gevent  # noqa:F401
+    import gevent  # noqa: F401
 except ModuleNotFoundError:
     missing_libs.append("gevent")
 
 try:
-    import geventhttpclient  # noqa:F401
+    import geventhttpclient  # noqa: F401
 except ModuleNotFoundError:
     missing_libs.append("geventhttpclient")
 
@@ -170,7 +170,7 @@ def create_commit(data, marker=b"Default", blob=None):
 
 def create_commits(length=1, marker=b"Default"):
     data = []
-    for i in range(0, length):
+    for i in range(length):
         _marker = (f"{marker}_{i}").encode()
         blob, tree, tag, cmt = create_commit(data, _marker)
         data.extend([blob, tree, tag, cmt])
blob - 3c520c62c1e30e7a51d502f0decfc5b1581dd361
blob + 2a19f6df2b680aeb87dcd5e56cdd3e03e22b9942
--- dulwich/contrib/test_swift_smoke.py
+++ dulwich/contrib/test_swift_smoke.py
@@ -43,8 +43,8 @@ from gevent import monkey
 
 monkey.patch_all()
 
-from dulwich import client, index, objects, repo, server  # noqa:E402
-from dulwich.contrib import swift  # noqa:E402
+from dulwich import client, index, objects, repo, server  # noqa: E402
+from dulwich.contrib import swift  # noqa: E402
 
 
 class DulwichServer:
blob - c5a367196d6757f0f4b8803cd6961e7f906be748
blob + 4263d0d9695ef509fe320cb62f442b599a5d2bcc
--- dulwich/fastexport.py
+++ dulwich/fastexport.py
@@ -148,7 +148,6 @@ class GitImportProcessor(processor.ImportProcessor):
 
     def checkpoint_handler(self, cmd):
         """Process a CheckpointCommand."""
-        pass
 
     def commit_handler(self, cmd):
         """Process a CommitCommand."""
@@ -211,7 +210,6 @@ class GitImportProcessor(processor.ImportProcessor):
 
     def progress_handler(self, cmd):
         """Process a ProgressCommand."""
-        pass
 
     def _reset_base(self, commit_id):
         if self.last_commit == commit_id:
blob - 16a4b49a9d1a051fc643cd84c4d8b012022226ea
blob + b1f56fc573b2539de62a69987e4a6b8a12cc6ca9
--- dulwich/hooks.py
+++ dulwich/hooks.py
@@ -98,8 +98,8 @@ class ShellHook(Hook):
 
         try:
             ret = subprocess.call(
-                [os.path.relpath(self.filepath, self.cwd), *list(args)],
-                cwd=self.cwd)
+                [os.path.relpath(self.filepath, self.cwd), *list(args)], cwd=self.cwd
+            )
             if ret != 0:
                 if self.post_exec_callback is not None:
                     self.post_exec_callback(0, *args)
blob - 739f5c4f6fba0aa77d91442fb5514a67807dc941
blob + f7b9adbc78f05c2f002b105c6f545e0a9ba3b567
--- dulwich/index.py
+++ dulwich/index.py
@@ -481,14 +481,14 @@ class Index:
         """Return the (git object) SHA1 for the object at a path."""
         value = self[path]
         if isinstance(value, ConflictedIndexEntry):
-            raise UnmergedEntries()
+            raise UnmergedEntries
         return value.sha
 
     def get_mode(self, path: bytes) -> int:
         """Return the POSIX file mode for the object at a path."""
         value = self[path]
         if isinstance(value, ConflictedIndexEntry):
-            raise UnmergedEntries()
+            raise UnmergedEntries
         return value.mode
 
     def iterobjects(self) -> Iterable[Tuple[bytes, bytes, int]]:
@@ -496,7 +496,7 @@ class Index:
         for path in self:
             entry = self[path]
             if isinstance(entry, ConflictedIndexEntry):
-                raise UnmergedEntries()
+                raise UnmergedEntries
             yield path, entry.sha, cleanup_mode(entry.mode)
 
     def has_conflicts(self) -> bool:
blob - d7c042179c00dd629c0dbf766719b6d9c628ab69
blob + 2821176546cd6d7395021a78d35afe42bb0b36fa
--- dulwich/pack.py
+++ dulwich/pack.py
@@ -1914,7 +1914,9 @@ def pack_objects_to_data(
         return (
             count,
             deltify_pack_objects(
-                iter(objects), window_size=delta_window_size, progress=progress  # type: ignore
+                iter(objects),  # type: ignore
+                window_size=delta_window_size,
+                progress=progress,
             ),
         )
     else:
blob - b15ef08e6b469721c2ed3551c5ee0dc96d28be13
blob + aa6ae410a1e128cb3cbe99b9eb4a61a02c57c985
--- dulwich/porcelain.py
+++ dulwich/porcelain.py
@@ -624,9 +624,7 @@ def clean(repo=".", target_dir=None):
             raise Error("target_dir must be in the repo's working dir")
 
         config = r.get_config_stack()
-        require_force = config.get_boolean(  # noqa: F841
-            (b"clean",), b"requireForce", True
-        )
+        config.get_boolean((b"clean",), b"requireForce", True)
 
         # TODO(jelmer): if require_force is set, then make sure that -f, -i or
         # -n is specified.
blob - 2725795e7fae60c0f16406e40bbdfc23a5b5ee09
blob + de2618779071a60d78270ed38abfb4f5b95e5025
--- dulwich/protocol.py
+++ dulwich/protocol.py
@@ -77,10 +77,29 @@ COMMON_CAPABILITIES = [
     CAPABILITY_NO_PROGRESS,
 ]
 KNOWN_UPLOAD_CAPABILITIES = set(
-    [*COMMON_CAPABILITIES, CAPABILITY_THIN_PACK, CAPABILITY_MULTI_ACK, CAPABILITY_MULTI_ACK_DETAILED, CAPABILITY_INCLUDE_TAG, CAPABILITY_DEEPEN_SINCE, CAPABILITY_SYMREF, CAPABILITY_SHALLOW, CAPABILITY_DEEPEN_NOT, CAPABILITY_DEEPEN_RELATIVE, CAPABILITY_ALLOW_TIP_SHA1_IN_WANT, CAPABILITY_ALLOW_REACHABLE_SHA1_IN_WANT]
+    [
+        *COMMON_CAPABILITIES,
+        CAPABILITY_THIN_PACK,
+        CAPABILITY_MULTI_ACK,
+        CAPABILITY_MULTI_ACK_DETAILED,
+        CAPABILITY_INCLUDE_TAG,
+        CAPABILITY_DEEPEN_SINCE,
+        CAPABILITY_SYMREF,
+        CAPABILITY_SHALLOW,
+        CAPABILITY_DEEPEN_NOT,
+        CAPABILITY_DEEPEN_RELATIVE,
+        CAPABILITY_ALLOW_TIP_SHA1_IN_WANT,
+        CAPABILITY_ALLOW_REACHABLE_SHA1_IN_WANT,
+    ]
 )
 KNOWN_RECEIVE_CAPABILITIES = set(
-    [*COMMON_CAPABILITIES, CAPABILITY_REPORT_STATUS, CAPABILITY_DELETE_REFS, CAPABILITY_QUIET, CAPABILITY_ATOMIC]
+    [
+        *COMMON_CAPABILITIES,
+        CAPABILITY_REPORT_STATUS,
+        CAPABILITY_DELETE_REFS,
+        CAPABILITY_QUIET,
+        CAPABILITY_ATOMIC,
+    ]
 )
 
 DEPTH_INFINITE = 0x7FFFFFFF
@@ -193,7 +212,7 @@ class Protocol:
         try:
             sizestr = read(4)
             if not sizestr:
-                raise HangupException()
+                raise HangupException
             size = int(sizestr, 16)
             if size == 0 or size == 1:  # flush-pkt or delim-pkt
                 if self.report_activity:
@@ -203,7 +222,7 @@ class Protocol:
                 self.report_activity(size, "read")
             pkt_contents = read(size - 4)
         except ConnectionResetError as exc:
-            raise HangupException() from exc
+            raise HangupException from exc
         except OSError as exc:
             raise GitProtocolError(str(exc)) from exc
         else:
blob - 745ba78d451386421aea6f116ecccf863a25a012
blob + d87c93382b8d392870534e8be78d2f3dcc2eecbe
--- dulwich/repo.py
+++ dulwich/repo.py
@@ -95,24 +95,24 @@ from .objects import (
     valid_hexsha,
 )
 from .pack import generate_unpacked_objects
-from .refs import (  # noqa: F401
-    ANNOTATED_TAG_SUFFIX,
+from .refs import (
+    ANNOTATED_TAG_SUFFIX,  # noqa: F401
     LOCAL_BRANCH_PREFIX,
-    LOCAL_TAG_PREFIX,
-    SYMREF,
+    LOCAL_TAG_PREFIX,  # noqa: F401
+    SYMREF,  # noqa: F401
     DictRefsContainer,
     DiskRefsContainer,
-    InfoRefsContainer,
+    InfoRefsContainer,  # noqa: F401
     Ref,
     RefsContainer,
     _set_default_branch,
     _set_head,
     _set_origin_head,
-    check_ref_format,
-    read_packed_refs,
-    read_packed_refs_with_peeled,
+    check_ref_format,  # noqa: F401
+    read_packed_refs,  # noqa: F401
+    read_packed_refs_with_peeled,  # noqa: F401
     serialize_refs,
-    write_packed_refs,
+    write_packed_refs,  # noqa: F401
 )
 
 CONTROLDIR = ".git"
@@ -1366,7 +1366,7 @@ class Repo(BaseRepo):
         from .index import Index
 
         if not self.has_index():
-            raise NoIndexPresent()
+            raise NoIndexPresent
         return Index(self.index_path())
 
     def has_index(self):
@@ -1915,7 +1915,7 @@ class MemoryRepo(BaseRepo):
         Raises:
           NoIndexPresent: Raised when no index is present
         """
-        raise NoIndexPresent()
+        raise NoIndexPresent
 
     def get_config(self):
         """Retrieve the config object.
blob - e9e5ffb92a76fb7f34b19e595d7b8020781057b7
blob + 7fe34f7a969f5dca85908b43263c2c9c59f9b6c9
--- dulwich/tests/__init__.py
+++ dulwich/tests/__init__.py
@@ -156,11 +156,6 @@ def self_test_suite():
 
 
 def tutorial_test_suite():
-    import dulwich.client
-    import dulwich.config
-    import dulwich.index
-    import dulwich.patch  # noqa: F401
-
     tutorial = [
         "introduction",
         "file-format",
blob - 353813f4c029b63576e11ef29d626feea4370bbd
blob + cdc7dd9934035eb6c1609920e52790b253ef1efe
--- dulwich/tests/compat/test_client.py
+++ dulwich/tests/compat/test_client.py
@@ -73,10 +73,10 @@ class DulwichClientTestBase:
                 self.assertReposEqual(src, dest)
 
     def _client(self):
-        raise NotImplementedError()
+        raise NotImplementedError
 
     def _build_path(self):
-        raise NotImplementedError()
+        raise NotImplementedError
 
     def _do_send_pack(self):
         c = self._client()
blob - c75b07f90f1117609f1545a3f81b03239c05817d
blob + 993603a9583017fdc8a19b8969b65c64a4349db1
--- dulwich/tests/compat/test_pack.py
+++ dulwich/tests/compat/test_pack.py
@@ -101,7 +101,11 @@ class TestPack(PackTests):
             new_blob.data = orig_blob.data + (b"x" * 2**20)
             new_blob_2 = Blob()
             new_blob_2.data = new_blob.data + b"y"
-            all_to_pack = [*list(orig_pack.pack_tuples()), (new_blob, None), (new_blob_2, None)]
+            all_to_pack = [
+                *list(orig_pack.pack_tuples()),
+                (new_blob, None),
+                (new_blob_2, None),
+            ]
             pack_path = os.path.join(self._tempdir, "pack_with_deltas")
             write_pack(pack_path, all_to_pack, deltify=True)
         output = run_git_or_fail(["verify-pack", "-v", pack_path])
@@ -137,7 +141,11 @@ class TestPack(PackTests):
             new_blob.data = "big blob" + ("x" * 2**25)
             new_blob_2 = Blob()
             new_blob_2.data = new_blob.data + "y"
-            all_to_pack = [*list(orig_pack.pack_tuples()), (new_blob, None), (new_blob_2, None)]
+            all_to_pack = [
+                *list(orig_pack.pack_tuples()),
+                (new_blob, None),
+                (new_blob_2, None),
+            ]
             pack_path = os.path.join(self._tempdir, "pack_with_deltas")
             write_pack(pack_path, all_to_pack, deltify=True)
         output = run_git_or_fail(["verify-pack", "-v", pack_path])
blob - c92e69fec98216b95cbb8965b278c9eab5cf8939
blob + 6b79de15fb60d32d08fc6e6cc321b7d6cf8c126d
--- dulwich/tests/test_client.py
+++ dulwich/tests/test_client.py
@@ -726,10 +726,10 @@ class TestSSHVendor:
         class Subprocess:
             pass
 
-        setattr(Subprocess, "read", lambda: None)
-        setattr(Subprocess, "write", lambda: None)
-        setattr(Subprocess, "close", lambda: None)
-        setattr(Subprocess, "can_read", lambda: None)
+        Subprocess.read = lambda: None
+        Subprocess.write = lambda: None
+        Subprocess.close = lambda: None
+        Subprocess.can_read = lambda: None
         return Subprocess()
 
 
@@ -1571,7 +1571,15 @@ class PLinkSSHVendorTests(TestCase):
             binary = ["plink.exe", "-ssh"]
         else:
             binary = ["plink", "-ssh"]
-        expected = [*binary, "-pw", "12345", "-i", "/tmp/id_rsa", "host", "git-clone-url"]
+        expected = [
+            *binary,
+            "-pw",
+            "12345",
+            "-i",
+            "/tmp/id_rsa",
+            "host",
+            "git-clone-url",
+        ]
         self.assertListEqual(expected, args[0])
 
     def test_run_command_password(self):
@@ -1612,7 +1620,15 @@ class PLinkSSHVendorTests(TestCase):
             binary = ["plink.exe", "-ssh"]
         else:
             binary = ["plink", "-ssh"]
-        expected = [*binary, "-P", "2200", "-i", "/tmp/id_rsa", "user@host", "git-clone-url"]
+        expected = [
+            *binary,
+            "-P",
+            "2200",
+            "-i",
+            "/tmp/id_rsa",
+            "user@host",
+            "git-clone-url",
+        ]
 
         vendor = PLinkSSHVendor()
         command = vendor.run_command(
blob - d18c3d8a9f4d4e5c77529f392098111e25ae53ac
blob + 3581f2b533b9edc65773a579d070af304d7e2705
--- dulwich/tests/test_greenthreads.py
+++ dulwich/tests/test_greenthreads.py
@@ -56,7 +56,7 @@ def create_commit(marker=None):
 
 def init_store(store, count=1):
     ret = []
-    for i in range(0, count):
+    for i in range(count):
         objs = create_commit(marker=("%d" % i).encode("ascii"))
         for obj in objs:
             ret.append(obj)
blob - 5dbae9c579b0df52c91baac1572f87152584e5f9
blob + a05ea85564e5f0fed8a0e7f2ef3919c2a7981af6
--- dulwich/tests/test_porcelain.py
+++ dulwich/tests/test_porcelain.py
@@ -2088,11 +2088,15 @@ class PushTests(PorcelainTestCase):
 
             # Get the change in the target repo corresponding to the add
             # this will be in the foo branch.
-            change = next(iter(tree_changes(
-                    self.repo,
-                    self.repo[b"HEAD"].tree,
-                    self.repo[b"refs/heads/foo"].tree,
-                )))
+            change = next(
+                iter(
+                    tree_changes(
+                        self.repo,
+                        self.repo[b"HEAD"].tree,
+                        self.repo[b"refs/heads/foo"].tree,
+                    )
+                )
+            )
             self.assertEqual(
                 os.path.basename(fullpath), change.new.path.decode("ascii")
             )
blob - cb55f4adce7f5cf3f8b5dc3e39dafd17475d5e96
blob + a2d11802a3a9e906e969f88be4d4abcdd4d703c0
--- dulwich/tests/test_repository.py
+++ dulwich/tests/test_repository.py
@@ -736,7 +736,8 @@ r = Repo('.')
 r.stage(['foo'])
 """.format(
             executable=sys.executable,
-            path=[os.path.join(os.path.dirname(__file__), "..", ".."), *sys.path])
+            path=[os.path.join(os.path.dirname(__file__), "..", ".."), *sys.path],
+        )
 
         repo_dir = os.path.join(self.mkdtemp())
         self.addCleanup(shutil.rmtree, repo_dir)
blob - f285b10e53535c4a2665c7991c043e96307edbd3
blob + ccbe09029f8130ff0e94669869d831009bcbb906
--- dulwich/tests/test_server.py
+++ dulwich/tests/test_server.py
@@ -82,7 +82,7 @@ class TestProto:
                 # flush-pkt ('0000').
                 return None
         else:
-            raise HangupException()
+            raise HangupException
 
     def write_sideband(self, band, data):
         self._received[band].append(data)
blob - 5791100d746a75bdecc12ab8ee485010f41a8d35
blob + 223537c9d52d9c5c4b970f0db9431e297691f3b8
--- dulwich/tests/test_web.py
+++ dulwich/tests/test_web.py
@@ -160,7 +160,7 @@ class DumbHandlersTestCase(WebTestCase):
                 self._exc_class = exc_class
 
             def read(self, size=-1):
-                raise self._exc_class()
+                raise self._exc_class
 
             def close(self):
                 self.closed = True
blob - ca9ccb5f5583008276f734539a9c8a6ae2a87368
blob + cdd235beaa8ffbfe87f4312ecd15e508341b11be
--- dulwich/tests/utils.py
+++ dulwich/tests/utils.py
@@ -29,7 +29,7 @@ import time
 import types
 import warnings
 
-from dulwich.tests import SkipTest, skipIf  # noqa: F401
+from dulwich.tests import SkipTest
 
 from ..index import commit_tree
 from ..objects import Commit, FixedSha, Tag, object_class
@@ -99,8 +99,6 @@ def make_object(cls, **attrs):
         monkey-patched in, so this is a class that is exactly the same only
         with a __dict__ instead of __slots__.
         """
-
-        pass
 
     TestObject.__name__ = "TestObject_" + cls.__name__
 
blob - 19da34ee7280113e6d3bc17841160119b2cb3ffe
blob + 0761416119f11745de1abc77bb48fdc5d76b6953
--- dulwich/web.py
+++ dulwich/web.py
@@ -393,7 +393,12 @@ class HTTPGitApplication:
       backend: the Backend object backing this application
     """
 
-    services: ClassVar[Dict[Tuple[str, re.Pattern], Callable[[HTTPGitRequest, Backend, re.Match], Iterator[bytes]]]] = {
+    services: ClassVar[
+        Dict[
+            Tuple[str, re.Pattern],
+            Callable[[HTTPGitRequest, Backend, re.Match], Iterator[bytes]],
+        ]
+    ] = {
         ("GET", re.compile("/HEAD$")): get_text_file,
         ("GET", re.compile("/info/refs$")): get_info_refs,
         ("GET", re.compile("/objects/info/alternates$")): get_text_file,
blob - 8bd3c7a729cdaa2d58a8e6f43fdc0443d3bbfff0
blob + e853ef457dfebb306b7f5db47bdb69b4a0f7b36e
--- pyproject.toml
+++ pyproject.toml
@@ -74,7 +74,9 @@ select = [
     "E",
     "F",
     "I",
+    "PIE",
     "UP",
+    "RSE",
     "RUF",
 ]
 ignore = [