X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/fa9f5df7c439083913bc08ec926b7c799704065b..655c4bb25cfb1fa02ad1378e9d0dc2cfb2b3a03c:/gnu/packages/version-control.scm diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index df160bcc53..2ee8247071 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -1,32 +1,36 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Nikita Karetnikov ;;; Copyright © 2013 Cyril Roelandt -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès +;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2013, 2014 Andreas Enge ;;; Copyright © 2015, 2016 Mathieu Lirzin ;;; Copyright © 2014, 2015, 2016 Mark H Weaver ;;; Copyright © 2014, 2016, 2019 Eric Bavier -;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner +;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner ;;; Copyright © 2015, 2018 Kyle Meyer -;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus +;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus ;;; Copyright © 2016, 2017 Leo Famulari -;;; Copyright © 2016, 2017, 2018 ng0 +;;; Copyright © 2016, 2017, 2018 Nikita ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice ;;; Copyright © 2017 Vasile Dumitrascu ;;; Copyright © 2017 Clément Lassieur ;;; Copyright © 2017 André -;;; Copyright © 2017, 2018 Marius Bakke +;;; Copyright © 2017, 2018, 2020 Marius Bakke ;;; Copyright © 2017 Stefan Reichör -;;; Copyright © 2017 Oleg Pykhalov +;;; Copyright © 2017, 2020 Oleg Pykhalov ;;; Copyright © 2018 Sou Bunnbu ;;; Copyright © 2018 Christopher Baines ;;; Copyright © 2018 Timothy Sample ;;; Copyright © 2018 Arun Isaac ;;; Copyright © 2019 Jovany Leandro G.C ;;; Copyright © 2019 Kei Kebreau -;;; Copyright © 2019 Alex Griffin +;;; Copyright © 2019, 2020 Alex Griffin ;;; Copyright © 2020 Roel Janssen ;;; Copyright © 2020 Brice Waegeneire +;;; Copyright © 2020 John D. Boy +;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2020 Vinicius Monego +;;; Copyright © 2020 Tanguy Le Carrour ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,9 +53,11 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix hg-download) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system go) + #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix build-system trivial) #:use-module (gnu packages apr) @@ -70,6 +76,7 @@ #:use-module (gnu packages flex) #:use-module (gnu packages gettext) #:use-module (gnu packages gl) + #:use-module (gnu packages golang) #:use-module (gnu packages groff) #:use-module (gnu packages guile) #:use-module (gnu packages image) @@ -144,22 +151,29 @@ changes to project files over time. It supports both a distributed workflow as well as the classic centralized workflow.") (license license:gpl2+))) +(define git-cross-configure-flags + '("ac_cv_fread_reads_directories=yes" + "ac_cv_snprintf_returns_bogus=no" + "ac_cv_iconv_omits_bom=no")) + (define-public git (package (name "git") - ;; XXX When updating Git, check if the special 'git-source' input to cgit - ;; needs to be updated as well. - (version "2.25.1") + (version "2.28.0") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "09lzwa183nblr6l8ib35g2xrjf9wm9yhk3szfvyzkwivdv69c9r2")))) + "17a311vzimqn1glc9d7x82rhb1mb81m5rr4g8xji8idaafid39fz")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) + ;; Add bash-minimal explicitly to ensure it comes before bash-for-tests, + ;; see . + ("bash" ,bash-minimal) + ("bash-for-tests" ,bash) ("gettext" ,gettext-minimal) ("git-manpages" ,(origin @@ -169,9 +183,9 @@ as well as the classic centralized workflow.") version ".tar.xz")) (sha256 (base32 - "15pfm7j4wq8ryp9n9d81h8v0arl15yq9i6cigw45walnq5r6721h")))) + "1dvwq0py8a2ywmgc5pzdlsj3608s7r9wyba292728fcs3yj7ynk6")))) ;; For subtree documentation. - ("asciidoc" ,asciidoc) + ("asciidoc" ,asciidoc-py3) ("docbook-xsl" ,docbook-xsl) ("xmlto" ,xmlto))) (inputs @@ -179,13 +193,9 @@ as well as the classic centralized workflow.") ("expat" ,expat) ("openssl" ,openssl) ("perl" ,perl) - ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL + ("python" ,python) ; for git-p4 ("zlib" ,zlib) - ;; Note: we keep this in inputs rather than native-inputs to work around - ;; a problem in 'patch-shebangs'; see . - ("bash-for-tests" ,bash) - ;; For PCRE support in git grep (USE_LIBPCRE2). ("pcre" ,pcre2) @@ -234,35 +244,55 @@ as well as the classic centralized workflow.") #:test-target "test" - ;; Tests fail randomly when parallel: . - #:parallel-tests? #f - ;; The explicit --with-tcltk forces the build system to hardcode the ;; absolute file name to 'wish'. #:configure-flags (list (string-append "--with-tcltk=" (assoc-ref %build-inputs "tk") - "/bin/wish8.6")) ; XXX + "/bin/wish8.6") ; XXX + ,@(if (%current-target-system) + git-cross-configure-flags + '())) #:modules ((srfi srfi-1) (srfi srfi-26) ,@%gnu-build-system-modules) #:phases (modify-phases %standard-phases - (add-after 'unpack 'modify-PATH - (lambda* (#:key inputs #:allow-other-keys) - (let ((path (string-split (getenv "PATH") #\:)) - (bash-full (assoc-ref inputs "bash-for-tests"))) - ;; Drop the test bash from PATH so that (which "sh") and - ;; similar does the right thing. - (setenv "PATH" (string-join - (remove (cut string-prefix? bash-full <>) path) - ":")) - #t))) + ,@(if (%current-target-system) + ;; The git build system assumes build == host + `((add-after 'unpack 'use-host-uname_S + (lambda _ + (substitute* "config.mak.uname" + (("uname_S := .*" all) + (if (equal? ,(%current-target-system) "i586-pc-gnu") + "uname_S := GNU\n" + all))) + #t))) + ;; We do not have bash-for-tests when cross-compiling. + `((add-after 'unpack 'modify-PATH + (lambda* (#:key inputs #:allow-other-keys) + (let ((path (string-split (getenv "PATH") #\:)) + (bash-full (assoc-ref inputs "bash-for-tests"))) + ;; Drop the test bash from PATH so that (which "sh") and + ;; similar does the right thing. + (setenv "PATH" (string-join + (remove (cut string-prefix? bash-full <>) path) + ":")) + #t))))) + ;; Add cross curl-config script to PATH when cross-compiling. + ,@(if (%current-target-system) + '((add-before 'configure 'add-cross-curl-config + (lambda* (#:key inputs #:allow-other-keys) + (setenv "PATH" + (string-append (assoc-ref inputs "curl") "/bin:" + (getenv "PATH"))) + #t))) + '()) (add-after 'configure 'patch-makefiles (lambda _ (substitute* "Makefile" (("/usr/bin/perl") (which "perl")) - (("/usr/bin/python") (which "python"))) + (("/usr/bin/python") (which "python3"))) #t)) (add-after 'configure 'add-PM.stamp (lambda _ @@ -277,12 +307,12 @@ as well as the classic centralized workflow.") ;; specified in the XML, unlike the above substitution. Instead it ;; uses a hard-coded URL. Work around it here, but if this is ;; common perhaps we should hardcode this path in xmlto itself. - (("\\$\\(XMLTO\\) -m \\$\\(MANPAGE_XSL\\) man") + (("\\$\\(XMLTO\\) -m \\$\\(MANPAGE_XSL\\)") (string-append "$(XMLTO) -x " (string-append (assoc-ref inputs "docbook-xsl") "/xml/xsl/docbook-xsl-" ,(package-version docbook-xsl)) - "/manpages/docbook.xsl -m $(MANPAGE_XSL) man"))) + "/manpages/docbook.xsl -m $(MANPAGE_XSL)"))) (invoke "make") (invoke "make" "install") (invoke "make" "install-doc") @@ -340,8 +370,10 @@ as well as the classic centralized workflow.") (add-after 'install 'install-credential-netrc (lambda* (#:key outputs #:allow-other-keys) (let* ((netrc (assoc-ref outputs "credential-netrc"))) - (install-file "contrib/credential/netrc/git-credential-netrc" + (install-file "contrib/credential/netrc/git-credential-netrc.perl" (string-append netrc "/bin")) + (rename-file (string-append netrc "/bin/git-credential-netrc.perl") + (string-append netrc "/bin/git-credential-netrc")) ;; Previously, Git.pm was automatically found by netrc. ;; Perl 5.26 changed how it locates modules so that @INC no ;; longer includes the current working directory (the Perl @@ -516,46 +548,143 @@ everything from small to very large projects with speed and efficiency.") ((#:make-flags flags) `(delete "USE_LIBPCRE2=yes" ,flags)) ((#:configure-flags flags) - ''()) + `(list + ,@(if (%current-target-system) + git-cross-configure-flags + '()))) ((#:disallowed-references lst '()) `(,perl ,@lst)))) (outputs '("out")) (native-inputs - `(("native-perl" ,perl) + `(("bash" ,bash-minimal) + ("bash-for-tests" ,bash) + ("native-perl" ,perl) ("gettext" ,gettext-minimal))) (inputs `(("curl" ,curl) ;for HTTP(S) access ("expat" ,expat) ;for 'git push' over HTTP(S) ("openssl" ,openssl) ("perl" ,perl) - ("zlib" ,zlib) - ("bash-for-tests" ,bash))))) + ("zlib" ,zlib))))) -(define-public libgit2 +(define-public gitless (package - (name "libgit2") - (version "0.28.4") + (name "gitless") + (version "0.8.8") + (source + (origin + ;; The PyPI package lacks a test suite. Build directly from git. + (method git-fetch) + (uri (git-reference + (url "https://github.com/gitless-vcs/gitless") + (commit (string-append "v" version)))) + (sha256 + (base32 "048kl27zjr68hgs70g3l98ci9765wxva6azzrhcdys7nsdd493n6")) + (file-name (git-file-name name version)))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'build 'loosen-requirements + (lambda _ + (substitute* "setup.py" + ;; Using Guix's python-pygit2 1.1.0 appears to work fine… + (("pygit2==") "pygit2>=")) + #t)) + (add-before 'check 'prepare-for-tests + (lambda _ + ;; Find the 'gl' command. + (rename-file "gl.py" "gl") + (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH"))) + + ;; The tests try to run git as if it were already set up. + (setenv "HOME" (getcwd)) + (invoke "git" "config" "--global" "user.email" "git@example.com") + (invoke "git" "config" "--global" "user.name" "Guix"))) + (replace 'wrap + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (git (assoc-ref inputs "git"))) + (wrap-program (string-append out "/bin/gl") + `("PATH" ":" prefix (,(string-append git "/bin"))) + `("PYTHONPATH" ":" = + (,(string-append out "/lib/python" + ,(version-major+minor + (package-version python)) + "/site-packages:") + ,(getenv "PYTHONPATH")))) + #t)))))) + (native-inputs + `(("git-for-tests" ,git-minimal))) + (inputs + `(("git" ,git-minimal) + ("python-clint" ,python-clint) + ("python-pygit2" ,python-pygit2) + ("python-sh" ,python-sh))) + (home-page "https://gitless.com") + (synopsis "Simple version control system built on top of Git") + (description + "Gitless is a Git-compatible version control system that aims to be easy to +learn and use. It simplifies the common workflow by committing changes to +tracked files by default and saving any uncommitted changes as part of a branch. + +The friendly @command{gl} command-line interface gives feedback and helps you +figure out what to do next. + +Gitless is implemented on top of Git and its commits and repositories are +indistinguishable from Git's. You (or other contributors) can always fall back +on @command{git}, and use any regular Git hosting service.") + (license license:expat))) + +(define-public git-cal + (package + (name "git-cal") + (version "0.9.1") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/libgit2/libgit2.git") + (url "https://github.com/k4rthik/git-cal") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 - "171b25aym4q88bidc4c76y4l6jmdwifm3q9zjqsll0wjhlkycfy1")) - (patches (search-patches "libgit2-avoid-python.patch" - "libgit2-mtime-0.patch")) + "08s9sif3qlk5n2dqpzq5yjczggnqlnxldljspjdqgpfydb2dqg3z")))) + (build-system perl-build-system) + (home-page "https://github.com/k4rthik/git-cal/") + (synopsis "GitHub like contributions calendar for terminal") + (description "@code{git-cal} is a script to view commits calendar similar +to GitHub contributions calendar.") + (license license:expat))) - ;; Remove bundled software. +(define-public libgit2 + (package + (name "libgit2") + (version "1.0.1") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/libgit2/libgit2/" + "releases/download/v" version + "/libgit2-" version ".tar.gz")) + (sha256 + (base32 + "0nlg35pxhh548nn7aa3y1m81mf81nkbzz86i2psps4f474n497v8")) + (patches (search-patches "libgit2-mtime-0.patch")) (snippet '(begin - (delete-file-recursively "deps") - #t)) + (delete-file-recursively "deps") #t)) (modules '((guix build utils))))) (build-system cmake-build-system) (outputs '("out" "debug")) (arguments - `(#:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection + `(#:configure-flags + (list "-DUSE_NTLMCLIENT=OFF" ;TODO: package this + "-DREGEX_BACKEND=pcre2" + "-DUSE_HTTP_PARSER=system" + ,@(if (%current-target-system) + `((string-append + "-DPKG_CONFIG_EXECUTABLE=" + (assoc-ref %build-inputs "pkg-config") + "/bin/" ,(%current-target-system) "-pkg-config")) + '())) #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-hardcoded-paths @@ -566,24 +695,25 @@ everything from small to very large projects with speed and efficiency.") (("/bin/cp") (which "cp")) (("/bin/rm") (which "rm"))) #t)) - (add-after 'unpack 'make-git-checkout-writable - (lambda _ - (for-each make-file-writable (find-files ".")) - #t)) - ;; Run checks more verbosely. + ;; Run checks more verbosely, unless we are cross-compiling. (replace 'check - (lambda _ (invoke "./libgit2_clar" "-v" "-Q")))))) + (lambda* (#:key (tests? #t) #:allow-other-keys) + (if tests? + (invoke "./libgit2_clar" "-v" "-Q") + ;; Tests may be disabled if cross-compiling. + (format #t "Test suite not run.~%"))))))) (inputs `(("libssh2" ,libssh2) ("http-parser" ,http-parser))) (native-inputs - `(("guile" ,guile-2.2) - ("pkg-config" ,pkg-config))) + `(("pkg-config" ,pkg-config) + ("python" ,python))) (propagated-inputs - ;; These two libraries are in 'Requires.private' in libgit2.pc. + ;; These libraries are in 'Requires.private' in libgit2.pc. `(("openssl" ,openssl) + ("pcre2" ,pcre2) ("zlib" ,zlib))) - (home-page "https://libgit2.github.com/") + (home-page "https://libgit2.org/") (synopsis "Library providing Git core methods") (description "Libgit2 is a portable, pure C implementation of the Git core methods @@ -592,6 +722,24 @@ write native speed custom Git applications in any language with bindings.") ;; GPLv2 with linking exception (license license:gpl2))) +(define-public libgit2-0.28 + (package + (inherit libgit2) + (version "0.28.5") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/libgit2/libgit2/releases/" + "download/v" version + "/libgit2-" version ".tar.gz")) + (sha256 + (base32 + "0hjgpqjjmkciw1i8jqkx9q2vhdc4fc99qajhrj2bq8ziwsp6hyrb")) + (patches (search-patches "libgit2-mtime-0.patch")) + (modules '((guix build utils))) + (snippet '(begin + (delete-file-recursively "deps") #t)))))) + (define-public git-crypt (package (name "git-crypt") @@ -600,7 +748,7 @@ write native speed custom Git applications in any language with bindings.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/AGWA/git-crypt.git") + (url "https://github.com/AGWA/git-crypt") (commit version))) (file-name (git-file-name name version)) (sha256 @@ -650,7 +798,7 @@ to lock down your entire repository.") (define-public git-remote-gcrypt (package (name "git-remote-gcrypt") - (version "1.0.3") + (version "1.3") (source (origin (method git-fetch) (uri (git-reference @@ -659,7 +807,7 @@ to lock down your entire repository.") (file-name (string-append name "-" version "-checkout")) (sha256 (base32 - "1vay3204729c7wajgn3nxf0s0hzwpdrw14pl6kd8w2ss25gvw2k1")))) + "0n8fzvr6y0pxrbvkywlky2bd8jvi0ayp4n9hwi84l1ldmv4a40dh")))) (build-system trivial-build-system) (arguments `(#:modules ((guix build utils)) @@ -694,7 +842,7 @@ collaboration using typical untrusted file hosts or services.") (package (name "cgit") ;; Update the ‘git-source’ input as well. - (version "1.2.2") + (version "1.2.3") (source (origin (method url-fetch) (uri (string-append @@ -702,7 +850,7 @@ collaboration using typical untrusted file hosts or services.") version ".tar.xz")) (sha256 (base32 - "0dmjsisigjz5k4gw7gm55qhm3wazzbm4cg7a5dwf0gqg9nacx5rz")))) + "193d990ym10qlslk0p8mjwp2j6rhqa7fq0y1iff65lvbyv914pss")))) (build-system gnu-build-system) (arguments '(#:tests? #f ; XXX: fail to build the in-source git. @@ -782,9 +930,9 @@ collaboration using typical untrusted file hosts or services.") (method url-fetch) ;; cgit is tightly bound to git. Use GIT_VER from the Makefile, ;; which may not match the current (package-version git). - (uri "mirror://kernel.org/software/scm/git/git-2.25.0.tar.xz") + (uri "mirror://kernel.org/software/scm/git/git-2.25.4.tar.xz") (sha256 - (base32 "1l58v42aazj0x9276gk8r9mwyl9pgp9w99aakz4xfhzv7wd2jq60")))) + (base32 "11am6s46wmn1yll5614smjhzlghbqq6gysgcs64igjr9y5wzpdxq")))) ("openssl" ,openssl) ("groff" ,groff) ("python" ,python) @@ -848,7 +996,7 @@ repository") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/davisp/ghp-import.git") + (url "https://github.com/davisp/ghp-import") (commit version))) (file-name (git-file-name name version)) (sha256 @@ -880,13 +1028,13 @@ default) of the repository.") (define-public python-gitdb (package (name "python-gitdb") - (version "2.0.4") + (version "4.0.2") (source (origin (method url-fetch) - (uri (pypi-uri "gitdb2" version)) + (uri (pypi-uri "gitdb" version)) (sha256 (base32 - "0i608q9c47rdsmyac1cn6s0hzwwj7cb957y8fc9wacc5lnw8ak5v")))) + "0l113fphn6msjl3cl3kyf332b6lal7daxdd0nfma0x9ipfb013jr")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -918,7 +1066,7 @@ default) of the repository.") (setenv "TRAVIS" "1") (invoke "nosetests" "-v")))))) (propagated-inputs - `(("python-smmap2" ,python-smmap2))) + `(("python-smmap" ,python-smmap))) (native-inputs `(("git" ,git) ("python-nose" ,python-nose))) @@ -931,19 +1079,16 @@ with performance and scalability in mind. It operates exclusively on streams, allowing to handle large objects with a small memory footprint.") (license license:bsd-3))) -(define-public python2-gitdb - (package-with-python2 python-gitdb)) - (define-public python-gitpython (package (name "python-gitpython") - (version "2.1.11") + (version "3.1.0") (source (origin (method url-fetch) (uri (pypi-uri "GitPython" version)) (sha256 (base32 - "1a357c28dnhgvq3saia7v29r71ynp48l2qp5xsmnc4vgzmdxqdw2")))) + "1jzllsy9lwc9yibccgv7h9naxisazx2n3zmpy21c8n5xhysw69p4")))) (build-system python-build-system) (arguments `(#:tests? #f ;XXX: Tests can only be run within the GitPython repository. @@ -975,9 +1120,6 @@ either a pure Python implementation, or the faster, but more resource intensive @command{git} command implementation.") (license license:bsd-3))) -(define-public python2-gitpython - (package-with-python2 python-gitpython)) - (define-public shflags (package (name "shflags") @@ -985,7 +1127,7 @@ either a pure Python implementation, or the faster, but more resource intensive (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/kward/shflags.git") + (url "https://github.com/kward/shflags") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 @@ -1050,7 +1192,7 @@ will work.") "gitflow-shFlags"))))) (delete 'configure) (delete 'build)))) - (home-page "http://nvie.com/posts/a-successful-git-branching-model/") + (home-page "https://nvie.com/posts/a-successful-git-branching-model/") (synopsis "Git extensions for Vincent Driessen's branching model") (description "Vincent Driessen's branching model is a git branching and release @@ -1068,7 +1210,7 @@ lot easier.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/ctmarinas/stgit.git") + (url "https://github.com/ctmarinas/stgit") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 @@ -1120,7 +1262,7 @@ manipulate them in various ways.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/RichiH/vcsh.git") + (url "https://github.com/RichiH/vcsh") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 @@ -1179,7 +1321,7 @@ though this can be overridden.") (install-file (string-append source "/" script) bindir) #t)))) - (home-page "http://dustin.sallings.org/2010/03/28/git-test-sequence.html") + (home-page "https://dustin.sallings.org/2010/03/28/git-test-sequence.html") (synopsis "Run a command over a sequence of commits") (description "git-test-sequence is similar to an automated git bisect except it’s @@ -1190,19 +1332,19 @@ also walk each side of a merge and test those changes individually.") (define-public gitolite (package (name "gitolite") - (version "3.6.7") + (version "3.6.12") (source (origin (method git-fetch) (uri (git-reference - (url "https://github.com/sitaramc/gitolite.git") + (url "https://github.com/sitaramc/gitolite") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0rmyzr66lxh2ildf3h1nh3hh2ndwk21rjdin50r5vhwbdd7jg8vb")))) + (base32 "05xw1pmagvkrbzga5pgl3xk9qyc6b5x73f842454f3w9ijspa8zy")))) (build-system gnu-build-system) (arguments - '(#:tests? #f ; no tests + '(#:tests? #f ; no tests #:phases (modify-phases %standard-phases (delete 'configure) (delete 'build) @@ -1294,49 +1436,180 @@ also walk each side of a merge and test those changes individually.") (propagated-inputs `(("git" ,git) ("openssh" ,openssh))) - (home-page "http://gitolite.com") + (home-page "https://gitolite.com") (synopsis "Git access control layer") (description "Gitolite is an access control layer on top of Git, providing fine access control to Git repositories.") (license license:gpl2))) +(define-public pre-commit + (package + (name "pre-commit") + (version "2.7.1") + (source + (origin + ;; No tests in the PyPI tarball. + (method git-fetch) + (uri (git-reference + (url "https://github.com/pre-commit/pre-commit") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0n7qby5a4yz3s02nqcp5js6jg9wrd0x7msblxwb1883ds4b2b71a")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'set-up-git + (lambda _ + ;; Change from /homeless-shelter to /tmp for write permission. + (setenv "HOME" "/tmp") + ;; Environment variables used in the tests. + (setenv "GIT_AUTHOR_NAME" "Your Name") + (setenv "GIT_COMMITTER_NAME" "Your Name") + (setenv "GIT_AUTHOR_EMAIL" "you@example.com") + (setenv "GIT_COMMITTER_EMAIL" "you@example.com") + (invoke "git" "config" "--global" "user.name" "Your Name") + (invoke "git" "config" "--global" "user.email" "you@example.com") + #t)) + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "tests" "-k" + (string-append + ;; Disable conda tests. + "not test_conda_hook" + " and not test_conda_with_additional_dependencies_hook" + " and not test_local_conda_additional_dependencies" + ;; Disable cpan tests. + " and not test_local_perl_additional_dependencies" + " and not test_perl_hook" + ;; Disable Ruby tests. + " and not test_additional_ruby_dependencies_installed" + " and not test_install_rbenv" + " and not test_install_rbenv_with_version" + " and not test_run_a_ruby_hook" + " and not test_run_ruby_hook_with_disable_shared_gems" + " and not test_run_versioned_ruby_hook" + ;; Disable Cargo tests. + " and not test_additional_rust_cli_dependencies_installed" + " and not test_additional_rust_lib_dependencies_installed" + " and not test_local_rust_additional_dependencies" + " and not test_rust_hook" + ;; Disable python2 test. + " and not test_switch_language_versions_doesnt_clobber" + ;; These tests try to open a network socket. + " and not test_additional_golang_dependencies_installed" + " and not test_additional_node_dependencies_installed" + " and not test_golang_hook" + " and not test_golang_hook_still_works_when_gobin_is_set" + " and not test_local_golang_additional_dependencies" + " and not test_main" + " and not test_node_hook_with_npm_userconfig_set" + " and not test_run_a_node_hook" + " and not test_run_versioned_node_hook" + ;; Tests failing with a permission error. + ;; They try to write to the filesystem. + " and not test_autoupdate_hook_disappearing_repo" + " and not test_hook_disppearing_repo_raises" + " and not test_img_conflict" + " and not test_img_something_unstaged" + " and not test_installed_from_venv" + " and not test_too_new_version" + " and not test_try_repo_uncommitted_changes" + " and not test_versions_ok" + ;; This test tries to activate a virtualenv. + " and not test_healthy_venv_creator" + ;; Fatal error: Not a Git repository. + " and not test_all_cmds" + " and not test_try_repo" + ;; No module named 'pip._internal.cli.main'. + " and not test_additional_dependencies_roll_forward" + ;; Assertion errors. + " and not test_install_existing_hooks_no_overwrite" + " and not test_uninstall_restores_legacy_hooks")))) + (add-before 'reset-gzip-timestamps 'make-files-writable + (lambda* (#:key outputs #:allow-other-keys) + ;; Make sure .gz files are writable so that the + ;; 'reset-gzip-timestamps' phase can do its work. + (let ((out (assoc-ref outputs "out"))) + (for-each make-file-writable + (find-files out "\\.gz$")) + #t)))))) + (native-inputs + `(("git" ,git-minimal) + ("python-pytest" ,python-pytest))) + (inputs + `(("python-cfgv" ,python-cfgv) + ("python-identify" ,python-identify) + ("python-nodeenv" ,python-nodeenv) + ("python-pyyaml" ,python-pyyaml) + ("python-toml" ,python-toml) + ("python-virtualenv" ,python-virtualenv))) + (home-page "https://pre-commit.com/") + (synopsis "Framework for managing and maintaining multi-language pre-commit hooks") + (description + "Pre-commit is a multi-language package manager for pre-commit hooks. You +specify a list of hooks you want and pre-commit manages the installation and +execution of any hook written in any language before every commit.") + (license license:expat))) + (define-public mercurial (package (name "mercurial") - (version "5.2.1") + (version "5.5.1") (source (origin (method url-fetch) (uri (string-append "https://www.mercurial-scm.org/" "release/mercurial-" version ".tar.gz")) (sha256 (base32 - "1pxkd37b0a1mi2zakk1hi122lgz1ffy2fxdnbs8acwlqpw55bc8q")))) + "0x08yjs26j88kh1bvl2g3r24lnfc023ry3i1cxfq6haray6sv5ag")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-tests + (lambda _ + (substitute* '("tests/test-extdiff.t" + "tests/test-logtoprocess.t" + "tests/test-patchbomb.t" + "tests/test-run-tests.t" + "tests/test-transplant.t") + (("/bin/sh") + (which "sh"))) + #t)) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (with-directory-excursion "tests" ;; The following tests are known to fail. - (for-each (lambda (file) - (delete-file file)) - '("test-extdiff.t" + (for-each delete-file + '(;; XXX: This test calls 'run-tests.py --with-hg= + ;; `which hg`' and fails because there is no hg on + ;; PATH from before (that's why we are building it!)? "test-hghave.t" + + ;; FIXME: Why does this fail in the build container, but + ;; not in 'guix environment -C' (even without /bin/sh)? + "test-nointerrupt.t" + + ;; FIXME: This gets killed but does not receive an interrupt. + "test-commandserver.t" + + ;; Only works when run in a hg-repo, not in an + ;; extracted tarball + "test-doctest.py" + + ;; TODO: the fqaddr() call fails in the build + ;; container, causing these server tests to fail. "test-hgwebdir.t" "test-http-branchmap.t" - "test-logtoprocess.t" - "test-merge-combination.t" - "test-nointerrupt.t" - "test-patchbomb.t" "test-pull-bundle.t" "test-push-http.t" - "test-run-tests.t" "test-serve.t" "test-subrepo-deep-nested-change.t" - "test-subrepo-recursion.t" - "test-transplant.t")) + "test-subrepo-recursion.t")) (when tests? (invoke "./run-tests.py" ;; ‘make check’ does not respect ‘-j’. @@ -1353,7 +1626,8 @@ control to Git repositories.") ;; The following inputs are only needed to run the tests. (native-inputs `(("python-nose" ,python-nose) - ("unzip" ,unzip))) + ("unzip" ,unzip) + ("which" ,which))) (home-page "https://www.mercurial-scm.org/") (synopsis "Decentralized version control system") (description @@ -1362,6 +1636,32 @@ It efficiently handles projects of any size and offers an easy and intuitive interface.") (license license:gpl2+))) +(define-public python-hg-evolve + (package + (name "python-hg-evolve") + (version "10.0.1") + (source + (origin + (method hg-fetch) + (uri (hg-reference + (url "https://www.mercurial-scm.org/repo/evolve") + (changeset version))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "1lz407373lfam9n02gq0l0rc2sjvn0m96kbzy93ipia3ika8fa68")))) + (build-system python-build-system) + (arguments + ;; Tests need mercurial source code. + '(#:tests? #f)) + (propagated-inputs + `(("mercurial" ,mercurial))) + (home-page "https://www.mercurial-scm.org/doc/evolution/") + (synopsis "Flexible evolution of Mercurial history") + (description "Evolve is a Mercurial extension for faster and safer mutable +history. It implements the changeset evolution concept for Mercurial.") + (license license:gpl2))) + (define-public neon (package (name "neon") @@ -1416,18 +1716,14 @@ following features: (define-public subversion (package (name "subversion") - (version "1.10.6") + (version "1.14.0") (source (origin (method url-fetch) - (uri - (list - (string-append "https://archive.apache.org/dist/subversion/" - "subversion-" version ".tar.bz2") - (string-append "https://www-eu.apache.org/dist/subversion/" - "subversion-" version ".tar.bz2"))) + (uri (string-append "mirror://apache/subversion/" + "subversion-" version ".tar.bz2")) (sha256 (base32 - "19zc215mhpnm92mlyl5jbv57r5zqp6cavr3s2g9yglp6j4kfgj0q")))) + "00i1f88snlpcnsycpn6r315h6792l5nkr2p5k6kq6yprz4cf5a3b")))) (build-system gnu-build-system) (arguments '(#:parallel-tests? #f ; TODO Seems to cause test failures on @@ -1565,14 +1861,14 @@ RCS, PRCS, and Aegis packages.") (define-public cvs-fast-export (package (name "cvs-fast-export") - (version "1.51") + (version "1.55") (source (origin (method url-fetch) (uri (string-append "http://www.catb.org/~esr/cvs-fast-export/" "cvs-fast-export-" version ".tar.gz")) (sha256 (base32 - "0nn5cf8syb5nbjvkn8w561pk25clv187h4hs9pnc700g9w56chzf")))) + "06y2myhhv2ap08bq7d7shq0b7lq6wgznwrpz6622xq66cxkf2n5g")))) (build-system gnu-build-system) (arguments '(#:phases @@ -1732,7 +2028,10 @@ accessed and migrated on modern systems.") ("ed" ,ed))) (arguments `(#:configure-flags (list "--with-no-aegis-configured" - "--sharedstatedir=/var/com/aegis") + "--sharedstatedir=/var/com/aegis" + ;; Uses the old 'throw()' specifier with 'new' + ;; which changed in C++11. + "CXXFLAGS=-std=c++03") #:parallel-build? #f ; There are some nasty racy rules in the Makefile. #:phases (modify-phases %standard-phases @@ -1775,7 +2074,7 @@ accessed and migrated on modern systems.") ;; The author decided to call the check rule "sure". (invoke "make" "sure"))))))) - (home-page "http://aegis.sourceforge.net") + (home-page "https://sourceforge.net/projects/aegis/") (synopsis "Project change supervisor") (description "Aegis is a project change supervisor, and performs some of the Software Configuration Management needed in a CASE environment. Aegis @@ -1866,7 +2165,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).") (define-public tig (package (name "tig") - (version "2.5.0") + (version "2.5.1") (source (origin (method url-fetch) (uri (string-append @@ -1874,7 +2173,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).") version "/tig-" version ".tar.gz")) (sha256 (base32 - "1x5famvvs93ih7sr11x7m33dksb1k7zs1s3c4zkyf0cjmxkpqlzz")))) + "0r4y9hyvpkplaxrzslws3asz652d83qh3bjwvmp8assga8s5s3ah")))) (build-system gnu-build-system) (native-inputs `(("asciidoc" ,asciidoc) @@ -1888,8 +2187,8 @@ from Subversion to any supported Distributed Version Control System (DVCS).") (add-after 'install 'install-doc (lambda _ (invoke "make" "install-doc")))) - #:tests? #f)) ; tests require access to /dev/tty - ;; #:test-target "test")) + #:test-target "test" + #:tests? #f)) ; tests require access to /dev/tty (home-page "https://jonas.github.io/tig/") (synopsis "Ncurses-based text user interface for Git") (description @@ -1906,7 +2205,7 @@ output of the @code{git} command.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/0-wiz-0/findnewest.git") + (url "https://github.com/0-wiz-0/findnewest") (commit (string-append "findnewest-" version)))) (file-name (git-file-name name version)) (sha256 @@ -1970,36 +2269,6 @@ supports a large number of version control systems: Git, Subversion, Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.") (license license:gpl2+))) -(define-public git-annex-remote-hubic - (package - (name "git-annex-remote-hubic") - (version "0.3.1") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/Schnouki/git-annex-remote-hubic.git") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "16y9sk67hfi17h9n2kkffyabfccksh5rab40hhk69v6cxmbpn2sx")))) - (build-system python-build-system) - (arguments `(#:python ,python-2)) - (native-inputs - `(;; for the tests - ("python2-six" ,python2-six))) - (propagated-inputs - `(("python2-dateutil" ,python2-dateutil) - ("python2-futures" ,python2-futures) - ("python2-rauth" ,python2-rauth) - ("python2-swiftclient" ,python2-swiftclient))) - (home-page "https://github.com/Schnouki/git-annex-remote-hubic/") - (synopsis "Use hubic as a git-annex remote") - (description - "This package allows you to use your hubic account as a \"special -repository\" with git-annex.") - (license license:gpl3+))) - (define-public git-annex-remote-rclone (package (name "git-annex-remote-rclone") @@ -2008,7 +2277,7 @@ repository\" with git-annex.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/DanielDent/git-annex-remote-rclone.git") + (url "https://github.com/DanielDent/git-annex-remote-rclone") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 @@ -2045,21 +2314,15 @@ by rclone usable with git-annex.") (define-public fossil (package (name "fossil") - (version "2.8") + (version "2.11") (source (origin (method url-fetch) - ;; Older downloads are moved to another URL. - (uri (list - (string-append - "https://www.fossil-scm.org/index.html/uv/download/" - "fossil-src-" version ".tar.gz") - (string-append + (uri (string-append "https://www.fossil-scm.org/index.html/uv/" - "fossil-src-" version ".tar.gz"))) + "fossil-src-" version ".tar.gz")) (sha256 - (base32 - "0pbinf8d2kj1j7niblhzjd2l2khg6r2pn2xvig6gavz27p3vwcka")) + (base32 "0c9nzx42wxfmym9vf1pnbdb1c7gp7a7zqky60izxsph7w2xh8nix")) (modules '((guix build utils))) (snippet '(begin @@ -2283,7 +2546,7 @@ how information about the merge is displayed.") (origin (method git-fetch) (uri (git-reference - (url "https://github.com/mhagger/git-imerge.git") + (url "https://github.com/mhagger/git-imerge") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 @@ -2324,7 +2587,7 @@ interrupted, published, and collaborated on while in progress.") (define-public git-lfs (package (name "git-lfs") - (version "2.7.2") + (version "2.11.0") (source (origin (method git-fetch) (uri (git-reference @@ -2333,10 +2596,35 @@ interrupted, published, and collaborated on while in progress.") (file-name (git-file-name name version)) (sha256 (base32 - "1nf40rbdz901vsahg5cm09pznpina6wimmxl0lmh8pn0mi51yzvc")))) + "05qd96bn2cl7gn5qarbcv6scdpj28qiwdfzalamqk5jjiidpmng5")))) (build-system go-build-system) (arguments - '(#:import-path "github.com/git-lfs/git-lfs")) + `(#:import-path "github.com/git-lfs/git-lfs" + #:install-source? #f + #:phases + (modify-phases %standard-phases + (add-before 'build 'man-gen + ;; Without this, the binary generated in 'build + ;; phase won't have any embedded usage-text. + (lambda _ + (with-directory-excursion "src/github.com/git-lfs/git-lfs" + (invoke "make" "mangen")))) + (add-after 'build 'build-man-pages + (lambda _ + (with-directory-excursion "src/github.com/git-lfs/git-lfs" + (invoke "make" "man")) + #t)) + (add-after 'install 'install-man-pages + (lambda _ + (with-directory-excursion "src/github.com/git-lfs/git-lfs/man" + (let ((out (assoc-ref %outputs "out"))) + (for-each + (lambda (manpage) + (install-file manpage (string-append out "/share/man/man1"))) + (find-files "." "^git-lfs.*\\.1$")))) + #t))))) + ;; make `ronn` available during build for man page generation + (native-inputs `(("ronn-ng" ,ronn-ng))) (home-page "https://git-lfs.github.com/") (synopsis "Git extension for versioning large files") (description @@ -2344,3 +2632,114 @@ interrupted, published, and collaborated on while in progress.") videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server.") (license license:expat))) + +(define-public tla + (package + (name "gnu-arch") + (version "1.3.5") + (source (origin + (method url-fetch) + (uri (string-append "https://ftp.gnu.org/old-gnu/gnu-arch/" + "tla-" version ".tar.gz")) + (sha256 + (base32 + "01mfzj1i6p4s8191cgd5850hds1zls88hkf9rb6qx1vqjv585aj0")) + (modules '((guix build utils))) + (snippet + '(begin + ;; In tar 1.32, '--preserve' is ambiguous and leads to an + ;; error, so address that. + (substitute* "src/tla/libarch/archive.c" + (("\"--preserve\"") + "\"--preserve-permissions\"")) + #t)))) + (build-system gnu-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (replace 'configure + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (chdir "src") + + (mkdir "=build") + (chdir "=build") + + ;; For libneon's 'configure' script. + ;; XXX: There's a bundled copy of neon. + (setenv "CONFIG_SHELL" (which "sh")) + + (invoke "../configure" "--prefix" out + "--config-shell" (which "sh") + "--with-posix-shell" (which "sh") + "--with-cc" "gcc"))))) + + + ;; There are build failures when building in parallel. + #:parallel-build? #f + #:parallel-tests? #f + + #:test-target "test")) + (native-inputs + `(("which" ,which))) + (synopsis "Historical distributed version-control system") + (description + "GNU Arch, aka. @code{tla}, was one of the first free distributed +version-control systems (DVCS). It saw its last release in 2006. This +package is provided for users who need to recover @code{tla} repositories and +for historians.") + (home-page "https://www.gnu.org/software/gnu-arch/") + (license license:gpl2))) ;version 2 only + +(define-public go-github-go-git + (package + (name "go-github-go-git") + (version "5.1.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/go-git/go-git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1vkcmhh2qq8c38sjbnzf0wvg2rzr19wssaq177bsvrjwj1xz1qbs")))) + (build-system go-build-system) + (arguments + `(#:tests? #f ;requires network connection + #:import-path "github.com/go-git/go-git/v5" + #:phases + (modify-phases %standard-phases + (add-before 'build 'setup + (lambda* (#:key inputs #:allow-other-keys) + (let* ((git (assoc-ref inputs "git")) + (git-bin (string-append (assoc-ref inputs "git") "/bin")) + (git-exe (string-append git-bin "/git"))) + (setenv "GIT_DIST_PATH=" git) + (setenv "GIT_EXEC_PATH=" git-bin) + (setenv "HOME" (getcwd)) + (invoke git-exe "config" "--global" "user.email" "gha@example.com") + (invoke git-exe "config" "--global" "user.name" "GitHub Actions") + #t) + #t))))) + (native-inputs + `(("go-github-com-emirpasic-gods" ,go-github-com-emirpasic-gods) + ("go-github-com-go-git-gcfg" ,go-github-com-go-git-gcfg) + ("go-github-com-go-git-go-billy" ,go-github-com-go-git-go-billy) + ("go-github-com-imdario-mergo" ,go-github-com-imdario-mergo) + ("go-github-com-jbenet-go-context" ,go-github-com-jbenet-go-context) + ("go-github-com-kevinburke-ssh-config" ,go-github-com-kevinburke-ssh-config) + ("go-github-com-mitchellh-go-homedir" ,go-github-com-mitchellh-go-homedir) + ("go-github-com-sergi-go-diff" ,go-github-com-sergi-go-diff) + ("go-github-com-xanzy-ssh-agentf" ,go-github-com-xanzy-ssh-agent) + ("go-golang-org-x-crypto" ,go-golang-org-x-crypto) + ("go-golang-org-x-net" ,go-golang-org-x-net) + ("go-gopkg-in-warnings" ,go-gopkg-in-warnings) + ("go-github-com-go-git-go-git-fixtures" ,go-github-com-go-git-go-git-fixtures) + ("go-gopkg-in-check-v1" ,go-gopkg-in-check-v1) + ("go-github-com-alcortesm-tgz" ,go-github-com-alcortesm-tgz) + ("go-golang-org-x-text" ,go-golang-org-x-text) + ("git" ,git))) + (home-page "https://github.com/go-git/") + (synopsis "Git implementation library") + (description "This package provides a Git implementation library.") + (license license:asl2.0)))