X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/50e6c1bf2ef2f006baa8cac80dfbb12ca2ba6d64..560e6058198c15ebdd338eac09c21f27d6758758:/gnu/packages/version-control.scm diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index a173bc83b8..8292a5df15 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -6,29 +6,36 @@ ;;; 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, 2018 Kyle Meyer +;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner +;;; Copyright © 2015, 2018, 2020 Kyle Meyer ;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus ;;; Copyright © 2016, 2017 Leo Famulari -;;; Copyright © 2016, 2017, 2018 ng0 -;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2016, 2017, 2018 Nikita +;;; Copyright © 2017–2021 Tobias Geerinckx-Rice ;;; Copyright © 2017 Vasile Dumitrascu ;;; Copyright © 2017 Clément Lassieur -;;; Copyright © 2017 André +;;; Copyright © 2017, 2020 EuAndreh ;;; 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 +;;; Copyright © 2020 Michael Rohleder +;;; Copyright © 2021 Greg Hogan +;;; Copyright © 2021 Maxim Cournoyer +;;; Copyright © 2021 Chris Marusich +;;; Copyright © 2021 Léo Le Bouter ;;; ;;; This file is part of GNU Guix. ;;; @@ -51,9 +58,12 @@ #: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 copy) #: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,8 +80,12 @@ #:use-module (gnu packages ed) #:use-module (gnu packages file) #:use-module (gnu packages flex) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages gettext) #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages golang) #:use-module (gnu packages groff) #:use-module (gnu packages guile) #:use-module (gnu packages image) @@ -88,6 +102,8 @@ #:use-module (gnu packages perl-check) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) + #:use-module (gnu packages python-check) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages readline) @@ -154,14 +170,14 @@ as well as the classic centralized workflow.") (define-public git (package (name "git") - (version "2.26.2") + (version "2.30.1") (source (origin (method url-fetch) (uri (string-append "mirror://kernel.org/software/scm/git/git-" version ".tar.xz")) (sha256 (base32 - "0j685w6pzkn926z5nf5r8fij4ziipvw4c9yb0wc577nzf4j16rbd")))) + "0rwlbps9x8kgk2hsm0bvsrkpsk9bnbnz8alknbd7i688jnhai27r")))) (build-system gnu-build-system) (native-inputs `(("native-perl" ,perl) @@ -178,11 +194,12 @@ as well as the classic centralized workflow.") version ".tar.xz")) (sha256 (base32 - "0rb4f4jc31zrcg4gyjg4fi07dw7nggkjg2nqfiq5p1aayw2f2ga3")))) + "015rqnz3ly1h6z6k9hfikgh401s3mzkmys8srai1kfv4v75pxz1h")))) ;; For subtree documentation. ("asciidoc" ,asciidoc-py3) ("docbook-xsl" ,docbook-xsl) - ("xmlto" ,xmlto))) + ("xmlto" ,xmlto) + ("pkg-config" ,pkg-config))) (inputs `(("curl" ,curl) ("expat" ,expat) @@ -208,11 +225,16 @@ as well as the classic centralized workflow.") ;; For 'git gui', 'gitk', and 'git citool'. ("tcl" ,tcl) - ("tk" ,tk))) + ("tk" ,tk) + + ;; For 'git-credential-libsecret' + ("glib" ,glib) + ("libsecret" ,libsecret))) (outputs '("out" ; the core "send-email" ; for git-send-email "svn" ; git-svn "credential-netrc" ; git-credential-netrc + "credential-libsecret" ; git-credential-libsecret "subtree" ; git-subtree "gui")) ; gitk, git gui (arguments @@ -250,6 +272,7 @@ as well as the classic centralized workflow.") #:modules ((srfi srfi-1) (srfi srfi-26) + ((guix build gnu-build-system) #:prefix gnu:) ,@%gnu-build-system-modules) #:phases (modify-phases %standard-phases @@ -302,12 +325,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") @@ -377,6 +400,14 @@ as well as the classic centralized workflow.") `("PERL5LIB" ":" prefix (,(string-append (assoc-ref outputs "out") "/share/perl5")))) #t))) + (add-after 'install 'install-credential-libsecret + (lambda* (#:key outputs #:allow-other-keys) + (let* ((libsecret (assoc-ref outputs "credential-libsecret"))) + (with-directory-excursion "contrib/credential/libsecret" + ((assoc-ref gnu:%standard-phases 'build)) + (install-file "git-credential-libsecret" + (string-append libsecret "/bin")) + #t)))) (add-after 'install 'install-subtree (lambda* (#:key outputs #:allow-other-keys) (let ((subtree (assoc-ref outputs "subtree"))) @@ -385,6 +416,16 @@ as well as the classic centralized workflow.") (install-file "contrib/subtree/git-subtree.1" (string-append subtree "/share/man/man1")) #t))) + (add-after 'install 'restore-sample-hooks-shebang + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (dir (string-append out "/share/git-core/templates/hooks"))) + (for-each (lambda (file) + (format #t "restoring shebang on `~a'~%" file) + (substitute* file + (("^#!.*/bin/sh") "#!/bin/sh"))) + (find-files dir ".*")) + #t))) (add-after 'install 'split (lambda* (#:key inputs outputs #:allow-other-keys) ;; Split the binaries to the various outputs. @@ -513,11 +554,7 @@ everything from small to very large projects with speed and efficiency.") (delete 'install-man-pages) (delete 'install-subtree) (delete 'install-credential-netrc) - (add-before 'check 'delete-svn-test - (lambda _ - ;; This test cannot run since we are not building 'git-svn'. - (delete-file "t/t9020-remote-svn.sh") - #t)) + (delete 'install-credential-libsecret) (add-after 'install 'remove-unusable-perl-commands (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -631,10 +668,30 @@ 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/k4rthik/git-cal") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "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))) + (define-public libgit2 (package (name "libgit2") - (version "1.0.0") + (version "1.1.0") (source (origin (method url-fetch) (uri (string-append "https://github.com/libgit2/libgit2/" @@ -642,7 +699,7 @@ on @command{git}, and use any regular Git hosting service.") "/libgit2-" version ".tar.gz")) (sha256 (base32 - "1d09ni0v3vammk8zqmmwks92fh3wwnsxpyrh4s5wwdb3gxma27va")) + "1fjdglkh04qv3b4alg621pxa689i0wlf8m7nf2755zawjr2zhwxd")) (patches (search-patches "libgit2-mtime-0.patch")) (snippet '(begin (delete-file-recursively "deps") #t)) @@ -723,7 +780,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 @@ -773,7 +830,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 @@ -782,7 +839,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)) @@ -971,7 +1028,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 @@ -1102,7 +1159,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 @@ -1180,16 +1237,16 @@ lot easier.") (define-public stgit (package (name "stgit") - (version "0.21") + (version "1.0") (source (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 - (base32 "00pmz93znl418lsjwy4mr0chp8i2w27h1xjysa05f62smsv91yyc")))) + (base32 "0dixgvjlsk3xisj8blzdhh0nphm5zqkjbj081wgsba52z4zq1y0q")))) (build-system python-build-system) (native-inputs `(("perl" ,perl))) @@ -1219,7 +1276,7 @@ lot easier.") "PERL_PATH=perl" (string-append "SHELL_PATH=" (which "bash")) "test")))))) - (home-page "http://procode.org/stgit/") + (home-page "https://stacked-git.github.io/") (synopsis "Stacked Git") (description "StGit is a command-line application that provides functionality similar @@ -1237,7 +1294,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 @@ -1307,19 +1364,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) @@ -1418,40 +1475,137 @@ also walk each side of a merge and test those changes individually.") control to Git repositories.") (license license:gpl2))) -(define (mercurial-patch name revision hash) - (origin - (method url-fetch) - (uri (string-append "https://www.mercurial-scm.org/repo/hg/raw-rev/" revision)) - (file-name (string-append "mercurial-" name ".patch")) - (sha256 (base32 hash)))) - -(define %mercurial-patches - (list - ;; These three patches fixes compatibility with the updated gzip module - ;; in Python 3.8.2: . - (mercurial-patch "python-mtime" "6c36a521572edf3a79ee567b118469b3192037cc" - "0bmm7y40r8s081ws2sjvn1v8kvyfan4a97jl0fhdh7yc2pzxlzqq") - (mercurial-patch "indent-gzip" "a23b859ad17dd0a5b9bb37846b69b5e30f99c44c" - "1spscv9dgqv38m7h1liki93ax6w97gxayg17fr7wr6acjdfccpr9") - (mercurial-patch "python-gzip" "b7ca03dff14c63d64ad7bfa36a2d0a36a6b62253" - "0p88ffhx0kk21ssrsb156ffhpcb7g8mkwwkmq49qpmbm5ag2paf0") - ;; This fixes an incompatibility with os.isfile in Python 3.8: - ;; . - (mercurial-patch "os-isfile" "6a8738dc4a019da4c9df5c26961aa09d45ce1c68" - "0lr069m12kzrkmr1pmhaxg5lxmdwxabsza61qp1i1q70g7sy8lvy"))) +(define-public pre-commit + (package + (name "pre-commit") + (version "2.8.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 "0b3ks6viccq3n4p8i8zgfd40vp1k5nkhmmlz7p4nxcdizw8zxgn8")))) + (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 dotnet tests. + " and not test_dotnet_hook" + ;; Disable nodejs tests. + " and not test_unhealthy_if_system_node_goes_missing" + " and not test_installs_without_links_outside_env" + " and not test_healthy_system_node" + ;; 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) + ("python-re-assert" ,python-re-assert))) + ;; Propagate because pre-commit is also used as a module. + (propagated-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.3.1") + (version "5.6.1") (source (origin (method url-fetch) (uri (string-append "https://www.mercurial-scm.org/" "release/mercurial-" version ".tar.gz")) - (patches %mercurial-patches) (sha256 (base32 - "1nbjpzjrzgql4hrvslpxwbcgn885ikq6ba1yb4w6p78rw9nzkhgp")))) + "1bgz8f1a7lnmh6lzcvwg6q1yx6i7yibhwy06l4k55i04957jap75")))) (build-system python-build-system) (arguments `(#:phases @@ -1464,8 +1618,7 @@ control to Git repositories.") "tests/test-run-tests.t" "tests/test-transplant.t") (("/bin/sh") - (which "sh"))) - #t)) + (which "sh"))))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (with-directory-excursion "tests" @@ -1476,9 +1629,17 @@ control to Git repositories.") ;; 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)? + ;; These tests fail because the program is not + ;; connected to a TTY in the build container. "test-nointerrupt.t" + "test-transaction-rollback-on-sigpipe.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. @@ -1500,8 +1661,7 @@ control to Git repositories.") "--slowtimeout" "86400" ;; The test suite takes a long time and produces little ;; output by default. Prevent timeouts due to silence. - "-v")) - #t)))))) + "-v")))))))) ;; The following inputs are only needed to run the tests. (native-inputs `(("python-nose" ,python-nose) @@ -1515,17 +1675,43 @@ 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") - (version "0.30.2") + (version "0.31.2") (source (origin (method url-fetch) - (uri (string-append "http://www.webdav.org/neon/neon-" + (uri (string-append "https://notroj.github.io/neon/neon-" version ".tar.gz")) (sha256 (base32 - "1jpvczcx658vimqm7c8my2q41fnmjaf1j03g7bsli6rjxk6xh2yv")))) + "0y46dbhiblcvg8k41bdydr3fivghwk73z040ki5825d24ynf67ng")))) (build-system gnu-build-system) (native-inputs `(("perl" ,perl) @@ -1539,11 +1725,12 @@ and offers an easy and intuitive interface.") ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475 #:tests? #f #:configure-flags '("--enable-shared" + "--disable-static" ;; requires libgnutils-config, deprecated ;; in gnutls 2.8. ; "--with-ssl=gnutls"))) "--with-ssl=openssl"))) - (home-page "http://www.webdav.org/neon/") + (home-page "https://notroj.github.io/neon/") (synopsis "HTTP and WebDAV client library") (description "Neon is an HTTP and WebDAV client library, with a C interface and the @@ -1569,18 +1756,14 @@ following features: (define-public subversion (package (name "subversion") - (version "1.10.6") + (version "1.14.1") (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")))) + "1ag1hvcm9q92kgalzbbgcsq9clxnzmbj9nciz9lmabjx4lyajp9c")))) (build-system gnu-build-system) (arguments '(#:parallel-tests? #f ; TODO Seems to cause test failures on @@ -1656,26 +1839,17 @@ projects, from individuals to large-scale enterprise operations.") (define-public rcs (package (name "rcs") - (version "5.9.4") + (version "5.10.0") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/rcs/rcs-" version ".tar.xz")) (sha256 (base32 - "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86")) - (patches (search-patches "rcs-5.9.4-noreturn.patch")))) + "1if5pa4iip2p70gljm54nggfdnsfjxa4cqz8fpj07lvsijary39s")) + (patches (search-patches "rcs-5.10.0-no-stdin.patch")))) (build-system gnu-build-system) (native-inputs `(("ed" ,ed))) - (arguments - `(#:phases (modify-phases %standard-phases - (add-before 'check 'disable-t810 - ;; See https://savannah.gnu.org/bugs/index.php?52288 - ;; Back-porting the fix is non-trivial, so disable for now. - (lambda _ - (substitute* "tests/Makefile" - ((" t810 \\\\\n") "")) - #t))))) (home-page "https://www.gnu.org/software/rcs/") (synopsis "Per-file local revision control system") (description @@ -1718,14 +1892,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 @@ -1758,14 +1932,14 @@ masters from remote CVS hosts.") (define-public vc-dwim (package (name "vc-dwim") - (version "1.9") + (version "1.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/vc-dwim/vc-dwim-" version ".tar.xz")) (sha256 (base32 - "0mf1dd7wdqxsm4fcfinfd7iadzarmzvg747pbsbi32qpavpk8gdf")))) + "0am6axxdvkm2vwgg0gjrd930yv4dlsdbf0rdv0zh5bhy1ir64rph")))) (build-system gnu-build-system) (inputs `(("perl" ,perl))) (native-inputs @@ -1785,7 +1959,7 @@ standards-compliant ChangeLog entries based on the changes that it detects.") (define-public diffstat (package (name "diffstat") - (version "1.63") + (version "1.64") (source (origin (method url-fetch) (uri @@ -1796,7 +1970,7 @@ standards-compliant ChangeLog entries based on the changes that it detects.") "diffstat-" version ".tgz"))) (sha256 (base32 - "0vyw200s5dv1257pmrh6c6fdkmw3slyz5szpqfx916xr04sdbpby")))) + "1z7pwcv48fjnhxrjcsjdy83x8b9ckl582mbbds90a79fkn6y7bmq")))) (build-system gnu-build-system) (home-page "https://invisible-island.net/diffstat/") (synopsis "Make histograms from the output of @command{diff}") @@ -1885,7 +2059,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 @@ -1928,7 +2105,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 @@ -2059,7 +2236,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 @@ -2123,6 +2300,75 @@ supports a large number of version control systems: Git, Subversion, Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.") (license license:gpl2+))) +(define-public grokmirror + (package + (name "grokmirror") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url (string-append "https://git.kernel.org/pub/scm/" + "utils/grokmirror/grokmirror.git")) + (commit (string-append "v" version)))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 "006ar3kc6fw1sq300ar9np4a63qzzsdama6cv30wh65v5mqw1mnv")))) + (build-system python-build-system) + (arguments + `(#:tests? #f ; no test suite + #:phases + (modify-phases %standard-phases + (add-after 'install 'install-manpages + (lambda* (#:key outputs #:allow-other-keys) + (let* ((man (string-append (assoc-ref outputs "out") + "/man/man1/"))) + (mkdir-p man) + (for-each (lambda (file) (install-file file man)) + (find-files "." "\\.1$"))) + #t))))) + (propagated-inputs + `(("python-packaging" ,python-packaging) + ("python-requests" ,python-requests))) + (home-page + "https://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git") + (synopsis "Framework to smartly mirror git repositories") + (description "Grokmirror enables replicating large git repository +collections efficiently. Mirrors decide to clone and update repositories +based on a manifest file published by servers.") + (license license:gpl3+))) + +(define-public b4 + (package + (name "b4") + (version "0.6.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "b4" version)) + (sha256 + (base32 "1j904dy9cwxl85k2ngc498q5cdnqwsmw3jibjr1m55w8aqdck68z")))) + (build-system python-build-system) + (arguments '(#:tests? #f)) ; No tests. + (inputs + `(("python-dkimpy" ,python-dkimpy) + ("python-dnspython" ,python-dnspython) + ("python-requests" ,python-requests))) + (home-page "https://git.kernel.org/pub/scm/utils/b4/b4.git") + (synopsis "Tool for working with patches in public-inbox archives") + (description + "The @code{b4} command is designed to make it easier to participate in +patch-based workflows for projects that have public-inbox archives. + +Features include: +@itemize +@item downloading a thread's mbox given a message ID +@item processing an mbox so that is ready to be fed to @code{git-am} +@item creating templated replies for processed patches and pull requests +@item submitting cryptographic attestation for patches. +@end itemize") + (license license:gpl2+))) + (define-public git-annex-remote-rclone (package (name "git-annex-remote-rclone") @@ -2131,7 +2377,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.") (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 @@ -2168,7 +2414,7 @@ by rclone usable with git-annex.") (define-public fossil (package (name "fossil") - (version "2.10") + (version "2.11") (source (origin (method url-fetch) @@ -2176,8 +2422,7 @@ by rclone usable with git-annex.") "https://www.fossil-scm.org/index.html/uv/" "fossil-src-" version ".tar.gz")) (sha256 - (base32 - "041bs4fgk52fw58p7s084pxk9d9vs5v2f2pjbznqawz75inpg8yq")) + (base32 "0c9nzx42wxfmym9vf1pnbdb1c7gp7a7zqky60izxsph7w2xh8nix")) (modules '((guix build utils))) (snippet '(begin @@ -2401,7 +2646,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 @@ -2442,7 +2687,7 @@ interrupted, published, and collaborated on while in progress.") (define-public git-lfs (package (name "git-lfs") - (version "2.7.2") + (version "2.13.2") (source (origin (method git-fetch) (uri (git-reference @@ -2451,10 +2696,35 @@ interrupted, published, and collaborated on while in progress.") (file-name (git-file-name name version)) (sha256 (base32 - "1nf40rbdz901vsahg5cm09pznpina6wimmxl0lmh8pn0mi51yzvc")))) + "0gfpzdya48phwln61746ii78sq55mhzj938lz8x062xkkcsdvbf4")))) (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 @@ -2463,6 +2733,40 @@ videos, datasets, and graphics with text pointers inside Git, while storing the file contents on a remote server.") (license license:expat))) +(define-public git-open + (package + (name "git-open") + (version "2.1.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/paulirish/git-open") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "11n46bngvca5wbdbfcxzjhjbfdbad7sgf7h9gf956cb1q8swsdm0")))) + (build-system copy-build-system) + (inputs + `(("xdg-utils" ,xdg-utils))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'install 'wrap-program + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (xdg-utils (assoc-ref inputs "xdg-utils"))) + (wrap-program (string-append out "/bin/git-open") + `("PATH" ":" prefix (,(string-append xdg-utils "/bin")))))))) + #:install-plan + '(("git-open" "bin/git-open")))) + (home-page "https://github.com/paulirish/git-open") + (synopsis "Open a Git repository's homepage from the command-line") + (description + "@code{git open} opens the repository's website from the command-line, +guessing the URL pattern from the @code{origin} remote.") + (license license:expat))) + (define-public tla (package (name "gnu-arch") @@ -2519,3 +2823,216 @@ 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 diff-so-fancy + (package + (name "diff-so-fancy") + (version "1.3.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/so-fancy/diff-so-fancy") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0aavxahzha2mms4vdwysk79pa6wzswpfwgsq2hwaxnaf66maahfl")))) + (inputs + `(("perl" ,perl) + ("ncurses" ,ncurses))) + (build-system copy-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-lib-path + (lambda* (#:key outputs #:allow-other-keys) + (let ((lib (string-append (assoc-ref outputs "out") "/lib"))) + (substitute* "diff-so-fancy" + (("use lib.*$") + (string-append "use lib '" lib "';\n"))) + #t))) + (add-after 'install 'symlink-executable + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (ncurses (assoc-ref inputs "ncurses")) + (perl (assoc-ref inputs "perl"))) + (wrap-program (string-append out "/bin/diff-so-fancy") + `("PATH" ":" prefix (,(string-append ncurses "/bin") + ,(string-append perl "/bin")))) + #t)))) + #:install-plan + '(("lib" "lib") + ("diff-so-fancy" "bin/")))) + (home-page "https://github.com/so-fancy/diff-so-fancy") + (synopsis "Makes diffs more human friendly and readable") + (description + "@code{diff-so-fancy} strives to make your diffs human readable instead +of machine readable. This helps improve code quality and helps you spot +defects faster.") + (license license:expat))) + +(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))) + +(define-public gita + (let ((commit "e41b504dca90a25e9be27f296da7ce22e5782893") + (revision "1")) + (package + (name "gita") + (version (git-version "0.12.9" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nosarthur/gita") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1k03zgcbhl91cgyh4k7ywyjp00y63q4bqbimncqh5b3lni8l8j5l")))) + (build-system python-build-system) + (native-inputs + `(("git" ,git) ;for tests + ("python-pytest" ,python-pytest))) + (propagated-inputs + `(("python-pyyaml" ,python-pyyaml))) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (substitute* "tests/test_main.py" + (("'gita\\\\n'") "'source\\n'") + (("'gita'") "'source'")) + (invoke (string-append (assoc-ref inputs "git") "/bin/git") + "init") + (add-installed-pythonpath inputs outputs) + (invoke (string-append (assoc-ref inputs "python-pytest") + "/bin/pytest") + "-vv" "tests"))) + (add-after 'install 'install-shell-completions + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bash-completion (string-append out "/etc/bash_completion.d")) + (zsh-completion (string-append out "/etc/zsh/site-functions"))) + (mkdir-p bash-completion) + (copy-file ".gita-completion.bash" + (string-append bash-completion "/gita")) + (mkdir-p zsh-completion) + (copy-file ".gita-completion.zsh" + (string-append zsh-completion "/_gita")))))))) + (home-page "https://github.com/nosarthur/gita") + (synopsis "Command-line tool to manage multiple Git repos") + (description "This package provides a command-line tool to manage +multiple Git repos. + +This tool does two things: +@itemize +@item display the status of multiple Git repos such as branch, modification, +commit message side by side +@item (batch) delegate Git commands/aliases from any working directory +@end itemize + +If several repos are related, it helps to see their status together.") + (license license:expat)))) + +(define-public ghq + (package + (name "ghq") + (version "1.1.5") + (home-page "https://github.com/x-motemen/ghq") + (source (origin + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "098fik155viylq07az7crzbgswcvhpx0hr68xpvyx0rpri792jbq")))) + (build-system go-build-system) + (arguments + '(#:install-source? #f + #:import-path "github.com/x-motemen/ghq" + #:phases + (modify-phases %standard-phases + (add-after 'install 'install-completions + (lambda* (#:key outputs import-path #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bash-completion (string-append out "/etc/bash_completion.d")) + (zsh-completion (string-append out "/share/zsh/site-functions"))) + (with-directory-excursion (string-append "src/" import-path) + (mkdir-p bash-completion) + (copy-file "misc/bash/_ghq" + (string-append bash-completion "/ghq")) + (mkdir-p zsh-completion) + (copy-file "misc/zsh/_ghq" + (string-append zsh-completion "/_ghq")))) + #t))))) + (native-inputs + `(("git" ,git-minimal))) + (inputs + `(("github.com/songmu/gitconfig" ,go-github-com-songmu-gitconfig) + ("github.com/mattn/go-isatty" ,go-github-com-mattn-go-isatty) + ("github.com/motemen/go-colorine" ,go-github-com-motemen-go-colorine) + ("github.com/saracen/walker" ,go-github-com-saracen-walker) + ("github.com/urfave/cli/v2" ,go-github-com-urfave-cli-v2) + ("golang.org/x/net/html" ,go-golang-org-x-net-html) + ("golang.org/x/sync/errgroup" ,go-golang.org-x-sync-errgroup))) + (synopsis "Manage remote repository clones") + (description + "@code{ghq} provides a way to organize remote repository clones, like +@code{go get} does. When you clone a remote repository by @code{ghq get}, ghq +makes a directory under a specific root directory (by default @file{~/ghq}) +using the remote repository URL's host and path.") + (license license:expat)))