aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-02-05 19:09:16 +0000
committerChristopher Baines <mail@cbaines.net>2019-03-01 07:11:44 +0000
commit34ec4c359f292d90c8fc348da6654822bad24694 (patch)
treea71f5422939a0f973e9caef87734d9a54ba5b515
parenta215c938b387f5bbbb78f1e80d81b2e4e2c9f9e3 (diff)
downloadguix-34ec4c359f292d90c8fc348da6654822bad24694.tar
guix-34ec4c359f292d90c8fc348da6654822bad24694.tar.gz
gnu: Add patchwork.
-rw-r--r--gnu/packages/patchutils.scm132
1 files changed, 132 insertions, 0 deletions
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 09f5afbb28..f20eb9df3c 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -31,6 +31,8 @@
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages check)
+ #:use-module (gnu packages databases)
+ #:use-module (gnu packages django)
#:use-module (gnu packages file)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gettext)
@@ -305,3 +307,133 @@ directories, and has support for many popular version control systems.
Meld helps you review code changes and understand patches. It might even help
you to figure out what is going on in that merge you keep avoiding.")
(license gpl2)))
+
+(define-public patchwork
+ (package
+ (name "patchwork")
+ (version "2.1.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/getpatchwork/patchwork/archive/v"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1q4i46gwwxvr8gjj983r8aacfsssp062dzi29ha7zba380fsxayy"))
+ (file-name (string-append name "-" version))))
+ (build-system python-build-system)
+ (arguments
+ `(;; TODO: Tests require a running database
+ #:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (delete 'build)
+ (add-after 'unpack 'patch-wsgi.py
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (substitute* "patchwork/wsgi.py"
+ (("import os")
+ (string-append
+ "import os, sys
+
+sys.path.extend('" (string-append (getenv "PYTHONPATH") ":" (site-packages inputs outputs)) "'.split(':'))"))
+ (("'patchwork\\.settings\\.production'")
+ "os.getenv('DJANGO_SETTINGS_MODULE', 'guix.patchwork.settings')"))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (or (not tests?)
+ (begin
+ (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.dev")
+ (invoke
+ "python" "-Wonce" "./manage.py" "test" "--noinput")
+ #t))))
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (for-each (lambda (directory)
+ (copy-recursively
+ directory
+ (string-append (site-packages inputs outputs)
+ "/" directory)))
+ '("patchwork"
+ "templates"))
+ (delete-file-recursively (string-append
+ (site-packages inputs outputs)
+ "patchwork/tests"))
+ ;; pwclient
+ (for-each (lambda (file)
+ (install-file file (string-append out "/bin")))
+ (list
+ (string-append (site-packages inputs outputs)
+ "/patchwork/bin/pwclient")
+ (string-append (site-packages inputs outputs)
+ "/patchwork/bin/parsemail.sh")
+ (string-append (site-packages inputs outputs)
+ "patchwork/bin/parsemail-batch.sh")))
+
+ (simple-format #t "replacing template pwclient symlink")
+ (let ((template-pwclient (string-append
+ (site-packages inputs outputs)
+ "/patchwork/templates/patchwork/pwclient")))
+ (delete-file template-pwclient)
+ (copy-file (string-append (site-packages inputs outputs)
+ "/patchwork/bin/pwclient")
+ template-pwclient))
+
+ (let ((static-root
+ (string-append out "/share/patchwork/htdocs")))
+ (mkdir-p static-root)
+ (copy-file "patchwork/settings/production.example.py"
+ "patchwork/settings/assets.py")
+ (setenv "DJANGO_SECRET_KEY" "dummyvalue")
+ (setenv "DJANGO_SETTINGS_MODULE" "patchwork.settings.assets")
+ (setenv "STATIC_ROOT" static-root)
+ (invoke "./manage.py" "collectstatic" "--no-input"))
+
+ (copy-recursively "lib"
+ (string-append
+ out "/share/doc/" ,name "-" ,version)))
+ #t))
+ (add-after 'install 'install-hasher
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (chmod (string-append (site-packages inputs outputs)
+ "/patchwork/hasher.py")
+ #o555)
+ (symlink (string-append (site-packages inputs outputs)
+ "/patchwork/hasher.py")
+ (string-append out "/bin/hasher")))))
+ (add-after 'install 'install-patchwork-admin
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ (mkdir-p (string-append out "/bin"))
+ (call-with-output-file (string-append out "/bin/patchwork-admin")
+ (lambda (port)
+ (display "#!/usr/bin/env python3
+import os, sys
+
+if __name__ == \"__main__\":
+ os.environ.setdefault(
+ \"DJANGO_SETTINGS_MODULE\",
+ \"guix.patchwork.settings\"
+ )
+
+ from django.core.management import execute_from_command_line
+
+ execute_from_command_line(sys.argv)" port)))
+ (chmod (string-append out "/bin/patchwork-admin") #o555))
+ #t)))))
+ (inputs
+ `(("python-wrapper" ,python-wrapper)))
+ (propagated-inputs
+ `(("python-django" ,python-django)
+ ;; TODO: Make this configurable
+ ("python-psycopg2" ,python-psycopg2)
+ ("python-mysqlclient" ,python-mysqlclient)
+ ("python-django-filter" ,python-django-filter)
+ ("python-djangorestframework" ,python-djangorestframework)
+ ("python-django-debug-toolbar" ,python-django-debug-toolbar)))
+ (synopsis "")
+ (description "")
+ (home-page "")
+ (license "")))