Parcourir la source

Add note on comparison with other Git libraries (#1501)

Jelmer Vernooij il y a 3 semaines
Parent
commit
00875b355c
3 fichiers modifiés avec 53 ajouts et 31 suppressions
  1. 24 24
      Cargo.lock
  2. 14 0
      README.rst
  3. 15 7
      dulwich/object_store.py

+ 24 - 24
Cargo.lock

@@ -35,9 +35,9 @@ checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
 
 
 [[package]]
 [[package]]
 name = "libc"
 name = "libc"
-version = "0.2.164"
+version = "0.2.170"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f"
+checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828"
 
 
 [[package]]
 [[package]]
 name = "memchr"
 name = "memchr"
@@ -64,9 +64,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "once_cell"
 name = "once_cell"
-version = "1.20.2"
+version = "1.20.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 
 [[package]]
 [[package]]
 name = "pack-py"
 name = "pack-py"
@@ -78,24 +78,24 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "portable-atomic"
 name = "portable-atomic"
-version = "1.9.0"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
 
 
 [[package]]
 [[package]]
 name = "proc-macro2"
 name = "proc-macro2"
-version = "1.0.89"
+version = "1.0.93"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
+checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
 dependencies = [
 dependencies = [
  "unicode-ident",
  "unicode-ident",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "pyo3"
 name = "pyo3"
-version = "0.23.4"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57fe09249128b3173d092de9523eaa75136bf7ba85e0d69eca241c7939c933cc"
+checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
 dependencies = [
 dependencies = [
  "cfg-if",
  "cfg-if",
  "indoc",
  "indoc",
@@ -111,9 +111,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "pyo3-build-config"
 name = "pyo3-build-config"
-version = "0.23.4"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cd3927b5a78757a0d71aa9dff669f903b1eb64b54142a9bd9f757f8fde65fd7"
+checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
 dependencies = [
 dependencies = [
  "once_cell",
  "once_cell",
  "target-lexicon",
  "target-lexicon",
@@ -121,9 +121,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "pyo3-ffi"
 name = "pyo3-ffi"
-version = "0.23.4"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dab6bb2102bd8f991e7749f130a70d05dd557613e39ed2deeee8e9ca0c4d548d"
+checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
 dependencies = [
 dependencies = [
  "libc",
  "libc",
  "pyo3-build-config",
  "pyo3-build-config",
@@ -131,9 +131,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "pyo3-macros"
 name = "pyo3-macros"
-version = "0.23.4"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91871864b353fd5ffcb3f91f2f703a22a9797c91b9ab497b1acac7b07ae509c7"
+checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "pyo3-macros-backend",
  "pyo3-macros-backend",
@@ -143,9 +143,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "pyo3-macros-backend"
 name = "pyo3-macros-backend"
-version = "0.23.4"
+version = "0.23.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43abc3b80bc20f3facd86cd3c60beed58c3e2aa26213f3cda368de39c60a27e4"
+checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
 dependencies = [
 dependencies = [
  "heck",
  "heck",
  "proc-macro2",
  "proc-macro2",
@@ -156,18 +156,18 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "quote"
 name = "quote"
-version = "1.0.37"
+version = "1.0.38"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "syn"
 name = "syn"
-version = "2.0.87"
+version = "2.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
+checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
@@ -182,9 +182,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
 
 
 [[package]]
 [[package]]
 name = "unicode-ident"
 name = "unicode-ident"
-version = "1.0.13"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
+checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
 
 
 [[package]]
 [[package]]
 name = "unindent"
 name = "unindent"

+ 14 - 0
README.rst

@@ -15,6 +15,20 @@ SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
 The project is named after the part of London that Mr. and Mrs. Git live in
 The project is named after the part of London that Mr. and Mrs. Git live in
 the particular Monty Python sketch.
 the particular Monty Python sketch.
 
 
+Differences with other Python Git libraries
+-------------------------------------------
+
+Unlike other Python Git libraries, Dulwich is available as a standalone
+package that doesn't depend on git (like GitPython) being installed or any
+native code (like pygit2).
+
+This comes at the cost of speed, but makes it easier to deploy in environments
+where git isn't available or where it's important to have a pure Python
+implementation.
+
+To improve performance, Dulwich includes optional Rust bindings that can be
+used to speed up low-level operations.
+
 Installation
 Installation
 ------------
 ------------
 
 

+ 15 - 7
dulwich/object_store.py

@@ -1419,14 +1419,22 @@ class MissingObjectFinder:
 
 
 
 
 class ObjectStoreGraphWalker:
 class ObjectStoreGraphWalker:
-    """Graph walker that finds what commits are missing from an object store.
+    """Graph walker that finds what commits are missing from an object store."""
 
 
-    Attributes:
-      heads: Revisions without descendants in the local repo
-      get_parents: Function to retrieve parents in the local repo
-    """
+    heads: set[ObjectID]
+    """Revisions without descendants in the local repo."""
+
+    get_parents: Callable[[ObjectID], ObjectID]
+    """Function to retrieve parents in the local repo."""
+
+    shallow: set[ObjectID]
 
 
-    def __init__(self, local_heads, get_parents, shallow=None) -> None:
+    def __init__(
+        self,
+        local_heads: Iterable[ObjectID],
+        get_parents,
+        shallow: Optional[set[ObjectID]] = None,
+    ) -> None:
         """Create a new instance.
         """Create a new instance.
 
 
         Args:
         Args:
@@ -1443,7 +1451,7 @@ class ObjectStoreGraphWalker:
     def nak(self) -> None:
     def nak(self) -> None:
         """Nothing in common was found."""
         """Nothing in common was found."""
 
 
-    def ack(self, sha) -> None:
+    def ack(self, sha: ObjectID) -> None:
         """Ack that a revision and its ancestors are present in the source."""
         """Ack that a revision and its ancestors are present in the source."""
         if len(sha) != 40:
         if len(sha) != 40:
             raise ValueError(f"unexpected sha {sha!r} received")
             raise ValueError(f"unexpected sha {sha!r} received")