-
-
Notifications
You must be signed in to change notification settings - Fork 430
Expand file tree
/
Copy pathNEWS
More file actions
3628 lines (2315 loc) · 109 KB
/
NEWS
File metadata and controls
3628 lines (2315 loc) · 109 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1.2.0 UNRELEASED
* Expand ``log`` command options: add ``--oneline``, ``--abbrev-commit``,
``--author``, ``--committer``, ``--grep``, ``--since``/``--after``,
``--until``/``--before``, ``-n``/``--max-count``, ``--no-merges``,
``--merges``, ``--stat``, ``-p``/``--patch``, ``--name-only``,
and ``--follow``. (Jelmer Vernooij, #1779)
* Add ``am`` command and ``porcelain.am()`` for applying mailbox-style
email patches (``git am``), with state persistence for
``--continue``, ``--skip``, ``--abort``, and ``--quit`` recovery
operations. (Jelmer Vernooij, #1692)
* Add support for ``extensions.relativeworktrees`` repository extension,
allowing Git worktrees to use relative paths instead of absolute paths
when linking worktrees. (Jelmer Vernooij, #2112)
* Add support for push options (``-o``/``--push-option``) in the ``push``
command and ``porcelain.push()``, enabling AGit flow and other server-side
push option workflows. (Jelmer Vernooij)
* Add missing push options: ``--all``, ``--tags``, ``--delete``,
``--dry-run``, ``--prune``, ``--set-upstream``, ``--follow-tags``,
and ``--mirror``. (Jelmer Vernooij, #1844)
* Add support for atomic push operations (``--atomic``). When enabled,
either all ref updates succeed or none are applied. Both client and
server now negotiate the ``atomic`` capability.
(Jelmer Vernooij, #1781)
* Add ``apply`` command and ``porcelain.apply_patch()`` for applying
unified diffs, including support for rename/copy detection, binary patches
with Git's base85 encoding, and ``--3way`` merge fallback when patches
don't apply cleanly. (Jelmer Vernooij, #1784)
* Add support for ``gc.pruneExpire`` configuration option, which controls
the grace period before unreachable objects are pruned during garbage
collection. (Jelmer Vernooij, #1859)
* Add support for ``core.precomposeunicode`` configuration option
for normalizing NFD Unicode paths from macOS filesystems to NFC
form. (Jelmer Vernooij, #1804)
* Add support for ``core.gitProxy`` configuration option, which
specifies a proxy command for Git protocol (``git://``) connections.
(Jelmer Vernooij, #1850)
* Add support for ``core.maxStat`` configuration option, which limits
the number of stat operations performed when checking for unstaged
changes. This improves performance on slow filesystems or very large
repositories. (Jelmer Vernooij, #1853)
* Add support for ``core.packedGitLimit`` configuration option, which
limits the total memory used for mmapped pack files. When exceeded,
least-recently-used packs are closed to free memory.
(Jelmer Vernooij, #1848)
* Add support for ``core.deltaBaseCacheLimit`` configuration option, which
limits the memory used for caching delta base objects during pack
unpacking. Defaults to 96 MiB, matching Git's default.
(Jelmer Vernooij, #1849)
* Fix GPG signature verification to raise ``BadSignature`` for all
GPG errors, not just ``BadSignatures``. Also detect the case where
GPG returns no signatures at all. (Jelmer Vernooij)
* Fix client incorrectly sending ``unborn`` argument in Git protocol v2
``ls-refs`` requests to servers that advertise ``ls-refs`` capability
without explicitly advertising ``ls-refs=unborn`` support, preventing
clones from older servers like Gerrit 3.12.2. (Jelmer Vernooij, #2104)
* Improve error message in ``read_info_refs()`` to show the actual line
content when parsing fails, making it easier to diagnose issues with
malformed server responses. (Jelmer Vernooij, #2103)
* HTTP client respects ``http.userAgent`` configuration for customizing the
User-Agent header. Supports both global and URL-specific settings. The
default User-Agent is ``git/dulwich/{version}``. (Jelmer Vernooij)
1.1.0 2026-02-17
* Add support for ``core.commentChar`` configuration option in commit message
templates. (Jelmer Vernooij, #1852)
* Add basic support for subtrees. (Jelmer Vernooij)
* Implement server-side Git hooks (pre-receive, update, post-receive) in
``ReceivePackHandler``. Pre-receive hooks can abort entire pushes, update
hooks can decline individual ref updates, and post-receive hooks run after
successful pushes. Hook output is sent to clients via sideband channels.
(Jelmer Vernooij, #212)
* Report progress during pack file downloads. Dulwich now displays real-time
transfer progress (bytes received, transfer speed) when cloning or fetching
repositories, matching Git's behavior. (Jelmer Vernooij, #1121)
* Add client-side support for Git protocol v2 ``packfile-uris`` capability,
allowing servers to offload packfile distribution to CDNs or external
storage. Includes hash verification before writing to repository to prevent
data corruption. (Jelmer Vernooij, #1794)
* Add bundle URI support for faster clones and fetches. The new
``dulwich.bundle_uri`` module implements the Git bundle URI specification,
allowing clients to download pre-computed bundles from HTTP(S) URLs to
bootstrap repository data before fetching remaining objects.
(Jelmer Vernooij)
* Add ``--unshallow`` support to ``fetch`` command, allowing conversion of
shallow repositories to complete ones by fetching all missing history.
(Jelmer Vernooij, #1800)
* Support ``GIT_TRACE_PACKET`` in ``dulwich.cli``.
(Jelmer Vernooij)
* Fix ``porcelain.checkout`` incorrectly skipping files whose paths start
with ``.git`` (such as ``.github/``, ``.gitignore``, ``.gitattributes``)
during working tree and index updates, leaving staged changes after a
clean checkout. (Jelmer Vernooij)
* Fix cloning of SHA-256 repositories by including ``object-format`` and
``agent`` capabilities in Git protocol v2 ``ls-refs`` and ``fetch``
commands. (Jelmer Vernooij)
1.0.0 2026-01-17
* Release of 1.0!
From here on, Dulwich will not break backwards compatibility until 2.0 -
although we may print ``DeprecationWarning`` when using deprecated
functionality.
Micro releases (1.x.y) will be reserved for important bugfixes.
Major releases (1.x.0) will introduced new features and functionality,
without breaking backwards compatibility.
(Jelmer Vernooij, #2007)
0.25.2 2026-01-11
* Fix test failure when GPG raises ``InvalidSigners`` instead of
``GPGMEError`` on systems without usable secret keys. (#2063)
* Object store ``close()`` methods can now be called multiple times safely.
Object stores now raise ``ResourceWarning`` when destroyed with unclosed
resources. (Jelmer Vernooij)
0.25.1 2026-01-08
* Add signature vendor system for signing and verifying Git objects.
Supports GPG, SSH signatures, and X.509 certificates. (Jelmer Vernooij)
* Add support for partial clone with object filtering. (Jelmer Vernooij)
* Fix sparse pattern matching in worktree operations. (Jelmer Vernooij)
* ``dulwich.porcelain.status`` now returns regular strings.
(Jelmer Vernooij, #889)
* Fix AssertionError when accessing ref names with length matching binary
hash length (e.g., 32 bytes for SHA-256). (Jelmer Vernooij, #2040)
* Fix commit graph parsing failure when processing commits with 3+ parents
(octopus merges) with incomplete EXTRA_EDGE_LIST chunk data.
(Jelmer Vernooij, #2054)
* Add ``parse_commit_broken`` function to parse broken commits.
(Valentin Lorentz, Jelmer Vernooij)
* Add basic ``dulwich.aiohttp`` module that provides
server support. (Jelmer Vernooij)
* Add callback-based authentication support for HTTP and proxy authentication
in ``Urllib3HttpGitClient``. This allows applications to handle
authentication dynamically without intercepting exceptions. Callbacks
receive the authentication scheme information (via WWW-Authenticate or
Proxy-Authenticate headers) and can provide credentials or cancel.
(Jelmer Vernooij, #822)
0.25.0 2025-12-17
**PLEASE NOTE**: This release makes quite a lot of changes to public APIs. This
is ahead of a 1.0 release, after which API changes will be kept backwards
compatible.
* Split out worktree module from porcelain into separate ``dulwich.worktree``
module for better code organization. (Jelmer Vernooij, #2037)
* Split porcelain module into separate submodules: ``dulwich.porcelain.tags``,
``dulwich.porcelain.notes``, ``dulwich.porcelain.submodule``, and
``dulwich.porcelain.lfs``. Main porcelain module re-exports all functions
for backward compatibility. (Jelmer Vernooij, #2032)
* Ensure ``dulwich.porcelain`` package is properly installed as a directory
structure with submodules. (Jelmer Vernooij, #2035)
* Add tests for consistent license preamble across codebase and prevent
``os.environ`` usage in lower layers. (Jelmer Vernooij, #2033)
* Add ``__all__`` exports to all modules for better API clarity and wildcard
import support. (Jelmer Vernooij, #2022)
* Fix ParamikoSSHVendor interface compatibility with SSHVendor. (Jelmer Vernooij, #2028)
* Add fallback when HEAD is missing in dumb HTTP protocol, improving
compatibility with repositories that don't have a HEAD reference.
(Antoine Lambert, #2030)
* Fix smudge filter subprocess fallback for special characters in path.
(Petr Chmelar, #1878)
* Fix UTF-8 decode error in process filter protocol when handling binary files.
(Jelmer Vernooij, #2023)
* Fix ``porcelain.add()`` to correctly handle ``None`` values in pathspec
parameter. (Jelmer Vernooij, #2027)
* Add ``--stat`` argument to ``dulwich diff`` command to display diffstat
summary showing files changed and line additions/deletions. (Jelmer Vernooij, #2026)
* Avoid signing commits in ``porcelain.stash()`` operations to prevent
GPG prompt interruptions during automated stashing. (Jelmer Vernooij, #2012)
* Improve error handling when trying to remove non-empty directories during
worktree operations. (Jelmer Vernooij, #2004)
* Move greenthreads support to dulwich/contrib.
This code isn't really developed and only used
by the swift support.
(Jelmer Vernooij)
* Move protocol-level peeled tags functions (``serialize_refs()``,
``write_info_refs()``, ``split_peeled_refs()``, ``strip_peeled_refs()``)
from ``dulwich.refs`` to ``dulwich.protocol``. The ``^{}`` peeled tags syntax
is now properly isolated to protocol-level code. Remove ``InfoRefsContainer``
class (functionality inlined into ``SwiftInfoRefsContainer``).
(Jelmer Vernooij, #2009)
* Fix ``get_unstaged_changes()`` to correctly pass Blob objects to filter
callbacks instead of raw bytes. This fixes crashes when using ``.gitattributes``
files with filter callbacks like ``checkin_normalize``.
(Jelmer Vernooij, #2010)
* The ``ObjectID`` and ``Ref`` types are now newtypes, making it harder to
accidentally pass the wrong type - as notified by mypy. Most of this is in
lower-level code. (Jelmer Vernooij)
* Implement support for ``core.sharedRepository`` configuration option.
Repository files and directories now respect shared repository permissions
for group-writable or world-writable repositories. Affects loose objects,
pack files, pack indexes, index files, and other git metadata files.
(Jelmer Vernooij, #1804)
* Optimize status performance by using stat matching to skip reading
and filtering unchanged files. This provides significant performance
improvements for repositories with LFS filters, where filter operations can
be very expensive. The optimization matches Git's behavior of using mtime
and size comparisons to determine if files need processing. File entries
now use nanosecond-resolution timestamps for more accurate change detection.
(Jelmer Vernooij, #1999, #2013)
* Add support for multi-pack index (MIDX) files for improved performance with
multiple pack files. Supports reading and writing MIDX files, including mmap
support for efficient loading. Enables faster object lookups across multiple
packs. (Jelmer Vernooij, #1998)
* Implement ``git restore`` and ``git switch`` commands with corresponding
porcelain functions. The ``restore`` command allows restoring files from
commits or the index, while ``switch`` provides branch switching functionality.
(Jelmer Vernooij, #2003)
* Add support for ``core.protectHFS`` configuration option to protect against
HFS+ filesystem vulnerabilities. (Jelmer Vernooij)
* Skip tests that require the merge3 module when it is not available, improving
test compatibility across different Python environments. (Jelmer Vernooij, #2002)
* Drop support for Python 3.9. (Jelmer Vernooij)
* Add support for pack bitmap indexes for fast reachability queries.
(Jelmer Vernooij, #1792)
* Add support for ``git rerere`` (reuse recorded resolution) with CLI
subcommands and porcelain functions. Supports ``rerere.enabled`` and
``rerere.autoupdate`` configuration. (Jelmer Vernooij, #1786)
* Add support for ``git mailinfo`` command to extract patch information from
email messages. Implements ``dulwich mailinfo`` CLI command,
``porcelain.mailinfo()``, and ``patch.mailinfo()`` with support for subject
munging, -k/-b flags, --scissors, --encoding, and --message-id options.
(Jelmer Vernooij, #1839)
* Add support for column formatting. (Jelmer Vernooij, #1837)
* Add ``dulwich diagnose`` command to display diagnostic information about
the Python environment including Python version, PYTHONPATH, sys.path,
Dulwich version, and installed dependencies with their versions.
(Jelmer Vernooij, #1835)
* Add support for SHA256 repositories. Dulwich can now read and write Git
repositories using SHA256 object format. This includes support for loose
objects, pack files (v1 and v2 indexes), tree parsing with SHA256 hashes,
pack bitmap indexes, commit graphs, and network protocol operations
(clone, fetch, push). The Rust extensions have been updated to support
variable hash lengths. SHA256 repositories require format version 1 and the
objectFormat extension. The ``dulwich init`` command now supports
``--objectformat`` option to create SHA256 repositories. Client and server
implementations advertise and negotiate object-format capabilities.
(Jelmer Vernooij, #1115, #1604)
0.24.10 2025-11-10
* Fix compatibility with python 3.9. (Jelmer Vernooij, #1991)
0.24.9 2025-11-10
* Fix passing key_filename and ssh_command parameters to SSHGitClient.
(Saugat Pachhai)
* Relax check to support subclasses of Urllib3HttpGitClient. Fixes
regression from 0.24.2 where subclasses of Urllib3HttpGitClient would
not receive the config object. (Saugat Pachhai)
* Fix test_concurrent_ref_operations_compatibility test flakiness.
(Jelmer Vernooij)
* Fix warnings in test suite. (Jelmer Vernooij)
0.24.8 2025-10-29
* Add Rust implementation of pack delta creation (create_delta). The
implementation uses the similar crate for efficient diff computation.
(Jelmer Vernooij)
* Extend ``http.extraHeader`` configuration to support per-URL settings.
Allows configuring different HTTP headers for specific URLs using
``http.<url>.extraHeader`` syntax, enabling authentication in CI/CD
environments like GitHub Actions. More specific URL configurations
override less specific ones. (Jelmer Vernooij, #882)
* Add support for ``GIT_REFLOG_ACTION`` environment variable in porcelain
functions. (Jelmer Vernooij, #1811)
* Add support for namespace isolation via ``NamespacedRefsContainer``.
Implements Git's namespace feature for isolating refs within a single
repository using the ``refs/namespaces/`` prefix. (Jelmer Vernooij, #1809)
* Add support for GIT_FLUSH environment variable to control output buffering
in CLI commands. When GIT_FLUSH=1, output is flushed after each write for
real-time visibility. (Jelmer Vernooij, #1810)
* Implement ``dulwich interpret-trailers`` functionality to parse and manipulate
structured metadata (trailers) in commit messages. Adds ``porcelain.interpret_trailers()``
with support for parsing, adding, replacing, and formatting trailers. Also fixes
the ``signoff`` parameter in ``porcelain.commit()`` to add ``Signed-off-by`` trailers.
(Jelmer Vernooij, #1826)
* Add support for recursive submodule updates via ``--recursive`` flag in
``dulwich submodule update`` command and ``recursive`` parameter in
``porcelain.submodule_update()``.
(Jelmer Vernooij, #1813)
* Add support for ``git maintenance`` command to optimize Git repository data.
Implements gc, commit-graph, loose-objects, incremental-repack, pack-refs, and
prefetch tasks. Supports automatic maintenance with ``--auto`` flag and task-specific
configuration. (Jelmer Vernooij)
* Add support for ``dulwich replace`` command to create refs that replace objects.
(Jelmer Vernooij, #1834)
* Implement advanced Git object specification support: index path lookup (``:``, ``:0:``,
``:1:``, ``:2:``, ``:3:``) for accessing files from the index and merge stages, and
reflog time specifications (``@{time}``) using Git's approxidate format (e.g.,
``HEAD@{yesterday}`, ``master@{2.weeks.ago}``). (Jelmer Vernooij, #1783)
* Add ``dulwich stripspace`` command to remove unnecessary whitespace from text.
(Jelmer Vernooij, #1838)
0.24.7 2025-10-23
* Add sparse index support for improved performance with large repositories.
Implements reading and writing of sparse directory entries, index expansion/
collapse operations, and the 'sdir' extension.
(Jelmer Vernooij, #1797)
* Add support for core.fsyncObjectFiles configuration option.
(Jelmer Vernooij, #1817)
* Work around typing module bug in Python 3.9.0 and 3.9.1 by using string
annotation for Callable type in reflog.py. (Jelmer Vernooij, #1948)
* Fix passing ssh_command, password, and key_filename parameters to the SSH
vendor. Regression from 0.24.2. (Jelmer Vernooij, #1945)
* Fix LFS URL validation to prevent DNS resolution errors when ``lfs.url`` is
configured with an invalid value. Implement full support for ``file://`` URLs
to access local LFS repositories, matching git-lfs behavior.
(Jelmer Vernooij, #1951)
0.24.6 2025-10-19
* Fix import failure when ``sys.stdin`` is ``None``. The ``dulwich.server``
module can now be imported in environments where ``sys.stdin`` is ``None``,
such as Windows GUI apps, apps started with ``pythonw``, or apps using
``ProcessPoolExecutor``. (Jelmer Vernooij, #1939)
* Add support for ``dulwich reflog expire`` and ``dulwich reflog delete`` commands.
(Jelmer Vernooij, #1798)
* Add ``dulwich grep`` command.
Supports regular expressions, case-insensitive search, line numbers, pathspec
filtering, and respecting .gitignore patterns. (Jelmer Vernooij, #1776)
* Add support for octopus merge strategy. (Jelmer Vernooij, #1816)
* Add support for ``git show-branch`` command to display branches and their
* Add ``dulwich cherry`` command to find commits not merged upstream.
Compares commits by patch ID to identify equivalent patches regardless of
commit metadata. Supports automatic upstream detection from tracking branches
and verbose mode to display commit messages. (Jelmer Vernooij, #1782)
* Add support for ``dulwich mailsplit`` command to split mbox files and Maildir
into individual message files. Supports mboxrd format, custom precision,
and all standard git mailsplit options. (Jelmer Vernooij, #1840)
* Implement recursive merge strategy for handling multiple merge bases
(criss-cross merges). When multiple common ancestors exist, the algorithm
creates a virtual merge base by recursively merging them, reducing false
conflicts in complex merge scenarios. The recursive strategy is now used
automatically by ``porcelain.merge()``. (Jelmer Vernooij, #1815)
* Add support for ``dulwich show-branch`` command to display branches and their
commits. Supports filtering by local/remote branches, topological ordering,
list mode, independent branch detection, and merge base calculation.
(Jelmer Vernooij, #1829)
* Add ``dulwich config`` command to get and set repository or global
configuration options. Supports getting/setting values, listing all config,
getting all values for multivars, and unsetting values.
(Jelmer Vernooij, #1775)
0.24.5 2025-10-15
* Add support for ``dulwich show-ref`` command to list references in a local
repository. Supports filtering by branches/tags, pattern matching,
dereferencing tags, verification mode, and existence checking. Available
as ``porcelain.show_ref()`` and ``dulwich show-ref`` CLI command.
(Jelmer Vernooij, #1830)
* Fix HTTP authentication to preserve credentials from URLs when storing
remote configuration. URLs with embedded credentials (like
``https://token@github.com/user/repo.git``) now correctly save those
credentials to git config, allowing subsequent push operations to succeed.
(Jelmer Vernooij, #1925)
* Restore ``pool_manager`` parameter to ``get_transport_and_path`` and
``get_transport_and_path_from_url`` functions that was accidentally removed
during type annotation refactoring. (Jelmer Vernooij, #1928)
0.24.4 2025-10-14
* Add compatibility for Python 3.14. (Jelmer Vernooij)
* Re-enable android build. (Malcolm Smith)
0.24.3 2025-10-12
* Add ``dulwich merge-base`` command. (Jelmer Vernooij, #1831)
* Add support for ``dulwich var`` command to display Git's logical variables
(GIT_AUTHOR_IDENT, GIT_COMMITTER_IDENT, GIT_EDITOR, GIT_SEQUENCE_EDITOR,
GIT_PAGER, GIT_DEFAULT_BRANCH). Available as ``porcelain.var()`` and
``dulwich var`` CLI command. (Jelmer Vernooij, #1841)
* Add support for ``GIT_TRACE`` environment variable for debugging. Supports
output to stderr (values "1", "2", or "true"), file descriptors (3-9),
file paths, and directories (creates per-process trace files).
(Jelmer Vernooij, #1863)
* Add ``extract_signature()`` method to ``Commit`` and ``Tag`` classes that
returns (payload, signature, signature_type) tuple. Supports both PGP and SSH
signature detection. (Jelmer Vernooij)
* Fix Git filter protocol implementation to properly handle the two-phase
response format (initial headers, content, final headers) as specified in
the Git protocol documentation. This fixes compatibility with Git LFS and
other filters that send status messages in final headers.
(Jelmer Vernooij, #1889)
* Add ``dulwich worktree repair`` command to repair worktree administrative files
after worktrees or the main repository have been moved.
(Jelmer Vernooij, #1799)
* Add ``dulwich verify-tag`` command to check GPG signatures of tags.
(Jelmer Vernooij, #1833)
* Add ``dulwich verify-commit`` command to check GPG signatures of tags.
(Jelmer Vernooij, #1832)
0.24.2 2025-09-25
* Added ``porcelain.shortlog`` function to summarize commits by author,
similar to git shortlog. (Muhammad Usama, #1693)
* Fix merge functionality to gracefully handle missing optional merge3 dependency
by raising informative ImportError with installation instructions.
(Jelmer Vernooij, #1759)
* Fix worktree CLI tests to properly change to repository directory.
(Jelmer Vernooij, #1738)
* Add ``temporary_worktree`` context manager for creating temporary worktrees
that are automatically cleaned up. (Jelmer Vernooij)
* Add ``exist_ok`` parameter to ``add_worktree`` to allow creation with
existing directories. (Jelmer Vernooij)
* Add colorized diff support for the ``show`` command with ``--color``
argument. (Jelmer Vernooij, #1741)
* Fix Windows path handling in ``_ensure_parent_dir_exists`` to correctly
handle drive letters during checkout operations. (Jelmer Vernooij, #1751)
* Fix Windows config loading to only use current Git config path,
avoiding loading older config files. (Jelmer Vernooij, #1732)
* Add interactive rebase support with ``dulwich rebase -i``, including support
for pick, reword, edit, squash, fixup, drop, exec, and break commands.
(Jelmer Vernooij, #1696)
* Fix handling of CRLF line endings with ``core.autocrlf = input`` to prevent
unchanged files from appearing as unstaged in status.
(Jelmer Vernooij, #1773)
* Add support for ``core.whitespace`` configuration for whitespace error
detection and fixing. Supports blank-at-eol, space-before-tab, indent-with-non-tab,
tab-in-indent, blank-at-eof, cr-at-eol, and tabwidth settings.
(Jelmer Vernooij, #1806)
* Add support for ``core.safecrlf`` configuration to check if CRLF/LF conversions
would be reversible and optionally abort or warn on potentially lossy conversions.
(Jelmer Vernooij, #1806)
* Add support for ``http.extraHeader`` configuration to pass additional HTTP
headers to the server when communicating over HTTP(S).
(Jelmer Vernooij, #1769)
* Optimize LFS filter performance by avoiding redundant disk writes when
checking file status. The LFS store now checks if objects already exist
before writing them to disk, significantly improving ``dulwich status``
performance in repositories with many LFS-tracked files.
(Jelmer Vernooij, #1789)
* Add filter server support. (Jelmer Vernooij, #1789)
* Add support for ``patiencediff`` algorithm in diff.
(Jelmer Vernooij, #1795)
* Add IPv6 support for git:// protocol URLs.
(Jelmer Vernooij, #1796)
* Add support for ``core.preloadIndex`` configuration setting to enable
parallel stat operations when checking for unstaged changes. This improves
performance on slow filesystems like NFS. (Jelmer Vernooij, #1851)
0.24.1 2025-08-01
* Require ``typing_extensions`` on Python 3.10.
(Jelmer Vernooij, #1735)
0.24.0 2025-08-01
* Split out ``WorkTree`` from ``Repo``. (Jelmer Vernooij)
* Add comprehensive git worktree support including ``WorkTreeContainer``
class, ``WorkTreeInfo`` objects, and full CLI/porcelain implementations
for add, list, remove, prune, lock, unlock, and move operations.
(Jelmer Vernooij, #1710, #1632)
* Add support for ``-a`` argument to
``dulwich.cli.commit``. (Jelmer Vernooij)
* Add support for ``--amend`` argument to
``dulwich.cli.commit`` and ``dulwich.porcelain.commit``. (Jelmer Vernooij)
* Add support for merge drivers.
(Jelmer Vernooij)
* Add support for Git revision syntax operators ``~``, ``^``, ``^{}``,
``@{N}``, and ``:path`` in ``dulwich.objectspec.parse_object``,
e.g. ``HEAD~1``, ``HEAD^2``, ``v1.0^{}``, ``HEAD@{1}``, ``HEAD:README``.
(Jelmer Vernooij)
* Add support for ``GIT_CONFIG_GLOBAL`` and ``GIT_CONFIG_SYSTEM``
environment variables to override global and system configuration
paths. (Jelmer Vernooij, #1193)
* ``dulwich.porcelain.diff``: Support diffing two commits
and diffing cached and working tree. (Jelmer Vernooij)
* Add ``format-patch`` command in porcelain. (Jelmer Vernooij)
* Add functions for creating bundles and ``BundleClient``
for interacting with bundles. (Jelmer Vernooij, #1246)
* Add support for ``core.commitGraph`` configuration setting to control
whether commit-graph files are used for performance optimization.
(Jelmer Vernooij)
* Add ``reflog`` command in porcelain. (Jelmer Vernooij)
* Add ``locked_ref`` context manager for atomic ref operations.
(Jelmer Vernooij)
* Fix bug in ``DiskRefsContainer._remove_packed_ref`` that prevented
packed ref deletions from being persisted to disk.
(Jelmer Vernooij)
* Optimize writing unchanged refs by avoiding unnecessary fsync
when ref already has the desired value. File locking behavior
is preserved to ensure proper concurrency control.
(Dan Villiom Podlaski Christiansen, Jelmer Vernooij, #1120)
* Fix Unicode filename encoding issue on Windows where non-ASCII
filenames were corrupted during clone/checkout operations.
(Jelmer Vernooij, #203)
0.23.2 2025-07-07
* Print deprecations on usage, not import.
(Alyssa Coghlan, #1650)
* Add support for ``core.protectHFS`` configuration setting to protect
against paths that could be misinterpreted on HFS+ filesystems.
(Jelmer Vernooij, #246)
* Only write Git index extensions when they contain meaningful data.
Previously, dulwich would write empty extensions to the index file,
causing unnecessary bloat.
(Andrew Shadura, Jelmer Vernooij, #1643)
* Document that ``porcelain.push`` returns per-ref status information
in the ``SendPackResult`` object. Added test coverage to verify this
functionality works as expected.
(Jelmer Vernooij, #780)
* Add porcelain submodule commands: ``submodule_update``, ``submodule_add``g
CLI command, and ``submodule_update`` CLI command. Add ``--recurse-submodules``
option to ``clone`` command. (#506, Jelmer Vernooij)
* Support popping stashes. (Jelmer Vernooij)
* Add support for parsing Git attributes from .gitattributes files.
This enables proper handling of text/binary detection, line ending
normalization, and filter specifications for files.
(Jelmer Vernooij, #1211)
* Add git bisect functionality including core bisect logic, porcelain
commands (bisect_start, bisect_bad, bisect_good, bisect_skip,
bisect_reset, bisect_log, bisect_replay), and CLI support.
(Jelmer Vernooij, #1631)
* Fix ``porcelain.describe()`` to dynamically determine hash length
based on uniqueness, matching git describe behavior more closely.
Previously used a hardcoded 7-character hash length.
(Jelmer Vernooij, #824)
* Add test for ``porcelain.add()`` to verify files can be added when
the current working directory is within a gitignored directory.
(Jelmer Vernooij, #550)
* ParamikoSSHVendor now reads SSH configuration from ~/.ssh/config.
Host settings including hostname, user, port, and identity file are
now respected when establishing SSH connections.
(Jelmer Vernooij, #443)
0.23.1 2025-06-30
* Support ``untracked_files="normal"`` argument to ``porcelain.status``,
and make this the default.
(Jelmer Vernooij, #835)
* Fix ``parse_commit`` to properly dereference annotated tags when
checking out tags. Previously, checking out an annotated tag would
fail with a KeyError.
(Jelmer Vernooij, #1638)
* Handle different file type transitions properly in ``update_working_tree``
(Jelmer Vernooij, #1638)
* Fix KeyError when pulling from a shallow clone. Handle missing commits
gracefully in graph traversal operations for shallow repositories.
(Jelmer Vernooij, #813)
* Return symrefs from ls_refs. (Jelmer Vernooij, #863)
* Support short commit hashes in ``porcelain.reset()``.
(Jelmer Vernooij, #1154)
* Support dumb repository access.
(Jelmer Vernooij, #1097)
* Fix TypeError when cloning repositories with bytes paths on Windows.
(Jelmer Vernooij, #973)
* Support ``depth`` for local clones.
(Jelmer Vernooij)
* Add basic support for managing Notes. (Jelmer Vernooij)
* Add basic ``cherry-pick`` subcommand. (#1599, Jelmer Vernooij)
* Add ``revert`` command to ``dulwich.porcelain`` and CLI.
(#1599, Jelmer Vernooij)
* Add annotate support as well as ``annotate`` and ``blame``
commands. (#245, Jelmer Vernooij)
* Fix ``apply_delta`` to raise ``ApplyDeltaError`` instead of ``AssertionError``
when the source buffer size doesn't match the delta header. This issue only
affected the pure Python implementation when the Rust extension was not
available. The Rust implementation already raised the correct exception.
(#1606, Jelmer Vernooij)
* Fix ``porcelain.reset --hard`` to properly delete files that don't exist in
the target tree. Previously, when resetting to a remote branch, files deleted
in the remote were not removed locally due to incorrect path normalization
on Windows. (#840, Jelmer Vernooij)
* Add support for includes in configuration files.
(#1216, Jelmer Vernooij)
* Support timeouts for HTTP client operations. (Jelmer Vernooij)
* Add support for ``reset --mixed`` and ``reset --soft`` modes in
``porcelain.reset()`` and the CLI. Mixed reset updates HEAD and index
but leaves working tree unchanged. Soft reset only updates HEAD.
(Jelmer Vernooij)
* Apply line-ending normalization in ``build_index_from_tree`` to respect
``core.autocrlf`` configuration during checkout operations.
(Jelmer Vernooij, #663)
* Add ``prune`` method to object stores for cleaning up orphaned temporary
pack files. This is now called by ``garbage_collect()`` to match Git's
behavior. Also added ``prune`` command to ``dulwich.porcelain``.
(Jelmer Vernooij, #558)
* Fix ``porcelain.remove()`` to work correctly when called from a directory
other than the repository root. Relative paths are now interpreted as
relative to the repository root rather than the current working directory.
(Jelmer Vernooij, #821)
* Add support for auto garbage collection, and invoke from
some porcelain commands. (Jelmer Vernooij, #1600)
* Add ``filter-branch`` support to ``dulwich.porcelain`` and
``dulwich.filter_branch`` module for rewriting commit history.
Supports filtering author, committer, and message fields.
(#745, Jelmer Vernooij)
* Add ``mv`` porcelain command. (Jelmer Vernooij, #1633)
0.23.0 2025-06-21
* Add basic ``rebase`` subcommand. (Jelmer Vernooij)
* Add ``gc`` command to ``dulwich.porcelain.`` (Jelmer Vernooij, #92)
* Add ``unpack-objects`` plumbing command to unpack objects from pack files
into loose objects in the repository. This command extracts all objects
from a pack file and writes them to the object store as individual files.
Available in both ``dulwich.porcelain.unpack_objects()`` and as a CLI
command ``dulwich unpack-objects``. (Jelmer Vernooij)
* Add ``merge-tree`` plumbing command to ``dulwich.porcelain`` and CLI.
This command performs three-way tree merges without touching the working
directory or creating commits, similar to ``dulwich merge-tree``. It outputs
the merged tree SHA and lists any conflicted paths. (Jelmer Vernooij)
* Add ``porcelain.count_objects()`` function to count unpacked objects and
their disk usage. Returns a tuple of (count, size) for simple usage or
a ``CountObjectsResult`` dataclass with detailed statistics when
``verbose=True``. (Jelmer Vernooij)
* Add support for pack index format version 3. This format supports variable
hash sizes to enable future SHA-256 support. The implementation includes
reading and writing v3 indexes with proper hash algorithm identification
(1 for SHA-1, 2 for SHA-256). (Jelmer Vernooij)
* Fix ``LocalGitClient`` assertion error when fetching externally cloned repositories
into ``MemoryRepo``. Previously, the client would fail with an AssertionError
when trying to process pack data from repositories that were cloned externally.
(Jelmer Vernooij, #1179)
* Add support for ``os.PathLike`` objects throughout the API. Functions that
accept file paths now support ``pathlib.Path`` objects in addition to
strings and bytes. This includes repository operations, configuration file
handling, ignore file processing, and all major entry points.
(Jelmer Vernooij, #1074)
* Add support for ``format`` argument to ``Repo.init()`` and ``Repo.init_bare()``
to specify repository format version (0 or 1). This allows creating repositories
with different format versions by setting the ``core.repositoryformatversion``
configuration value. (Jelmer Vernooij)
* Fix Rust implementation of ``sorted_tree_items()`` to correctly handle submodules.
Previously, submodules (mode 0o160000) were incorrectly treated as directories
in the sorting order, causing different results compared to the Python
implementation. (Jelmer Vernooij, #1325)
* Fix ``porcelain.add()`` to stage both untracked and modified files when no
paths are specified. Previously, only untracked files were staged, inconsistent
with Git's behavior. Now behaves like ``git add -A`` when called without paths.
(Jelmer Vernooij, #746)
* Fix ``porcelain.add()`` symlink handling to allow adding symlinks that point
outside the repository. Previously, the function would fail when trying to
add a symlink pointing outside the repo due to aggressive path resolution.
Now only resolves the parent directory for symlinks, matching Git's behavior.
(Jelmer Vernooij, #789)
* Fix ``porcelain.add()`` when adding repository root path or directories.
Previously, adding the repository path itself would incorrectly stage
``b'./'`` instead of the actual untracked files, leading to
repository corruption. (Jelmer Vernooij, #1178, #655)
* Improve ``porcelain.add()`` documentation to correctly describe default
behavior. (Jelmer Vernooij, #895)
* Fix gitignore pattern matching for directory negation patterns. Patterns like
``!data/*/`` now correctly unignore direct subdirectories while still ignoring
files in the parent directory, matching Git's behavior. The ``is_ignored()`` method
now documents that directory paths should end with ``/`` for consistent behavior.
(Jelmer Vernooij, #1203)
* Support quote_path flag for ignore checking. (Jelmer Vernooij)
* Clarify documentation for ``IgnoreFilter`` and ``IgnoreFilterManager`` to
explicitly state that directory paths should include trailing slashes when
checking if they are ignored. This matches Git's behavior and ensures
consistent results. (Jelmer Vernooij, #972)
* Add support for Git's ``feature.manyFiles`` configuration and index version 4.
This enables faster Git operations in large repositories through path prefix
compression (30-50% smaller index files) and optional hash skipping for faster
writes. Supports ``feature.manyFiles``, ``index.version``, and ``index.skipHash``
configuration options.
(Jelmer Vernooij, #1061, #1462)
* In dulwich.porcelain docstring, list functions by their Python identifiers.
(Marnanel Thurman)
* cli: add basic branch management commands (James Addison, #1514)
* Fix wheels workflow. (Jelmer Vernooij)
* ``Config.set`` replaces values by default, ``Config.add``
appends them. (Jelmer Vernooij, #1545)
* Support ``core.sshCommand`` setting.
(Jelmer Vernooij, #1548)
* Bump PyO3 to 0.25. (Jelmer Vernooij)
* In ``SubprocessClient`` time out after 60 seconds
when the subprocess hasn't terminated when closing
the channel. (Jelmer Vernooij)
* Add type hint for ``dulwich.client.get_ssh_vendor``.
(Jelmer Vernooij, #1471)
* Add basic merge command. (Jelmer Vernooij)
* Update working tree in pull. (Jelmer Vernooij, #452)
* Support switching branch in a way that updates
working tree. (Jelmer Vernooij, #576)
* Fix typing for ``dulwich.client`` methods that take repositories.
(Jelmer Vernooij, #1521)
* Fix handling of casing of subsection names in config.
(Jelmer Vernooij, #1183)
* Update working tree in pull. (Jelmer Vernooij, #452)
* Use ``dissolve`` to manage deprecations. (Jelmer Vernooij)
* Handle trailing backslashes in config files appropriately.
(Jelmer Vernooij, #1088)
* Add basic support for reading git commit graphs.
(Jelmer Vernooij, #1191)
* Port remaining ``dulwich.cli`` commands from getopt to argparse.
(Jelmer Vernooij)
* Add basic support for reftables.
(Jelmer Vernooij, #1366)
0.22.8 2025-03-02
* Allow passing in plain strings to ``dulwich.porcelain.tag_create``
(Jelmer Vernooij, #1499)
* Bump PyO3 to 0.23.5. (Jelmer Vernooij)
* Add sparse checkout cone mode support (Louis Maddox, #1497)
* Add skip-worktree support. (Louis Maddox)
* Add "index.skipHash" option support. (Jan Rűegg)
* Repo docstring improvements. (Marnanel Thurman)
0.22.7 2024-12-19
* Fix serializing of commits with empty commit messages.
(Castedo Ellerman, #1429)
0.22.6 2024-11-16
* ``ObjectStore.iter_prefix``: fix handling of missing
loose object directories. (Jelmer Vernooij)
* Reject invalid refcontainer values (not 40 characters or symref).
(Arun Babu Neelicattu)
* Add type hints to various functions. (Castedo Ellerman)
0.22.5 2024-11-07
* Drop support for Python 3.8. (Jelmer Vernooij)
* Fix refspec handling in porcelain.pull. (Jelmer Vernooij)
* Drop broken refspec support in porcelain.clone.
(Jelmer Vernooij)
* Provide ``ref_prefix`` functionality client-side
if the server does not support it. (Jelmer Vernooij)
* Consistently honor ``ref_prefix`` and ``protocol_version``
arguments in client. (Jelmer Vernooij)
* Strip pkt-line when negotiating protocol v2. Fixes
compatibility with gerrit. (Rémy Pecqueur, #1423)
* Don't pull in ``setuptools_rust`` when building pure
package. (Eli Schwartz)
* Return peeled refs from ``GitClient.get_refs`` if protocol-v2
is used. (Stefan Sperling, #1410)
* Drop outdated performance file. (Jelmer Vernooij, #1411)
0.22.4 2024-11-01
* Fix handling of symrefs with protocol v2.
(Jelmer Vernooij, #1389)
* Add ``ObjectStore.iter_prefix``. (Jelmer Vernooij)
* Revert back to version 3 of ``Cargo.lock``, to allow
building with older Cargo versions.
(Jelmer Vernooij)
* Use a default ref-prefix when fetching with git protocol v2
(Stefan Sperling, #1389)
* Add `ObjectStore.iter_prefix`. (Jelmer Vernooij)
0.22.3 2024-10-15
* Improve wheel building in CI, so we can upload wheels for the next release.
(Jelmer Vernooij)
0.22.2 2024-10-09
* Ship ``Cargo.lock``. (Jelmer Vernooij, #1287)
* Ship ``tests/`` and ``testdata/`` in sdist. (Jelmer Vernooij, #1292)
* Add initial integration with OSS-Fuzz for continuous fuzz testing and first fuzzing test (David Lakin, #1302)
* Drop Python 3.7 support. (Jelmer Vernooij)
* Improve fuzzing coverage (David Lakin)
* Support Python 3.13. (Edgar Ramírez-Mondragón, #1352)
* Initial support for smart protocol v2. (Stefan Sperling)
0.22.1 2024-04-23
* Handle alternate case for worktreeconfig setting (Will Shanks, #1285)