gnu: masscan: Cross compile.
[jackhill/guix/guix.git] / gnu / packages / version-control.scm
index 28c4093..3e46a61 100644 (file)
@@ -7,7 +7,7 @@
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2016, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2015, 2018 Kyle Meyer <kyle@kyleam.com>
+;;; Copyright © 2015, 2018, 2020 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
@@ -30,6 +30,7 @@
 ;;; Copyright © 2020 John D. Boy <jboy@bius.moe>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,6 +53,7 @@
   #: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)
@@ -74,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)
@@ -90,6 +93,7 @@
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
@@ -156,14 +160,14 @@ as well as the classic centralized workflow.")
 (define-public git
   (package
    (name "git")
-   (version "2.28.0")
+   (version "2.29.2")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "17a311vzimqn1glc9d7x82rhb1mb81m5rr4g8xji8idaafid39fz"))))
+              "1h87yv117ypnc0yi86941089c14n91gixk8b6shj2y35prp47z7j"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -180,7 +184,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "1dvwq0py8a2ywmgc5pzdlsj3608s7r9wyba292728fcs3yj7ynk6"))))
+            "14npkg9rnp2yclsx5p622qpm6byzfy5k5wb209vkmm5r60m4mm72"))))
       ;; For subtree documentation.
       ("asciidoc" ,asciidoc-py3)
       ("docbook-xsl" ,docbook-xsl)
@@ -515,11 +519,6 @@ 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))
            (add-after 'install 'remove-unusable-perl-commands
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out     (assoc-ref outputs "out"))
@@ -1329,7 +1328,7 @@ also walk each side of a merge and test those changes individually.")
 (define-public gitolite
   (package
     (name "gitolite")
-    (version "3.6.11")
+    (version "3.6.12")
     (source
      (origin
        (method git-fetch)
@@ -1338,10 +1337,10 @@ also walk each side of a merge and test those changes individually.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rkj7gknwjlc5ij9w39zf5mr647bm45la57yjczydmvrb8c56yrh"))))
+        (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)
@@ -1443,7 +1442,7 @@ control to Git repositories.")
 (define-public pre-commit
   (package
     (name "pre-commit")
-    (version "2.6.0")
+    (version "2.8.1")
     (source
      (origin
        ;; No tests in the PyPI tarball.
@@ -1453,7 +1452,7 @@ control to Git repositories.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "144hcnz8vz07nkx7hk8a3ac822186ardwxa8jnl6s8qvm5ip92f2"))))
+        (base32 "0b3ks6viccq3n4p8i8zgfd40vp1k5nkhmmlz7p4nxcdizw8zxgn8"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1489,11 +1488,17 @@ control to Git repositories.")
                       " 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
+                      ;; 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.
@@ -1516,14 +1521,14 @@ control to Git repositories.")
                       " 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
+                      ;; 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'
+                      ;; No module named 'pip._internal.cli.main'.
                       " and not test_additional_dependencies_roll_forward"
-                      ; Assertion errors
+                      ;; 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
@@ -1535,9 +1540,11 @@ control to Git repositories.")
                          (find-files out "\\.gz$"))
                #t))))))
     (native-inputs
-     `(("git" ,git)
-       ("python-pytest" ,python-pytest)))
-    (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)
@@ -1552,40 +1559,17 @@ 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 (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: <https://bz.mercurial-scm.org/show_bug.cgi?id=6284>.
-   (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:
-   ;; <https://bz.mercurial-scm.org/show_bug.cgi?id=6287>.
-   (mercurial-patch "os-isfile" "6a8738dc4a019da4c9df5c26961aa09d45ce1c68"
-                    "0lr069m12kzrkmr1pmhaxg5lxmdwxabsza61qp1i1q70g7sy8lvy")))
-
 (define-public mercurial
   (package
     (name "mercurial")
-    (version "5.3.1")
+    (version "5.5.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"))))
+               "0x08yjs26j88kh1bvl2g3r24lnfc023ry3i1cxfq6haray6sv5ag"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1614,6 +1598,13 @@ execution of any hook written in any language before every commit.")
                            ;; 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"
@@ -1649,6 +1640,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")
@@ -1786,26 +1803,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
@@ -1888,14 +1896,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
@@ -2256,6 +2264,86 @@ 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.0")
+    (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 "1cs43vf87x8x5k5ncgiwiclc92a1dvxpg2z6lh6psaiip808gylp"))))
+    (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-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.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.kernel.org/pub/scm/utils/b4/b4.git")
+             (commit (string-append "v" version))))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32 "1w11fiyspyncz2m7njrjfylgzch4azi7560ngd8i733wvjjhg3mj"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f                      ; No tests.
+       #: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/man5/")))
+               (mkdir-p man)
+               (for-each (lambda (file) (install-file file man))
+                         (find-files "man" "\\.[1-8]$")))
+             #t)))))
+    (inputs
+     `(("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")
@@ -2574,7 +2662,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
@@ -2583,10 +2671,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
@@ -2651,3 +2764,57 @@ 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)))