aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2018-02-05 19:09:16 +0000
committerChristopher Baines <mail@cbaines.net>2019-01-22 18:19:49 +0000
commit5082cc25a50d59bd7baaf08139e42876d3f71713 (patch)
tree83f57743691defbee2719c1fd8d677b6b62637de
parentd1dfcc7c1b38d816dddc2868917ba490db7e7c3b (diff)
downloadguix-5082cc25a50d59bd7baaf08139e42876d3f71713.tar
guix-5082cc25a50d59bd7baaf08139e42876d3f71713.tar.gz
gnu: Add patchwork.
-rw-r--r--gnu/packages/patchutils.scm137
1 files changed, 137 insertions, 0 deletions
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 09f5afbb28..8766c73e23 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,138 @@ 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 'replace-wsgi.py
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (call-with-output-file "patchwork/wsgi.py"
+ (lambda (port)
+ (display
+ (string-append "
+import os, sys
+
+sys.path.extend('" (string-append (getenv "PYTHONPATH") ":" (site-packages inputs outputs)) "'.split(':'))
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE', 'guix.patchwork.settings')
+
+application = get_wsgi_application()\n") port)))))
+ (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 "")))