1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 fastimport,
6 fetchFromGitHub,
7 fetchpatch2,
8 gevent,
9 geventhttpclient,
10 git,
11 glibcLocales,
12 gnupg,
13 gpgme,
14 paramiko,
15 unittestCheckHook,
16 pythonOlder,
17 setuptools,
18 setuptools-rust,
19 urllib3,
20}:
21
22buildPythonPackage rec {
23 version = "0.22.5";
24 pname = "dulwich";
25 format = "setuptools";
26
27 disabled = pythonOlder "3.7";
28
29 src = fetchFromGitHub {
30 owner = "jelmer";
31 repo = "dulwich";
32 rev = "refs/tags/dulwich-${version}";
33 hash = "sha256-/YqC7y8PU+H2qjPqqzdw6iSSSElK709izLTcs9qbt1I=";
34 };
35
36 build-system = [
37 setuptools
38 setuptools-rust
39 ];
40
41 propagatedBuildInputs = [
42 urllib3
43 ];
44
45 optional-dependencies = {
46 fastimport = [ fastimport ];
47 https = [ urllib3 ];
48 pgp = [
49 gpgme
50 gnupg
51 ];
52 paramiko = [ paramiko ];
53 };
54
55 nativeCheckInputs = [
56 gevent
57 geventhttpclient
58 git
59 glibcLocales
60 unittestCheckHook
61 ] ++ lib.flatten (lib.attrValues optional-dependencies);
62
63 preCheck = ''
64 # requires swift config file
65 rm tests/contrib/test_swift_smoke.py
66
67 # ImportError: attempted relative import beyond top-level package
68 rm tests/test_greenthreads.py
69 '';
70
71 doCheck = !stdenv.hostPlatform.isDarwin;
72
73 pythonImportsCheck = [ "dulwich" ];
74
75 meta = with lib; {
76 description = "Implementation of the Git file formats and protocols";
77 longDescription = ''
78 Dulwich is a Python implementation of the Git file formats and protocols, which
79 does not depend on Git itself. All functionality is available in pure Python.
80 '';
81 homepage = "https://www.dulwich.io/";
82 changelog = "https://github.com/jelmer/dulwich/blob/dulwich-${version}/NEWS";
83 license = with licenses; [
84 asl20
85 gpl2Plus
86 ];
87 maintainers = with maintainers; [ koral ];
88 };
89}