gnu: gtk+-2: Split binaries.
[jackhill/guix/guix.git] / gnu / packages / version-control.scm
index a05d87b..cf60f02 100644 (file)
@@ -5,12 +5,12 @@
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2016, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2018 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018 ng0 <ng0@n0.is>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -23,6 +23,8 @@
 ;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Jovany Leandro G.C <bit4bit@riseup.net>
+;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
+;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
-  #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system haskell)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages apr)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages groff)
-  #:use-module (gnu packages haskell)
-  #:use-module (gnu packages haskell-check)
-  #:use-module (gnu packages haskell-crypto)
-  #:use-module (gnu packages haskell-web)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages nano)
@@ -97,6 +94,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages sync)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
@@ -143,19 +141,23 @@ 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"))
+
 (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.21.0")
+   (version "2.24.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0a0d0b07rmvs985zpndxxy0vzr0vq53kq5kyd68iv6gf8gkirjwc"))))
+              "0ql5z31vgl7b785gwrf00m129mg7zi9pa65n12ij3mpxx3f28gvj"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -168,7 +170,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0lgcynqbjmfsvhfk14jvqyvb1xiyqgkgznb707vha38wjcjdqs1g"))))
+            "1yzy5jikkv67ynp576j926kg8zdldh8j4b57l0ixcnjdcyr4lc17"))))
       ;; For subtree documentation.
       ("asciidoc" ,asciidoc)
       ("docbook-xsl" ,docbook-xsl)
@@ -185,14 +187,17 @@ as well as the classic centralized workflow.")
       ;; a problem in 'patch-shebangs'; see <https://bugs.gnu.org/31952>.
       ("bash-for-tests" ,bash)
 
-      ;; For 'gitweb.cgi'
+      ;; For PCRE support in git grep (USE_LIBPCRE2).
+      ("pcre" ,pcre2)
+
+      ;; For 'gitweb.cgi'.
       ("perl-cgi" ,perl-cgi)
 
       ;; For 'git-svn'.
       ("subversion" ,subversion)
       ("perl-term-readkey" ,perl-term-readkey)
 
-      ;; For 'git-send-email'
+      ;; For 'git-send-email'.
       ("perl-authen-sasl" ,perl-authen-sasl)
       ("perl-net-smtp-ssl" ,perl-net-smtp-ssl)
       ("perl-io-socket-ssl" ,perl-io-socket-ssl)
@@ -218,6 +223,8 @@ as well as the classic centralized workflow.")
                                      (assoc-ref %build-inputs "bash-for-tests")
                                      "/bin/bash")
 
+                     "USE_LIBPCRE2=yes"
+
                      ;; By default 'make install' creates hard links for
                      ;; things in 'libexec/git-core', which leads to huge
                      ;; nars; see <https://bugs.gnu.org/21949>.
@@ -235,7 +242,10 @@ as well as the classic centralized workflow.")
       ;; 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)
@@ -252,6 +262,15 @@ as well as the classic centralized workflow.")
                               (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"
@@ -407,7 +426,7 @@ as well as the classic centralized workflow.")
                          ,@(transitive-input-references
                             'inputs
                             (map (lambda (l)
-                                   (assoc l (inputs)))
+                                   (assoc l (package-inputs this-package)))
                                  '("perl-authen-sasl"
                                    "perl-net-smtp-ssl"
                                    "perl-io-socket-ssl")))))))
