Commit | Line | Data |
---|---|---|
8a9d928f | 1 | ;;; GNU Guix --- Functional package management for GNU |
68faa20e | 2 | ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org> |
9e286eb1 | 3 | ;;; Copyright © 2015, 2018 Leo Famulari <leo@famulari.name> |
8f55136a | 4 | ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
4764c6cc | 5 | ;;; Copyright © 2019 Christopher Baines <mail@cbaines.net> |
8a9d928f EB |
6 | ;;; |
7 | ;;; This file is part of GNU Guix. | |
8 | ;;; | |
9 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
10 | ;;; under the terms of the GNU General Public License as published by | |
11 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
12 | ;;; your option) any later version. | |
13 | ;;; | |
14 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
15 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | ;;; GNU General Public License for more details. | |
18 | ;;; | |
19 | ;;; You should have received a copy of the GNU General Public License | |
20 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
21 | ||
22 | (define-module (gnu packages patchutils) | |
be0be3de | 23 | #:use-module (guix utils) |
8a9d928f EB |
24 | #:use-module (guix packages) |
25 | #:use-module (guix licenses) | |
26 | #:use-module (guix download) | |
3b6eddb2 | 27 | #:use-module (guix git-download) |
8a9d928f | 28 | #:use-module (guix build-system gnu) |
3b6eddb2 | 29 | #:use-module (guix build-system python) |
8a9d928f EB |
30 | #:use-module (gnu packages) |
31 | #:use-module (gnu packages ed) | |
32 | #:use-module (gnu packages base) | |
33 | #:use-module (gnu packages bash) | |
be0be3de | 34 | #:use-module (gnu packages check) |
4764c6cc CB |
35 | #:use-module (gnu packages databases) |
36 | #:use-module (gnu packages django) | |
8a9d928f EB |
37 | #:use-module (gnu packages file) |
38 | #:use-module (gnu packages gawk) | |
24a80064 | 39 | #:use-module (gnu packages gettext) |
be0be3de PN |
40 | #:use-module (gnu packages glib) |
41 | #:use-module (gnu packages gnome) | |
42 | #:use-module (gnu packages gtk) | |
8a9d928f | 43 | #:use-module (gnu packages less) |
9e286eb1 LF |
44 | #:use-module (gnu packages mail) |
45 | #:use-module (gnu packages ncurses) | |
285d8f0d | 46 | #:use-module (gnu packages perl) |
3b6eddb2 | 47 | #:use-module (gnu packages python) |
44d10b1f | 48 | #:use-module (gnu packages python-xyz) |
d7d1fc82 | 49 | #:use-module (gnu packages version-control) |
285d8f0d | 50 | #:use-module (gnu packages xml)) |
8a9d928f EB |
51 | |
52 | (define-public patchutils | |
53 | (package | |
54 | (name "patchutils") | |
5f230fb2 | 55 | (version "0.3.4") |
8a9d928f EB |
56 | (source |
57 | (origin | |
58 | (method url-fetch) | |
59 | (uri (string-append "http://cyberelk.net/tim/data/patchutils/stable/" | |
60 | name "-" version ".tar.xz")) | |
61 | (sha256 | |
62 | (base32 | |
5f230fb2 EB |
63 | "0xp8mcfyi5nmb5a2zi5ibmyshxkb1zv1dgmnyn413m7ahgdx8mfg")) |
64 | (patches (search-patches "patchutils-test-perms.patch")))) | |
8a9d928f EB |
65 | (build-system gnu-build-system) |
66 | (inputs `(("perl" ,perl))) | |
67 | (arguments | |
68 | '(#:parallel-tests? #f | |
dc1d3cde KK |
69 | #:phases |
70 | (modify-phases %standard-phases | |
71 | (add-before 'check 'patch-test-scripts | |
72 | (lambda _ | |
5f230fb2 EB |
73 | (substitute* (find-files "tests" "^run-test$") |
74 | (("/bin/echo") (which "echo"))) | |
dc1d3cde KK |
75 | #t)) |
76 | (add-after 'install 'wrap-program | |
77 | ;; Point installed scripts to the utilities they need. | |
78 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
79 | (let* ((out (assoc-ref outputs "out")) | |
80 | (diffutils (assoc-ref inputs "diffutils")) | |
81 | (sed (assoc-ref inputs "sed")) | |
82 | (gawk (assoc-ref inputs "gawk"))) | |
83 | (for-each | |
84 | (lambda (prog) | |
85 | (wrap-program (string-append out "/bin/" prog) | |
86 | `("PATH" ":" prefix | |
87 | ,(map (lambda (dir) | |
88 | (string-append dir "/bin")) | |
89 | (list diffutils sed gawk))))) | |
90 | '("dehtmldiff" "editdiff" "espdiff"))) | |
91 | #t))))) | |
8a9d928f EB |
92 | (home-page "http://cyberelk.net/tim/software/patchutils") |
93 | (synopsis "Collection of tools for manipulating patch files") | |
94 | (description | |
95 | "Patchutils is a collection of programs that can manipulate patch files | |
96 | in useful ways such as interpolating between two pre-patches, combining two | |
97 | incremental patches, fixing line numbers in hand-edited patches, and simply | |
98 | listing the files modified by a patch.") | |
99 | (license gpl2+))) | |
100 | ||
101 | (define-public quilt | |
102 | (package | |
103 | (name "quilt") | |
eea75c43 | 104 | (version "0.66") |
8a9d928f EB |
105 | (source |
106 | (origin | |
eea75c43 TGR |
107 | (method url-fetch) |
108 | (uri (string-append "mirror://savannah/quilt/" | |
109 | "quilt-" version ".tar.gz")) | |
110 | (sha256 | |
111 | (base32 "01vfvk4pqigahx82fhaaffg921ivd3k7rylz1yfvy4zbdyd32jri")))) | |
8a9d928f | 112 | (build-system gnu-build-system) |
24a80064 | 113 | (native-inputs |
f2d97d57 | 114 | `(("gettext" ,gettext-minimal))) |
8a9d928f EB |
115 | (inputs `(("perl" ,perl) |
116 | ("less" ,less) | |
0253ab39 | 117 | ("file" ,file) |
d7d1fc82 EB |
118 | ("ed" ,ed) |
119 | ("diffstat" ,diffstat))) | |
8a9d928f EB |
120 | (arguments |
121 | '(#:parallel-tests? #f | |
dc1d3cde KK |
122 | #:phases |
123 | (modify-phases %standard-phases | |
124 | (add-before 'check 'patch-tests | |
125 | (lambda _ | |
126 | (substitute* | |
127 | '("test/run" | |
be0be3de | 128 | "test/edit.test") |
dc1d3cde | 129 | (("/bin/sh") (which "sh"))) |
dc1d3cde KK |
130 | #t)) |
131 | (add-after 'install 'wrap-program | |
132 | ;; quilt's configure checks for the absolute path to the utilities it | |
133 | ;; needs, but uses only the name when invoking them, so we need to | |
134 | ;; make sure the quilt script can find those utilities when run. | |
135 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
136 | (let* ((out (assoc-ref outputs "out")) | |
137 | (coreutils (assoc-ref inputs "coreutils")) | |
138 | (diffutils (assoc-ref inputs "diffutils")) | |
139 | (findutils (assoc-ref inputs "findutils")) | |
d7d1fc82 | 140 | (diffstat (assoc-ref inputs "diffstat")) |
dc1d3cde KK |
141 | (less (assoc-ref inputs "less")) |
142 | (file (assoc-ref inputs "file")) | |
143 | (ed (assoc-ref inputs "ed")) | |
144 | (sed (assoc-ref inputs "sed")) | |
145 | (bash (assoc-ref inputs "bash")) | |
146 | (grep (assoc-ref inputs "grep"))) | |
147 | (wrap-program (string-append out "/bin/quilt") | |
148 | `("PATH" ":" prefix | |
149 | ,(map (lambda (dir) | |
150 | (string-append dir "/bin")) | |
151 | (list coreutils diffutils findutils | |
d7d1fc82 EB |
152 | less file ed sed bash grep |
153 | diffstat))))) | |
dc1d3cde | 154 | #t))))) |
8a9d928f EB |
155 | (home-page "https://savannah.nongnu.org/projects/quilt/") |
156 | (synopsis "Script for managing patches to software") | |
157 | (description | |
158 | "Quilt allows you to easily manage large numbers of patches by keeping | |
159 | track of the changes each patch makes. Patches can be applied, un-applied, | |
160 | refreshed, and more.") | |
161 | (license gpl2))) | |
285d8f0d TČ |
162 | |
163 | (define-public colordiff | |
164 | (package | |
165 | (name "colordiff") | |
18a91ab8 | 166 | (version "1.0.19") |
285d8f0d | 167 | (source |
8d479d27 LF |
168 | (origin |
169 | (method url-fetch) | |
58e3603e TGR |
170 | (uri (list (string-append "https://www.colordiff.org/colordiff-" |
171 | version ".tar.gz") | |
172 | (string-append "http://www.colordiff.org/archive/colordiff-" | |
8d479d27 | 173 | version ".tar.gz"))) |
285d8f0d | 174 | (sha256 |
18a91ab8 | 175 | (base32 "069vzzgs7b44bmfh3ks2psrdb26s1w19gp9w4xxbgi7nhx6w3s26")))) |
285d8f0d TČ |
176 | (build-system gnu-build-system) |
177 | (arguments | |
58e3603e | 178 | `(#:tests? #f ; no tests |
285d8f0d TČ |
179 | #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")) |
180 | "INSTALL_DIR=/bin" "MAN_DIR=/share/man/man1") | |
181 | #:phases | |
dc1d3cde | 182 | (modify-phases %standard-phases |
58e3603e TGR |
183 | (delete 'configure) ; no configure script |
184 | (delete 'build)))) ; nothing to build | |
285d8f0d TČ |
185 | (inputs |
186 | `(("perl" ,perl) | |
187 | ("xmlto" ,xmlto))) | |
8cccd09d | 188 | (home-page "https://www.colordiff.org") |
285d8f0d TČ |
189 | (synopsis "Display diff output with colors") |
190 | (description | |
191 | "Colordiff is Perl script wrapper on top of diff command which provides | |
192 | 'syntax highlighting' for various patch formats.") | |
193 | (license gpl2+))) | |
3b6eddb2 LC |
194 | |
195 | (define-public patches | |
5ca54f41 | 196 | (let ((commit "ef1b8a7d954b82ed4af3a08fd63d2085d19090ef")) |
3b6eddb2 LC |
197 | (package |
198 | (name "patches") | |
5ca54f41 LC |
199 | (home-page "https://github.com/stefanha/patches") |
200 | (version (string-append "0.0-1." (string-take commit 7))) | |
3b6eddb2 LC |
201 | (source (origin |
202 | (method git-fetch) | |
203 | (uri (git-reference | |
5ca54f41 | 204 | (url home-page) |
3b6eddb2 LC |
205 | (commit commit))) |
206 | (sha256 | |
207 | (base32 | |
5ca54f41 LC |
208 | "11rdmhv0l1s8nqb20ywmw2zqizczch2p62qf9apyx5wqgxlnjshk")) |
209 | (file-name (string-append name "-"version "-checkout")))) | |
3b6eddb2 LC |
210 | (build-system python-build-system) |
211 | (inputs `(("python-notmuch" ,python2-notmuch))) | |
212 | (arguments | |
213 | `(#:tests? #f ;no "test" target | |
5ca54f41 | 214 | #:python ,python-2)) ;not compatible with Python 3 |
3b6eddb2 LC |
215 | (synopsis "Patch tracking tool") |
216 | (description | |
36a4366d | 217 | "@code{Patches} is a patch-tracking tool initially written for the QEMU |
3b6eddb2 LC |
218 | project. It provides commands that build a database of patches from a mailing |
219 | list, and commands that can search that database. It allows users to track | |
220 | the status of a patch, apply patches, and search for patches---all that from | |
221 | the command-line or from Emacs via its Notmuch integration.") | |
222 | (license gpl2+)))) | |
9e286eb1 LF |
223 | |
224 | (define-public vbindiff | |
225 | (package | |
226 | (name "vbindiff") | |
227 | (version "3.0_beta5") | |
228 | (source (origin | |
229 | (method url-fetch) | |
230 | (uri (string-append "https://www.cjmweb.net/vbindiff/vbindiff-" | |
231 | version ".tar.gz")) | |
232 | (sha256 | |
233 | (base32 | |
234 | "1f1kj4jki08bnrwpzi663mjfkrx4wnfpzdfwd2qgijlkx5ysjkgh")))) | |
235 | (build-system gnu-build-system) | |
236 | (inputs | |
237 | `(("ncurses" ,ncurses))) | |
238 | (home-page "https://www.cjmweb.net/vbindiff/") | |
239 | (synopsis "Console-based tool for comparing binary data") | |
240 | (description "Visual Binary Diff (@command{vbindiff}) displays files in | |
241 | hexadecimal and ASCII (or EBCDIC). It can also display two files at once, and | |
242 | highlight the differences between them. It works well with large files (up to 4 | |
243 | GiB).") | |
244 | (license gpl2+))) | |
be0be3de PN |
245 | |
246 | (define-public meld | |
247 | (package | |
248 | (name "meld") | |
8f55136a | 249 | (version "3.20.2") |
be0be3de PN |
250 | (source |
251 | (origin | |
252 | (method url-fetch) | |
253 | (uri (string-append "mirror://gnome/sources/meld/" | |
254 | (version-major+minor version) | |
255 | "/meld-" version ".tar.xz")) | |
256 | (sha256 | |
8f55136a | 257 | (base32 "0a0x156zr3w2yg0rnhwy39giy3xnfm6sqcfa4xcw4i6ahvwqa2dc")))) |
be0be3de PN |
258 | (build-system python-build-system) |
259 | (native-inputs | |
260 | `(("intltool" ,intltool) | |
261 | ("xmllint" ,libxml2) | |
262 | ("glib-compile-schemas" ,glib "bin") | |
263 | ("python-pytest" ,python-pytest))) | |
264 | (inputs | |
265 | `(("python-cairo" ,python-pycairo) | |
266 | ("python-gobject" ,python-pygobject) | |
3a428dd6 | 267 | ("gsettings-desktop-schemas" ,gsettings-desktop-schemas) |
b901a566 | 268 | ("gtksourceview" ,gtksourceview-3))) |
be0be3de PN |
269 | (propagated-inputs |
270 | `(("dconf" ,dconf))) | |
271 | (arguments | |
3a428dd6 TGR |
272 | `(#:imported-modules ((guix build glib-or-gtk-build-system) |
273 | ,@%python-build-system-modules) | |
274 | #:modules ((guix build python-build-system) | |
275 | ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:) | |
276 | (guix build utils)) | |
277 | #:phases | |
be0be3de PN |
278 | (modify-phases %standard-phases |
279 | ;; This setup.py script does not support one of the Python build | |
280 | ;; system's default flags, "--single-version-externally-managed". | |
281 | (replace 'install | |
282 | (lambda* (#:key outputs #:allow-other-keys) | |
283 | (invoke "python" "setup.py" | |
284 | ;; This setup.py runs gtk-update-icon-cache which we don't want. | |
285 | "--no-update-icon-cache" | |
286 | ;; "--no-compile-schemas" | |
287 | "install" | |
288 | (string-append "--prefix=" (assoc-ref outputs "out")) | |
289 | "--root=/"))) | |
290 | ;; The tests need to be run after installation. | |
291 | (delete 'check) | |
292 | (add-after 'install 'check | |
293 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
294 | ;; Tests look for installed package | |
295 | (add-installed-pythonpath inputs outputs) | |
296 | ;; The tests fail when HOME=/homeless-shelter. | |
297 | (setenv "HOME" "/tmp") | |
298 | (invoke "py.test" "-v" "-k" | |
299 | ;; TODO: Those tests fail, why? | |
b901a566 | 300 | "not test_classify_change_actions"))) |
3a428dd6 TGR |
301 | (add-after 'wrap 'glib-or-gtk-wrap |
302 | (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)) | |
b901a566 LP |
303 | (add-after 'wrap 'wrap-typelib |
304 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
305 | (let ((out (assoc-ref outputs "out"))) | |
306 | (wrap-program (string-append out "/bin/meld") | |
307 | `("GI_TYPELIB_PATH" prefix | |
308 | ,(search-path-as-string->list (getenv "GI_TYPELIB_PATH")))) | |
309 | #t)))))) | |
be0be3de PN |
310 | (home-page "https://meldmerge.org/") |
311 | (synopsis "Compare files, directories and working copies") | |
312 | (description "Meld is a visual diff and merge tool targeted at | |
313 | developers. Meld helps you compare files, directories, and version controlled | |
314 | projects. It provides two- and three-way comparison of both files and | |
315 | directories, and has support for many popular version control systems. | |
316 | ||
317 | Meld helps you review code changes and understand patches. It might even help | |
318 | you to figure out what is going on in that merge you keep avoiding.") | |
319 | (license gpl2))) | |
4764c6cc CB |
320 | |
321 | (define-public patchwork | |
322 | (package | |
323 | (name "patchwork") | |
a961e7ff | 324 | (version "2.1.5") |
4764c6cc CB |
325 | (source (origin |
326 | (method git-fetch) | |
327 | (uri (git-reference | |
b0e7b699 | 328 | (url "https://github.com/getpatchwork/patchwork") |
4764c6cc CB |
329 | (commit (string-append "v" version)))) |
330 | (file-name (git-file-name name version)) | |
331 | (sha256 | |
332 | (base32 | |
a961e7ff | 333 | "1n4hfwlgmw6mj5kp261zfx47mgb0l7g2yzl1rf0rnm8x69lr3as6")))) |
4764c6cc CB |
334 | (build-system python-build-system) |
335 | (arguments | |
336 | `(;; TODO: Tests require a running database | |
337 | #:tests? #f | |
338 | #:phases | |
339 | (modify-phases %standard-phases | |
340 | (delete 'configure) | |
341 | (delete 'build) | |
342 | (add-after 'unpack 'replace-wsgi.py | |
343 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
344 | (delete-file "patchwork/wsgi.py") | |
345 | (call-with-output-file "patchwork/wsgi.py" | |
346 | (lambda (port) | |
347 | ;; Embed the PYTHONPATH containing the dependencies, as well | |
348 | ;; as the python modules in this package in the wsgi.py file, | |
349 | ;; as this will ensure they are available at runtime. | |
350 | (define pythonpath | |
351 | (string-append (getenv "PYTHONPATH") | |
352 | ":" | |
353 | (site-packages inputs outputs))) | |
354 | (display | |
355 | (string-append " | |
356 | import os, sys | |
357 | ||
358 | sys.path.extend('" pythonpath "'.split(':')) | |
359 | ||
360 | from django.core.wsgi import get_wsgi_application | |
361 | ||
362 | # By default, assume that patchwork is running as a Guix service, which | |
363 | # provides the settings as the 'guix.patchwork.settings' Python module. | |
364 | # | |
365 | # When using httpd, it's hard to set environment variables, so rely on the | |
366 | # default set here. | |
367 | os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv( | |
368 | 'DJANGO_SETTINGS_MODULE', | |
369 | 'guix.patchwork.settings' # default | |
370 | ) | |
371 | ||
372 | application = get_wsgi_application()\n") port))))) | |
373 | (replace 'check | |
374 | (lambda* (#:key tests? #:allow-other-keys) | |
375 | (when tests? | |
376 | (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.dev") | |
377 | (invoke "python" "-Wonce" "./manage.py" "test" "--noinput")) | |
378 | #t)) | |
379 | (replace 'install | |
380 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
381 | (let ((out (assoc-ref outputs "out")) | |
382 | (out-site-packages (site-packages inputs outputs))) | |
383 | (for-each (lambda (directory) | |
384 | (copy-recursively | |
385 | directory | |
386 | (string-append out-site-packages directory))) | |
387 | '(;; Contains the python code | |
388 | "patchwork" | |
389 | ;; Contains the templates for the generated HTML | |
390 | "templates")) | |
391 | (delete-file-recursively | |
392 | (string-append out-site-packages "patchwork/tests")) | |
393 | ||
394 | ;; Install patchwork related tools | |
395 | (for-each (lambda (file) | |
396 | (install-file file (string-append out "/bin"))) | |
397 | (list | |
398 | (string-append out-site-packages | |
399 | "patchwork/bin/pwclient") | |
400 | (string-append out-site-packages | |
401 | "patchwork/bin/parsemail.sh") | |
402 | (string-append out-site-packages | |
403 | "patchwork/bin/parsemail-batch.sh"))) | |
404 | ||
405 | ;; Delete the symlink to pwclient, and replace it with the | |
406 | ;; actual file, as this can cause issues when serving the file | |
407 | ;; from a webserver. | |
408 | (let ((template-pwclient (string-append | |
409 | out-site-packages | |
410 | "patchwork/templates/patchwork/pwclient"))) | |
411 | (delete-file template-pwclient) | |
412 | (copy-file (string-append out-site-packages | |
413 | "patchwork/bin/pwclient") | |
414 | template-pwclient)) | |
415 | ||
416 | ;; Collect the static assets, this includes JavaScript, CSS and | |
417 | ;; fonts. This is a standard Django process when running a | |
418 | ;; Django application for regular use, and includes assets for | |
419 | ;; dependencies like the admin site from Django. | |
420 | ;; | |
421 | ;; The intent here is that you can serve files from this | |
422 | ;; directory through a webserver, which is recommended when | |
423 | ;; running Django applications. | |
424 | (let ((static-root | |
425 | (string-append out "/share/patchwork/htdocs"))) | |
426 | (mkdir-p static-root) | |
427 | (copy-file "patchwork/settings/production.example.py" | |
428 | "patchwork/settings/assets.py") | |
429 | (setenv "DJANGO_SECRET_KEY" "dummyvalue") | |
430 | (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.assets") | |
431 | (setenv "STATIC_ROOT" static-root) | |
432 | (invoke "./manage.py" "collectstatic" "--no-input")) | |
433 | ||
434 | ;; The lib directory includes example configuration files that | |
435 | ;; may be useful when deploying patchwork. | |
436 | (copy-recursively "lib" | |
437 | (string-append | |
438 | out "/share/doc/" ,name "-" ,version))) | |
439 | #t)) | |
440 | ;; The hasher script is used from the post-receive.hook | |
441 | (add-after 'install 'install-hasher | |
442 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
443 | (let* ((out (assoc-ref outputs "out")) | |
444 | (out-site-packages (site-packages inputs outputs)) | |
445 | (out-hasher.py (string-append out-site-packages | |
446 | "/patchwork/hasher.py"))) | |
447 | (chmod out-hasher.py #o555) | |
448 | (symlink out-hasher.py (string-append out "/bin/hasher"))) | |
449 | #t)) | |
450 | ;; Create a patchwork specific version of Django's command line admin | |
451 | ;; utility. | |
452 | (add-after 'install 'install-patchwork-admin | |
453 | (lambda* (#:key inputs outputs #:allow-other-keys) | |
454 | (let* ((out (assoc-ref outputs "out"))) | |
455 | (mkdir-p (string-append out "/bin")) | |
456 | (call-with-output-file (string-append out "/bin/patchwork-admin") | |
457 | (lambda (port) | |
458 | (simple-format port "#!~A | |
459 | import os, sys | |
460 | ||
461 | if __name__ == \"__main__\": | |
462 | from django.core.management import execute_from_command_line | |
463 | ||
464 | execute_from_command_line(sys.argv)" (which "python")))) | |
465 | (chmod (string-append out "/bin/patchwork-admin") #o555)) | |
466 | #t))))) | |
467 | (inputs | |
468 | `(("python-wrapper" ,python-wrapper))) | |
469 | (propagated-inputs | |
470 | `(("python-django" ,python-django) | |
471 | ;; TODO: Make this configurable | |
472 | ("python-psycopg2" ,python-psycopg2) | |
473 | ("python-mysqlclient" ,python-mysqlclient) | |
474 | ("python-django-filter" ,python-django-filter) | |
475 | ("python-djangorestframework" ,python-djangorestframework) | |
476 | ("python-django-debug-toolbar" ,python-django-debug-toolbar))) | |
477 | (synopsis "Web based patch tracking system") | |
478 | (description | |
479 | "Patchwork is a patch tracking system. It takes in emails containing | |
480 | patches, and displays the patches along with comments and state information. | |
481 | Users can login allowing them to change the state of patches.") | |
482 | (home-page "http://jk.ozlabs.org/projects/patchwork/") | |
483 | (license gpl2+))) |