X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/23800e47361304682914314b99cfd4f3926f28e3..8d557d4167ea98dfbc200fd20f64b8da36da35a2:/gnu/packages/patchutils.scm diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm index 48f4d29584..c26977be1f 100644 --- a/gnu/packages/patchutils.scm +++ b/gnu/packages/patchutils.scm @@ -1,5 +1,8 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014 Eric Bavier +;;; Copyright © 2014, 2018 Eric Bavier +;;; Copyright © 2015, 2018 Leo Famulari +;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2019 Christopher Baines ;;; ;;; This file is part of GNU Guix. ;;; @@ -17,23 +20,39 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages patchutils) + #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix licenses) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix build-system gnu) + #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages ed) #: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) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gtk) #:use-module (gnu packages less) - #:use-module (gnu packages perl)) + #:use-module (gnu packages mail) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) + #:use-module (gnu packages python) + #:use-module (gnu packages python-xyz) + #:use-module (gnu packages version-control) + #:use-module (gnu packages xml)) (define-public patchutils (package (name "patchutils") - (version "0.3.3") + (version "0.3.4") (source (origin (method url-fetch) @@ -41,37 +60,35 @@ name "-" version ".tar.xz")) (sha256 (base32 - "0g5df00cj4nczrmr4k791l7la0sq2wnf8rn981fsrz1f3d2yix4i")) - (patches - (list (search-patch "patchutils-xfail-gendiff-tests.patch"))))) + "0xp8mcfyi5nmb5a2zi5ibmyshxkb1zv1dgmnyn413m7ahgdx8mfg")) + (patches (search-patches "patchutils-test-perms.patch")))) (build-system gnu-build-system) (inputs `(("perl" ,perl))) (arguments '(#:parallel-tests? #f - #:phases (alist-cons-before - 'check 'patch-test-scripts - (lambda _ - (let ((echo (which "echo"))) - (substitute* - (find-files "tests" "^run-test$") - (("/bin/echo") echo)))) - (alist-cons-after - 'install 'wrap-program - ;; Point installed scripts to the utilities they need. - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (diffutils (assoc-ref inputs "diffutils")) - (sed (assoc-ref inputs "sed")) - (gawk (assoc-ref inputs "gawk"))) - (for-each - (lambda (prog) - (wrap-program (string-append out "/bin/" prog) - `("PATH" ":" prefix - ,(map (lambda (dir) - (string-append dir "/bin")) - (list diffutils sed gawk))))) - '("dehtmldiff" "editdiff" "espdiff")))) - %standard-phases)))) + #:phases + (modify-phases %standard-phases + (add-before 'check 'patch-test-scripts + (lambda _ + (substitute* (find-files "tests" "^run-test$") + (("/bin/echo") (which "echo"))) + #t)) + (add-after 'install 'wrap-program + ;; Point installed scripts to the utilities they need. + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (diffutils (assoc-ref inputs "diffutils")) + (sed (assoc-ref inputs "sed")) + (gawk (assoc-ref inputs "gawk"))) + (for-each + (lambda (prog) + (wrap-program (string-append out "/bin/" prog) + `("PATH" ":" prefix + ,(map (lambda (dir) + (string-append dir "/bin")) + (list diffutils sed gawk))))) + '("dehtmldiff" "editdiff" "espdiff"))) + #t))))) (home-page "http://cyberelk.net/tim/software/patchutils") (synopsis "Collection of tools for manipulating patch files") (description @@ -84,55 +101,57 @@ listing the files modified by a patch.") (define-public quilt (package (name "quilt") - (version "0.61") + (version "0.66") (source (origin - (method url-fetch) - (uri (string-append "mirror://savannah/quilt/" - name "-" version ".tar.gz")) - (sha256 - (base32 - "1hwz58djkq9cv46sjwxbp2v5m8yjr41kd0nm1zm1xm6418khmv0y")))) + (method url-fetch) + (uri (string-append "mirror://savannah/quilt/" + "quilt-" version ".tar.gz")) + (sha256 + (base32 "01vfvk4pqigahx82fhaaffg921ivd3k7rylz1yfvy4zbdyd32jri")))) (build-system gnu-build-system) + (native-inputs + `(("gettext" ,gettext-minimal))) (inputs `(("perl" ,perl) ("less" ,less) ("file" ,file) - ("ed" ,ed))) + ("ed" ,ed) + ("diffstat" ,diffstat))) (arguments '(#:parallel-tests? #f - #:phases - (alist-cons-before - 'check 'patch-tests - (lambda _ - (substitute* - '("test/run" - "test/edit.test") - (("/bin/sh") (which "sh"))) - ;; TODO: Run the mail tests once the mail feature can be supported. - (delete-file "test/mail.test")) - (alist-cons-after - 'install 'wrap-program - ;; quilt's configure checks for the absolute path to the utilities it - ;; needs, but uses only the name when invoking them, so we need to - ;; make sure the quilt script can find those utilities when run. - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (coreutils (assoc-ref inputs "coreutils")) - (diffutils (assoc-ref inputs "diffutils")) - (findutils (assoc-ref inputs "findutils")) - (less (assoc-ref inputs "less")) - (file (assoc-ref inputs "file")) - (ed (assoc-ref inputs "ed")) - (sed (assoc-ref inputs "sed")) - (bash (assoc-ref inputs "bash")) - (grep (assoc-ref inputs "grep"))) - (wrap-program (string-append out "/bin/quilt") - `("PATH" ":" prefix - ,(map (lambda (dir) - (string-append dir "/bin")) - (list coreutils diffutils findutils - less file ed sed bash grep)))))) - %standard-phases)))) + #:phases + (modify-phases %standard-phases + (add-before 'check 'patch-tests + (lambda _ + (substitute* + '("test/run" + "test/edit.test") + (("/bin/sh") (which "sh"))) + #t)) + (add-after 'install 'wrap-program + ;; quilt's configure checks for the absolute path to the utilities it + ;; needs, but uses only the name when invoking them, so we need to + ;; make sure the quilt script can find those utilities when run. + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (coreutils (assoc-ref inputs "coreutils")) + (diffutils (assoc-ref inputs "diffutils")) + (findutils (assoc-ref inputs "findutils")) + (diffstat (assoc-ref inputs "diffstat")) + (less (assoc-ref inputs "less")) + (file (assoc-ref inputs "file")) + (ed (assoc-ref inputs "ed")) + (sed (assoc-ref inputs "sed")) + (bash (assoc-ref inputs "bash")) + (grep (assoc-ref inputs "grep"))) + (wrap-program (string-append out "/bin/quilt") + `("PATH" ":" prefix + ,(map (lambda (dir) + (string-append dir "/bin")) + (list coreutils diffutils findutils + less file ed sed bash grep + diffstat))))) + #t))))) (home-page "https://savannah.nongnu.org/projects/quilt/") (synopsis "Script for managing patches to software") (description @@ -140,3 +159,325 @@ listing the files modified by a patch.") track of the changes each patch makes. Patches can be applied, un-applied, refreshed, and more.") (license gpl2))) + +(define-public colordiff + (package + (name "colordiff") + (version "1.0.19") + (source + (origin + (method url-fetch) + (uri (list (string-append "https://www.colordiff.org/colordiff-" + version ".tar.gz") + (string-append "http://www.colordiff.org/archive/colordiff-" + version ".tar.gz"))) + (sha256 + (base32 "069vzzgs7b44bmfh3ks2psrdb26s1w19gp9w4xxbgi7nhx6w3s26")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; no tests + #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")) + "INSTALL_DIR=/bin" "MAN_DIR=/share/man/man1") + #:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (delete 'build)))) ; nothing to build + (inputs + `(("perl" ,perl) + ("xmlto" ,xmlto))) + (home-page "https://www.colordiff.org") + (synopsis "Display diff output with colors") + (description + "Colordiff is Perl script wrapper on top of diff command which provides +'syntax highlighting' for various patch formats.") + (license gpl2+))) + +(define-public patches + (let ((commit "ef1b8a7d954b82ed4af3a08fd63d2085d19090ef")) + (package + (name "patches") + (home-page "https://github.com/stefanha/patches") + (version (string-append "0.0-1." (string-take commit 7))) + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit commit))) + (sha256 + (base32 + "11rdmhv0l1s8nqb20ywmw2zqizczch2p62qf9apyx5wqgxlnjshk")) + (file-name (string-append name "-"version "-checkout")))) + (build-system python-build-system) + (inputs `(("python-notmuch" ,python2-notmuch))) + (arguments + `(#:tests? #f ;no "test" target + #:python ,python-2)) ;not compatible with Python 3 + (synopsis "Patch tracking tool") + (description + "@code{Patches} is a patch-tracking tool initially written for the QEMU +project. It provides commands that build a database of patches from a mailing +list, and commands that can search that database. It allows users to track +the status of a patch, apply patches, and search for patches---all that from +the command-line or from Emacs via its Notmuch integration.") + (license gpl2+)))) + +(define-public vbindiff + (package + (name "vbindiff") + (version "3.0_beta5") + (source (origin + (method url-fetch) + (uri (string-append "https://www.cjmweb.net/vbindiff/vbindiff-" + version ".tar.gz")) + (sha256 + (base32 + "1f1kj4jki08bnrwpzi663mjfkrx4wnfpzdfwd2qgijlkx5ysjkgh")))) + (build-system gnu-build-system) + (inputs + `(("ncurses" ,ncurses))) + (home-page "https://www.cjmweb.net/vbindiff/") + (synopsis "Console-based tool for comparing binary data") + (description "Visual Binary Diff (@command{vbindiff}) displays files in +hexadecimal and ASCII (or EBCDIC). It can also display two files at once, and +highlight the differences between them. It works well with large files (up to 4 +GiB).") + (license gpl2+))) + +(define-public meld + (package + (name "meld") + (version "3.20.2") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnome/sources/meld/" + (version-major+minor version) + "/meld-" version ".tar.xz")) + (sha256 + (base32 "0a0x156zr3w2yg0rnhwy39giy3xnfm6sqcfa4xcw4i6ahvwqa2dc")))) + (build-system python-build-system) + (native-inputs + `(("intltool" ,intltool) + ("xmllint" ,libxml2) + ("glib-compile-schemas" ,glib "bin") + ("python-pytest" ,python-pytest))) + (inputs + `(("python-cairo" ,python-pycairo) + ("python-gobject" ,python-pygobject) + ("gsettings-desktop-schemas" ,gsettings-desktop-schemas) + ("gtksourceview" ,gtksourceview-3))) + (propagated-inputs + `(("dconf" ,dconf))) + (arguments + `(#:imported-modules ((guix build glib-or-gtk-build-system) + ,@%python-build-system-modules) + #:modules ((guix build python-build-system) + ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:) + (guix build utils)) + #:phases + (modify-phases %standard-phases + ;; This setup.py script does not support one of the Python build + ;; system's default flags, "--single-version-externally-managed". + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (invoke "python" "setup.py" + ;; This setup.py runs gtk-update-icon-cache which we don't want. + "--no-update-icon-cache" + ;; "--no-compile-schemas" + "install" + (string-append "--prefix=" (assoc-ref outputs "out")) + "--root=/"))) + ;; The tests need to be run after installation. + (delete 'check) + (add-after 'install 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; Tests look for installed package + (add-installed-pythonpath inputs outputs) + ;; The tests fail when HOME=/homeless-shelter. + (setenv "HOME" "/tmp") + (invoke "py.test" "-v" "-k" + ;; TODO: Those tests fail, why? + "not test_classify_change_actions"))) + (add-after 'wrap 'glib-or-gtk-wrap + (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)) + (add-after 'wrap 'wrap-typelib + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (wrap-program (string-append out "/bin/meld") + `("GI_TYPELIB_PATH" prefix + ,(search-path-as-string->list (getenv "GI_TYPELIB_PATH")))) + #t)))))) + (home-page "https://meldmerge.org/") + (synopsis "Compare files, directories and working copies") + (description "Meld is a visual diff and merge tool targeted at +developers. Meld helps you compare files, directories, and version controlled +projects. It provides two- and three-way comparison of both files and +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.5") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/getpatchwork/patchwork") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1n4hfwlgmw6mj5kp261zfx47mgb0l7g2yzl1rf0rnm8x69lr3as6")))) + (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) + (delete-file "patchwork/wsgi.py") + (call-with-output-file "patchwork/wsgi.py" + (lambda (port) + ;; Embed the PYTHONPATH containing the dependencies, as well + ;; as the python modules in this package in the wsgi.py file, + ;; as this will ensure they are available at runtime. + (define pythonpath + (string-append (getenv "PYTHONPATH") + ":" + (site-packages inputs outputs))) + (display + (string-append " +import os, sys + +sys.path.extend('" pythonpath "'.split(':')) + +from django.core.wsgi import get_wsgi_application + +# By default, assume that patchwork is running as a Guix service, which +# provides the settings as the 'guix.patchwork.settings' Python module. +# +# When using httpd, it's hard to set environment variables, so rely on the +# default set here. +os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv( + 'DJANGO_SETTINGS_MODULE', + 'guix.patchwork.settings' # default +) + +application = get_wsgi_application()\n") port))))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (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")) + (out-site-packages (site-packages inputs outputs))) + (for-each (lambda (directory) + (copy-recursively + directory + (string-append out-site-packages directory))) + '(;; Contains the python code + "patchwork" + ;; Contains the templates for the generated HTML + "templates")) + (delete-file-recursively + (string-append out-site-packages "patchwork/tests")) + + ;; Install patchwork related tools + (for-each (lambda (file) + (install-file file (string-append out "/bin"))) + (list + (string-append out-site-packages + "patchwork/bin/pwclient") + (string-append out-site-packages + "patchwork/bin/parsemail.sh") + (string-append out-site-packages + "patchwork/bin/parsemail-batch.sh"))) + + ;; Delete the symlink to pwclient, and replace it with the + ;; actual file, as this can cause issues when serving the file + ;; from a webserver. + (let ((template-pwclient (string-append + out-site-packages + "patchwork/templates/patchwork/pwclient"))) + (delete-file template-pwclient) + (copy-file (string-append out-site-packages + "patchwork/bin/pwclient") + template-pwclient)) + + ;; Collect the static assets, this includes JavaScript, CSS and + ;; fonts. This is a standard Django process when running a + ;; Django application for regular use, and includes assets for + ;; dependencies like the admin site from Django. + ;; + ;; The intent here is that you can serve files from this + ;; directory through a webserver, which is recommended when + ;; running Django applications. + (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")) + + ;; The lib directory includes example configuration files that + ;; may be useful when deploying patchwork. + (copy-recursively "lib" + (string-append + out "/share/doc/" ,name "-" ,version))) + #t)) + ;; The hasher script is used from the post-receive.hook + (add-after 'install 'install-hasher + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (out-site-packages (site-packages inputs outputs)) + (out-hasher.py (string-append out-site-packages + "/patchwork/hasher.py"))) + (chmod out-hasher.py #o555) + (symlink out-hasher.py (string-append out "/bin/hasher"))) + #t)) + ;; Create a patchwork specific version of Django's command line admin + ;; utility. + (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) + (simple-format port "#!~A +import os, sys + +if __name__ == \"__main__\": + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv)" (which "python")))) + (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 "Web based patch tracking system") + (description + "Patchwork is a patch tracking system. It takes in emails containing +patches, and displays the patches along with comments and state information. +Users can login allowing them to change the state of patches.") + (home-page "http://jk.ozlabs.org/projects/patchwork/") + (license gpl2+)))