@@ -420,7 +439,7 @@ as well as the classic centralized workflow.")
                          ,@(transitive-input-references
                             'inputs
                             (map (lambda (l)
-                                   (assoc l (inputs)))
+                                   (assoc l (package-inputs this-package)))
                                  '("perl-cgi")))))))
 
               ;; Tell 'git-submodule' where Perl is.
@@ -507,8 +526,13 @@ everything from small to very large projects with speed and efficiency.")
                  (delete-file-recursively
                   (string-append out "/share/gitweb"))
                  #t)))))
+       ((#: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"))
@@ -526,17 +550,18 @@ everything from small to very large projects with speed and efficiency.")
 (define-public libgit2
   (package
     (name "libgit2")
-    (version "0.27.7")
+    (version "0.28.4")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/libgit2/libgit2/"
-                                  "archive/v" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libgit2/libgit2.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0c95pbv7hwclwmn51nqnh1lb0cajpcdb24pbdzcir6vmhfj3am0s"))
-              (patches (search-patches "libgit2-mtime-0.patch"
-                                       "libgit2-oom-test.patch"))
+                "171b25aym4q88bidc4c76y4l6jmdwifm3q9zjqsll0wjhlkycfy1"))
+              (patches (search-patches "libgit2-avoid-python.patch"
+                                       "libgit2-mtime-0.patch"))
 
               ;; Remove bundled software.
               (snippet '(begin
@@ -546,7 +571,14 @@ everything from small to very large projects with speed and efficiency.")
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
-     `(#:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection
+     `(#:configure-flags
+       (list "-DUSE_SHA1DC=ON"  ; SHA-1 collision detection
+             ,@(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
@@ -557,15 +589,23 @@ everything from small to very large projects with speed and efficiency.")
                (("/bin/cp") (which "cp"))
                (("/bin/rm") (which "rm")))
              #t))
-         ;; Run checks more verbosely.
+         (add-after 'unpack 'make-git-checkout-writable
+           (lambda _
+             (for-each make-file-writable (find-files "."))
+             #t))
+         ;; 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)
-       ("python" ,python-wrapper)))
+       ("http-parser" ,http-parser)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("guile" ,guile-2.2)
+       ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; These two libraries are in 'Requires.private' in libgit2.pc.
      `(("openssl" ,openssl)
@@ -583,14 +623,15 @@ write native speed custom Git applications in any language with bindings.")
   (package
     (name "git-crypt")
     (version "0.5.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/AGWA/git-crypt"
-                                  "/archive/" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0454fdmgm5f3razkn8n03lfqm5zyzvr4r2528zmlxiwba9518l2i"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/AGWA/git-crypt.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1x9209n3k49k998saadr2d0lmvs01smjinx7gzzyjdwj9l904sii"))))
     (build-system gnu-build-system)
     (inputs
      `(("git" ,git)
@@ -753,10 +794,10 @@ collaboration using typical untrusted file hosts or services.")
         ,(origin
            (method url-fetch)
            ;; XXX CGit is currently incompatible with Git > 2.18.
-           (uri "mirror://kernel.org/software/scm/git/git-2.18.0.tar.xz")
+           (uri "mirror://kernel.org/software/scm/git/git-2.18.2.tar.xz")
            (sha256
             (base32
-             "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b"))))
+             "1gmcz5k8sa6phzhhv6zjl8izbyqnxcdb8ns8kd2czyak0g409vrq"))))
        ("openssl" ,openssl)
        ("groff" ,groff)
        ("python" ,python)
@@ -777,14 +818,13 @@ a built-in cache to decrease server I/O pressure.")
     (version "0.5.5")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/davisp/ghp-import/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/davisp/ghp-import.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0x887v690xsac2hzjkpbvp3a6crh3m08mqbk3nb4xwc9dnk869q7"))))
+        (base32 "12pmw3zz3i57ljnm0rxdyjqdyhisbvy18mjwkb3bzp5pgzs2f45c"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -1032,14 +1072,15 @@ manipulate them in various ways.")
   (package
     (name "vcsh")
     (version "1.20151229")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/RichiH/vcsh/archive/v"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1ym3swkh738c3vciffvlr96vqzhwmzkb8ajqzap8f0j9n039a1mf"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/RichiH/vcsh.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1grpj45nbpv4j60vd2kg4rj53zrm0bc0h9l4pfd3c2mwbvywm6ab"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("which" ,which)))
@@ -1106,15 +1147,15 @@ also walk each side of a merge and test those changes individually.")
   (package
     (name "gitolite")
     (version "3.6.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/sitaramc/gitolite/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1idxipg0df80bhjcxgwxs3lllqnkvhwpinmfv1xvg1l98fxiapgp"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/sitaramc/gitolite.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0rmyzr66lxh2ildf3h1nh3hh2ndwk21rjdin50r5vhwbdd7jg8vb"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -1219,14 +1260,14 @@ control to Git repositories.")
 (define-public mercurial
   (package
     (name "mercurial")
-    (version "4.7.2")
+    (version "5.0.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://www.mercurial-scm.org/"
                                  "release/mercurial-" version ".tar.gz"))
              (sha256
               (base32
-               "1yq9r8s9jzj8hk2yizjk25s4w16yx9b8mbdj6wp8ld7j2r15kw4p"))))
+               "1y60hfc8gh4ha9sw650qs7hndqmvbn0qxpmqwpn4q18z5xwm1f19"))))
     (build-system python-build-system)
     (arguments
      `(;; Restrict to Python 2, as Python 3 would require
@@ -1297,7 +1338,7 @@ following features:
 (define-public subversion
   (package
     (name "subversion")
-    (version "1.10.4")
+    (version "1.10.6")
     (source (origin
              (method url-fetch)
              (uri
@@ -1308,7 +1349,7 @@ following features:
                                 "subversion-" version ".tar.bz2")))
              (sha256
               (base32
-               "18c1vdq32nil76w678lxmp73jsbqha3dmzgmfrj76nc0xjmywql2"))))
+               "19zc215mhpnm92mlyl5jbv57r5zqp6cavr3s2g9yglp6j4kfgj0q"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1365,7 +1406,7 @@ following features:
     (home-page "https://subversion.apache.org/")
     (synopsis "Revision control system")
     (description
-     "Subversion (aka. ``svn'') exists to be recognized and adopted as a
+     "@dfn{Subversion} (svn) exists to be recognized and adopted as a
 centralized version control system characterized by its
 reliability as a safe haven for valuable data; the simplicity of its model and
 usage; and its ability to support the needs of a wide variety of users and
@@ -1386,6 +1427,15 @@ projects, from individuals to large-scale enterprise operations.")
              (patches (search-patches "rcs-5.9.4-noreturn.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
@@ -1405,7 +1455,7 @@ machine.")
              (uri (string-append
                    "https://ftp.gnu.org/non-gnu/cvs/source/feature/"
                    version "/cvs-" version ".tar.bz2"))
-             (patches (search-patches "cvs-2017-12836.patch"))
+             (patches (search-patches "cvs-CVE-2017-12836.patch"))
              (sha256
               (base32
                "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq"))))
@@ -1522,14 +1572,14 @@ reviewing large, complex patch files.")
 (define-public cssc
   (package
     (name "cssc")
-    (version "1.4.0")
+    (version "1.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/" name "/CSSC-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "15191dh8hr46cvssmv4v52gymiiyk6ca9j1bfimlqakcqab6y51h"))))
+                "1vsisqq573xjr2qpn19iwmpqgl3mq03m790akpa4rvj60b4d1gni"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1768,14 +1818,15 @@ output of the @code{git} command.")
   (package
     (name "findnewest")
     (version "0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/0-wiz-0/findnewest.git")
+             (commit (string-append "findnewest-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1x1cbn2b27h5r0ah5xc06fkalfdci2ngrgd4wibxjw0h88h0nvgq"))))
     (build-system gnu-build-system)
     (native-inputs `(("autoconf" ,autoconf)
                      ("automake" ,automake)))
@@ -1839,15 +1890,15 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
   (package
     (name "git-annex-remote-hubic")
     (version "0.3.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/Schnouki/" name "/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
+    (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
@@ -1865,6 +1916,48 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
 repository\" with git-annex.")
     (license license:gpl3+)))
 
+(define-public git-annex-remote-rclone
+  (package
+    (name "git-annex-remote-rclone")
+    (version "0.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/DanielDent/git-annex-remote-rclone.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0j0hlxji8d974fq7zd4xc02n0jpi31ylhxc7z4zp8iiwad5mkpxp"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((bash (string-append (assoc-ref %build-inputs "bash")
+                                    "/bin/bash"))
+               (rclone (string-append (assoc-ref %build-inputs "rclone")
+                                      "/bin/rclone")))
+           (copy-file (string-append (assoc-ref %build-inputs "source")
+                                     "/git-annex-remote-rclone")
+                      "git-annex-remote-rclone")
+           (substitute* "git-annex-remote-rclone"
+             (("/bin/bash") bash)
+             (("runcmd rclone") (string-append "runcmd " rclone)))
+           (install-file "git-annex-remote-rclone"
+                         (string-append %output "/bin"))
+           #t))))
+    (inputs
+     `(("bash" ,bash)
+       ("rclone" ,rclone)))
+    (home-page "https://github.com/DanielDent/git-annex-remote-rclone")
+    (synopsis "Use rclone-supported cloud storage providers with git-annex")
+    (description "This wrapper around rclone makes any destination supported
+by rclone usable with git-annex.")
+    (license license:gpl3+)))
+
 (define-public fossil
   (package
     (name "fossil")
@@ -1895,7 +1988,7 @@ repository\" with git-annex.")
     (inputs
      `(("openssl" ,openssl)
        ("zlib" ,zlib)
-       ("sqlite" ,sqlite-3.26.0)))
+       ("sqlite" ,sqlite)))
     (arguments
      `(#:configure-flags (list "--with-openssl=auto"
                                "--disable-internal-sqlite")
@@ -1958,180 +2051,6 @@ a built-in wiki, built-in file browsing, built-in tickets system, etc.")
 be served with a HTTP file server of your choice.")
     (license license:expat)))
 
-;; Darcs has no https support: http://irclog.perlgeek.de/darcs/2016-09-17
-;; http://darcs.net/manual/Configuring_darcs.html#SECTION00440070000000000000
-;; and results of search engines will show that if the protocol is http, https
-;; is never mentioned.
-(define-public darcs
-  (package
-    (name "darcs")
-    (version "2.14.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/darcs/"
-                           "darcs-" version ".tar.gz"))
-       (sha256
-        (base32
-         "0zm2486gyhiga1amclbg92cd09bvki6vgh0ll75hv5kl72j61lb5"))
-       (modules '((guix build utils)))
-       ;; Remove time-dependent code for reproducibility.
-       (snippet
-        '(begin
-           (substitute* "darcs/darcs.hs"
-             (("__DATE__") "\"1970-01-01\"")
-             (("__TIME__") "\"00:00:00\""))
-           #t))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
-                           "-fnetwork-uri" "-fhttp" "--flag=executable"
-                           "--flag=library")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-source-shebangs 'patch-sh
-           (lambda _
-             (substitute* "tests/issue538.sh"
-               (("/bin/sh") (which "sh")))
-             #t)))))
-    (inputs
-     `(("ghc-cmdargs" ,ghc-cmdargs)
-       ("ghc-split" ,ghc-split)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-findbin" ,ghc-findbin)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-async" ,ghc-async)
-       ("ghc-attoparsec" ,ghc-attoparsec)
-       ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
-       ("ghc-cryptohash" ,ghc-cryptohash)
-       ("ghc-data-ordlist" ,ghc-data-ordlist)
-       ("ghc-fgl" ,ghc-fgl)
-       ("ghc-system-filepath" ,ghc-system-filepath)
-       ("ghc-graphviz" ,ghc-graphviz)
-       ("ghc-hashable" ,ghc-hashable)
-       ("ghc-html" ,ghc-html)
-       ("ghc-mmap" ,ghc-mmap)
-       ("ghc-old-time" ,ghc-old-time)
-       ("ghc-parsec" ,ghc-parsec)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-applicative" ,ghc-regex-applicative)
-       ("ghc-regex-compat-tdfa" ,ghc-regex-compat-tdfa)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-shelly" ,ghc-shelly)
-       ("ghc-tar" ,ghc-tar)
-       ("ghc-transformers-compat" ,ghc-transformers-compat)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-vector" ,ghc-vector)
-       ("ghc-zip-archive" ,ghc-zip-archive)
-       ("ghc-zlib" ,ghc-zlib)
-       ("ghc-http" ,ghc-http)
-       ("curl" ,curl)
-       ("ghc" ,ghc)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("libiconv" ,libiconv)
-       ("ghc-network" ,ghc-network)
-       ("ghc-network-uri" ,ghc-network-uri)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (home-page "http://darcs.net")
-    (synopsis "Distributed Revision Control System")
-    (description
-     "Darcs is a revision control system.  It is:
-
-@enumerate
-@item Distributed: Every user has access to the full command set, removing boundaries
-between server and client or committer and non-committers.
-@item Interactive: Darcs is easy to learn and efficient to use because it asks you
-questions in response to simple commands, giving you choices in your work flow.
-You can choose to record one change in a file, while ignoring another.  As you update
-from upstream, you can review each patch name, even the full diff for interesting
-patches.
-@item Smart: Originally developed by physicist David Roundy, darcs is based on a
-unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
-@end enumerate")
-    (license license:gpl2)))
-
-(define-public java-jgit
-  (package
-    (name "java-jgit")
-    (version "4.7.0.201704051617-r")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://repo1.maven.org/maven2/"
-                                  "org/eclipse/jgit/org.eclipse.jgit/"
-                                  version "/org.eclipse.jgit-"
-                                  version "-sources.jar"))
-              (sha256
-               (base32
-                "13ii4jn02ynzq6i7gsyi21k2i94jpc85wf6bcm31q4cyvzv0mk4k"))))
-    (build-system ant-build-system)
-    (arguments
-     `(#:tests? #f                      ; There are no tests to run.
-       #:jar-name "jgit.jar"
-       ;; JGit must be built with a JDK supporting Java 8.
-       #:jdk ,icedtea-8
-       ;; Target our older default JDK.
-       #:make-flags (list "-Dtarget=1.7")
-       #:phases
-       (modify-phases %standard-phases
-         ;; The jar file generated by the default build.xml does not include
-         ;; the text properties files, so we need to add them.
-         (add-after 'build 'add-properties
-           (lambda* (#:key jar-name #:allow-other-keys)
-             (with-directory-excursion "src"
-               (apply invoke "jar" "-uf"
-                      (string-append "../build/jar/" jar-name)
-                      (find-files "." "\\.properties$")))
-             #t)))))
-    (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))
-    (home-page "https://eclipse.org/jgit/")
-    (synopsis "Java library implementing the Git version control system")
-    (description "JGit is a lightweight, pure Java library implementing the
-Git version control system, providing repository access routines, support for
-network protocols, and core version control algorithms.")
-    (license license:edl1.0)))
-
-;; For axoloti.  This package can still be built with icedtea-7, which is
-;; currently used as the default JDK.
-(define-public java-jgit-4.2
-  (package (inherit java-jgit)
-    (version "4.2.0.201601211800-r")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://repo1.maven.org/maven2/"
-                                  "org/eclipse/jgit/org.eclipse.jgit/"
-                                  version "/org.eclipse.jgit-"
-                                  version "-sources.jar"))
-              (sha256
-               (base32
-                "15gm537iivhnzlkjym4x3wn5jqdjdragsw9pdpzqqg21nrc817mm"))))
-    (build-system ant-build-system)
-    (arguments
-     (substitute-keyword-arguments (package-arguments java-jgit)
-       ;; Build for default JDK.
-       ((#:jdk _) icedtea-7)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'use-latest-javaewah-API
-             (lambda _
-               (substitute* "src/org/eclipse/jgit/internal/storage/file/BitmapIndexImpl.java"
-                 (("wordinbits") "WORD_IN_BITS"))
-               #t))))))
-    (inputs
-     `(("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))))
-
 (define-public gource
   (package
     (name "gource")
@@ -2220,133 +2139,6 @@ cases like all those little scripts in your @file{~/bin} directory, or a
 directory full of HOWTOs.")
     (license license:bsd-2)))
 
-(define-public git-annex
-  (package
-    (name "git-annex")
-    (version "6.20180926")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://hackage.haskell.org/package/"
-                           "git-annex/git-annex-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1251rj8h63y30sfqk0zh670yhz14p256y59n3590pg015pf3575d"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:configure-flags
-       '("--flags=-Android -Assistant -Pairing -S3 -Webapp -WebDAV")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-shell
-           (lambda _
-             (substitute* "Utility/Shell.hs"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-before 'configure 'factor-setup
-           (lambda _
-             ;; Factor out necessary build logic from the provided
-             ;; `Setup.hs' script.  The script as-is does not work because
-             ;; it cannot find its dependencies, and there is no obvious way
-             ;; to tell it where to look.  Note that we do not preserve the
-             ;; code that installs man pages here.
-             (call-with-output-file "PreConf.hs"
-               (lambda (out)
-                 (format out "import qualified Build.Configure as Configure~%")
-                 (format out "main = Configure.run Configure.tests~%")))
-             (call-with-output-file "Setup.hs"
-               (lambda (out)
-                 (format out "import Distribution.Simple~%")
-                 (format out "main = defaultMain~%")))
-             #t))
-         (add-before 'configure 'pre-configure
-           (lambda _
-             (invoke "runhaskell" "PreConf.hs")
-             #t))
-         (replace 'check
-           (lambda _
-             ;; We need to set the path so that Git recognizes
-             ;; `git annex' as a custom command.
-             (setenv "PATH" (string-append (getenv "PATH") ":"
-                                           (getcwd) "/dist/build/git-annex"))
-             (with-directory-excursion "dist/build/git-annex"
-               (symlink "git-annex" "git-annex-shell"))
-             (invoke "git-annex" "test")
-             #t))
-         (add-after 'install 'install-symlinks
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
-               (symlink (string-append bin "/git-annex")
-                        (string-append bin "/git-annex-shell"))
-               (symlink (string-append bin "/git-annex")
-                        (string-append bin "/git-remote-tor-annex"))
-               #t))))))
-    (inputs
-     `(("curl" ,curl)
-       ("ghc-aeson" ,ghc-aeson)
-       ("ghc-async" ,ghc-async)
-       ("ghc-bloomfilter" ,ghc-bloomfilter)
-       ("ghc-byteable" ,ghc-byteable)
-       ("ghc-case-insensitive" ,ghc-case-insensitive)
-       ("ghc-crypto-api" ,ghc-crypto-api)
-       ("ghc-cryptonite" ,ghc-cryptonite)
-       ("ghc-data-default" ,ghc-data-default)
-       ("ghc-disk-free-space" ,ghc-disk-free-space)
-       ("ghc-dlist" ,ghc-dlist)
-       ("ghc-edit-distance" ,ghc-edit-distance)
-       ("ghc-esqueleto" ,ghc-esqueleto)
-       ("ghc-exceptions" ,ghc-exceptions)
-       ("ghc-feed" ,ghc-feed)
-       ("ghc-free" ,ghc-free)
-       ("ghc-hslogger" ,ghc-hslogger)
-       ("ghc-http-client" ,ghc-http-client)
-       ("ghc-http-conduit" ,ghc-http-conduit)
-       ("ghc-http-types" ,ghc-http-types)
-       ("ghc-ifelse" ,ghc-ifelse)
-       ("ghc-memory" ,ghc-memory)
-       ("ghc-monad-control" ,ghc-monad-control)
-       ("ghc-monad-logger" ,ghc-monad-logger)
-       ("ghc-network" ,ghc-network)
-       ("ghc-old-locale" ,ghc-old-locale)
-       ("ghc-optparse-applicative" ,ghc-optparse-applicative)
-       ("ghc-persistent" ,ghc-persistent)
-       ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
-       ("ghc-persistent-template" ,ghc-persistent-template)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
-       ("ghc-resourcet" ,ghc-resourcet)
-       ("ghc-safesemaphore" ,ghc-safesemaphore)
-       ("ghc-sandi" ,ghc-sandi)
-       ("ghc-securemem" ,ghc-securemem)
-       ("ghc-socks" ,ghc-socks)
-       ("ghc-split" ,ghc-split)
-       ("ghc-stm" ,ghc-stm)
-       ("ghc-stm-chans" ,ghc-stm-chans)
-       ("ghc-tagsoup" ,ghc-tagsoup)
-       ("ghc-text" ,ghc-text)
-       ("ghc-unix-compat" ,ghc-unix-compat)
-       ("ghc-unordered-containers" ,ghc-unordered-containers)
-       ("ghc-utf8-string" ,ghc-utf8-string)
-       ("ghc-uuid" ,ghc-uuid)
-       ("git" ,git)
-       ("rsync" ,rsync)))
-    (native-inputs
-     `(("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-tasty-rerun" ,ghc-tasty-rerun)))
-    (home-page "https://git-annex.branchable.com/")
-    (synopsis "Manage files with Git, without checking in their contents")
-    (description "This package allows managing files with Git, without
-checking the file contents into Git.  It can store files in many places,
-such as local hard drives and cloud storage services.  It can also be
-used to keep a folder in sync between computers.")
-    ;; The web app is released under the AGPLv3+.
-    (license (list license:gpl3+
-                   license:agpl3+))))
-
 (define-public git-when-merged
   ;; Use an unreleased version to get a PY3 compatibility fix.
   (let ((commit "ab6af7865a0ba55ba364a6c507e0be6f84f31c6d"))
@@ -2403,18 +2195,18 @@ how information about the merge is displayed.")
   (package
     (name "git-imerge")
     (version "1.1.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/mhagger/git-imerge/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0a6ay8fpgz3yd84jc40w41x0rcfpan6bcq4wd1hxiiqwb51jysb2"))))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mhagger/git-imerge.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0vi1w3f0yk4gqhxj2hzqafqq28rihyhyfnp8x7xzib96j2si14a4"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f  ; The are only manual test scripts.
+     `(#:tests? #f                      ; only manual test scripts
        #:make-flags (list (string-append "DESTDIR=" %output)
                           "PREFIX=")
        #:phases
@@ -2444,3 +2236,27 @@ design goals are to reduce the pain of resolving merge conflicts by finding
 the smallest possible conflicts and to allow a merge to be saved, tested,
 interrupted, published, and collaborated on while in progress.")
     (license license:gpl2+)))
+
+(define-public git-lfs
+  (package
+    (name "git-lfs")
+    (version "2.7.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/git-lfs/git-lfs")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1nf40rbdz901vsahg5cm09pznpina6wimmxl0lmh8pn0mi51yzvc"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/git-lfs/git-lfs"))
+    (home-page "https://git-lfs.github.com/")
+    (synopsis "Git extension for versioning large files")
+    (description
+     "Git Large File Storage (LFS) replaces large files such as audio samples,
+videos, datasets, and graphics with text pointers inside Git, while storing the
+file contents on a remote server.")
+    (license license:expat)))