gnu: gambit-c: Update to 4.9.0.
[jackhill/guix/guix.git] / gnu / packages / version-control.scm
CommitLineData
dcee3fc5
NK
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
cf3fe3b0 3;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
189be331 4;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
fc1e4516 5;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
62063d85 6;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
6c0e2dbb 7;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
f36a1eba 8;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
2fe05cb6 9;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
e92b8599 10;;; Copyright © 2015 Kyle Meyer <kyle@kyleam.com>
2613f5af 11;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
8343d373 12;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
4a78fd46 13;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
218b94f3 14;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
136968fb 15;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
0ea45ef4 16;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
ed2b7cb2 17;;; Copyright © 2017 André <eu@euandre.org>
ea4be20a 18;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
205441eb 19;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
ca3c1439 20;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
0ed7498a 21;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
57c5aa7c 22;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
a078a6ec 23;;; Copyright © 2018 Timothy Sample <samplet@ngyro.com>
72816ebe 24;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
dcee3fc5
NK
25;;;
26;;; This file is part of GNU Guix.
27;;;
28;;; GNU Guix is free software; you can redistribute it and/or modify it
29;;; under the terms of the GNU General Public License as published by
30;;; the Free Software Foundation; either version 3 of the License, or (at
31;;; your option) any later version.
32;;;
33;;; GNU Guix is distributed in the hope that it will be useful, but
34;;; WITHOUT ANY WARRANTY; without even the implied warranty of
35;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36;;; GNU General Public License for more details.
37;;;
38;;; You should have received a copy of the GNU General Public License
39;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
40
1b1c335f 41(define-module (gnu packages version-control)
369387b6 42 #:use-module ((guix licenses) #:prefix license:)
d1cba090 43 #:use-module (guix utils)
dcee3fc5
NK
44 #:use-module (guix packages)
45 #:use-module (guix download)
c7810bd1 46 #:use-module (guix git-download)
2613f5af 47 #:use-module (guix build-system ant)
086e498b 48 #:use-module (guix build-system cmake)
1b1c335f 49 #:use-module (guix build-system gnu)
d81f131f 50 #:use-module (guix build-system haskell)
dcee3fc5 51 #:use-module (guix build-system python)
c7810bd1 52 #:use-module (guix build-system trivial)
2b24faa2 53 #:use-module (gnu packages apr)
df7393b9 54 #:use-module (gnu packages autotools)
99828fa7 55 #:use-module (gnu packages documentation)
c7810bd1 56 #:use-module (gnu packages base)
24112773 57 #:use-module (gnu packages bash)
0e534e74 58 #:use-module (gnu packages bison)
ca3c1439 59 #:use-module (gnu packages boost)
ea4be20a 60 #:use-module (gnu packages check)
0e534e74 61 #:use-module (gnu packages cook)
d9ff410f 62 #:use-module (gnu packages curl)
59ef2030 63 #:use-module (gnu packages docbook)
740c24df 64 #:use-module (gnu packages ed)
0e534e74
JD
65 #:use-module (gnu packages file)
66 #:use-module (gnu packages flex)
fc1e4516 67 #:use-module (gnu packages gettext)
ca3c1439 68 #:use-module (gnu packages gl)
0e534e74 69 #:use-module (gnu packages groff)
d81f131f 70 #:use-module (gnu packages haskell)
a06b9b50 71 #:use-module (gnu packages haskell-check)
f24eba89 72 #:use-module (gnu packages haskell-crypto)
44b7374a 73 #:use-module (gnu packages haskell-web)
ca3c1439 74 #:use-module (gnu packages image)
2613f5af 75 #:use-module (gnu packages java)
0e534e74 76 #:use-module (gnu packages linux)
ca3c1439 77 #:use-module (gnu packages maths)
1972fed4 78 #:use-module (gnu packages nano)
2459141e 79 #:use-module (gnu packages ncurses)
378b01dc 80 #:use-module (gnu packages ssh)
46138f3e 81 #:use-module (gnu packages web)
e8d2168c 82 #:use-module (gnu packages openstack)
ca3c1439 83 #:use-module (gnu packages pcre)
cf3fe3b0 84 #:use-module (gnu packages perl)
5ccde207 85 #:use-module (gnu packages perl-check)
fc1e4516 86 #:use-module (gnu packages pkg-config)
cf3fe3b0 87 #:use-module (gnu packages python)
1b2f753d 88 #:use-module (gnu packages python-web)
d0e11e8b 89 #:use-module (gnu packages readline)
a078a6ec 90 #:use-module (gnu packages rsync)
5f96f303 91 #:use-module (gnu packages databases)
9de46ffb 92 #:use-module (gnu packages admin)
d9ff410f 93 #:use-module (gnu packages xml)
a4572a17 94 #:use-module (gnu packages emacs)
8b2fe785 95 #:use-module (gnu packages compression)
ca3c1439 96 #:use-module (gnu packages sdl)
ecfb6993 97 #:use-module (gnu packages swig)
25f76ef0 98 #:use-module (gnu packages tcl)
71653653 99 #:use-module (gnu packages textutils)
33dc54b0 100 #:use-module (gnu packages time)
cc2b77df 101 #:use-module (gnu packages tls)
58c18069
EB
102 #:use-module (gnu packages)
103 #:use-module (ice-9 match)
104 #:use-module (srfi srfi-1))
dcee3fc5
NK
105
106(define-public bazaar
107 (package
108 (name "bazaar")
d1cba090 109 (version "2.7.0")
dcee3fc5
NK
110 (source
111 (origin
112 (method url-fetch)
d1cba090
EF
113 (uri (string-append "https://launchpad.net/bzr/"
114 (version-major+minor version) "/" version
dcee3fc5 115 "/+download/bzr-" version ".tar.gz"))
982caeab 116 (patches (search-patches "bazaar-CVE-2017-14176.patch"))
dcee3fc5
NK
117 (sha256
118 (base32
d1cba090 119 "1cysix5k3wa6y7jjck3ckq3abls4gvz570s0v0hxv805nwki4i8d"))))
dcee3fc5
NK
120 (build-system python-build-system)
121 (inputs
122 ;; Note: 'tools/packaging/lp-upload-release' and 'tools/weavemerge.sh'
123 ;; require Zsh.
b94a6ca0 124 `(("gettext" ,gettext-minimal)))
dcee3fc5 125 (arguments
1611eccd 126 `(#:tests? #f ; no test target
3b9af0f3 127 #:python ,python-2 ; Python 3 apparently not yet supported, see
1611eccd 128 ; https://answers.launchpad.net/bzr/+question/229048
730c740e
EF
129 #:phases
130 (modify-phases %standard-phases
131 (add-after 'unpack 'fix-mandir
132 (lambda _
133 (substitute* "setup.py"
134 (("man/man1") "share/man/man1"))
135 #t)))))
dcee3fc5 136 (home-page "https://gnu.org/software/bazaar")
79c311b8 137 (synopsis "Version control system supporting both distributed and centralized workflows")
dcee3fc5 138 (description
79c311b8 139 "GNU Bazaar is a version control system that allows you to record
35b9e423 140changes to project files over time. It supports both a distributed workflow
79c311b8 141as well as the classic centralized workflow.")
369387b6 142 (license license:gpl2+)))
1b1c335f 143
d9ff410f
AE
144(define-public git
145 (package
146 (name "git")
19a3e7f8
LF
147 ;; XXX When updating Git, check if the special 'git-source' input to cgit
148 ;; needs to be updated as well.
5d9c28f1 149 (version "2.19.0")
d9ff410f
AE
150 (source (origin
151 (method url-fetch)
4d96439d 152 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
ff212a5c 153 version ".tar.xz"))
d9ff410f
AE
154 (sha256
155 (base32
5d9c28f1 156 "1x1y5z3awabmfg7hk6zb331jxngad4nal4507v96bnf0izsyy3qq"))))
d9ff410f 157 (build-system gnu-build-system)
2a5e15c6
LC
158 (native-inputs
159 `(("native-perl" ,perl)
b94a6ca0 160 ("gettext" ,gettext-minimal)
d1cada04
LF
161 ("git-manpages"
162 ,(origin
163 (method url-fetch)
164 (uri (string-append
165 "mirror://kernel.org/software/scm/git/git-manpages-"
166 version ".tar.xz"))
167 (sha256
168 (base32
5d9c28f1 169 "1jvxiqvp9q4is3np063ny7rnmk5hm36d34bhi3cgv89njqdh8laf"))))))
d9ff410f
AE
170 (inputs
171 `(("curl" ,curl)
172 ("expat" ,expat)
d9ff410f
AE
173 ("openssl" ,openssl)
174 ("perl" ,perl)
d1f30e99 175 ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL
ed5f49ff
LC
176 ("zlib" ,zlib)
177
24112773
MB
178 ;; Note: we keep this in inputs rather than native-inputs to work around
179 ;; a problem in 'patch-shebangs'; see <https://bugs.gnu.org/31952>.
180 ("bash-for-tests" ,bash)
181
3bec8a01
RW
182 ;; For 'gitweb.cgi'
183 ("perl-cgi" ,perl-cgi)
184
ed5f49ff 185 ;; For 'git-svn'.
ecfb6993 186 ("subversion" ,subversion)
b411517a 187 ("perl-term-readkey" ,perl-term-readkey)
ecfb6993 188
58c18069
EB
189 ;; For 'git-send-email'
190 ("perl-authen-sasl" ,perl-authen-sasl)
191 ("perl-net-smtp-ssl" ,perl-net-smtp-ssl)
192 ("perl-io-socket-ssl" ,perl-io-socket-ssl)
193
ecfb6993
LC
194 ;; For 'git gui', 'gitk', and 'git citool'.
195 ("tcl" ,tcl)
196 ("tk" ,tk)))
197 (outputs '("out" ; the core
58c18069 198 "send-email" ; for git-send-email
ecfb6993 199 "svn" ; git-svn
145b0693 200 "credential-netrc" ; git-credential-netrc
ecfb6993 201 "gui")) ; gitk, git gui
d9ff410f 202 (arguments
1a59b6d0
LC
203 `(#:make-flags `("V=1" ;more verbose compilation
204
24112773
MB
205 ,(string-append "SHELL_PATH="
206 (assoc-ref %build-inputs "bash")
207 "/bin/sh")
208
209 ;; Tests require a bash with completion support.
210 ,(string-append "TEST_SHELL_PATH="
211 (assoc-ref %build-inputs "bash-for-tests")
212 "/bin/bash")
213
1a59b6d0
LC
214 ;; By default 'make install' creates hard links for
215 ;; things in 'libexec/git-core', which leads to huge
9006f8bc 216 ;; nars; see <https://bugs.gnu.org/21949>.
1a59b6d0 217 "NO_INSTALL_HARDLINKS=indeed")
24112773
MB
218
219 ;; Make sure the full bash does not end up in the final closure.
220 #:disallowed-references (,bash)
221
d9ff410f 222 #:test-target "test"
ecfb6993 223
c03ba83c
LC
224 ;; Tests fail randomly when parallel: <https://bugs.gnu.org/29512>.
225 #:parallel-tests? #f
226
ecfb6993
LC
227 ;; The explicit --with-tcltk forces the build system to hardcode the
228 ;; absolute file name to 'wish'.
229 #:configure-flags (list (string-append "--with-tcltk="
230 (assoc-ref %build-inputs "tk")
231 "/bin/wish8.6")) ; XXX
232
58c18069 233 #:modules ((srfi srfi-1)
24112773 234 (srfi srfi-26)
58c18069 235 ,@%gnu-build-system-modules)
d9ff410f 236 #:phases
98378db6 237 (modify-phases %standard-phases
24112773
MB
238 (add-after 'unpack 'modify-PATH
239 (lambda* (#:key inputs #:allow-other-keys)
240 (let ((path (string-split (getenv "PATH") #\:))
241 (bash-full (assoc-ref inputs "bash-for-tests")))
242 ;; Drop the test bash from PATH so that (which "sh") and
243 ;; similar does the right thing.
244 (setenv "PATH" (string-join
245 (remove (cut string-prefix? bash-full <>) path)
246 ":"))
247 #t)))
0fff1495 248 (add-after 'configure 'patch-makefiles
98378db6
LC
249 (lambda _
250 (substitute* "Makefile"
98378db6 251 (("/usr/bin/perl") (which "perl"))
0fff1495 252 (("/usr/bin/python") (which "python")))
0fff1495 253 #t))
8601feae
LC
254 (add-after 'configure 'add-PM.stamp
255 (lambda _
256 ;; Add the "PM.stamp" to avoid "no rule to make target".
257 (call-with-output-file "perl/PM.stamp" (const #t))
258 #t))
c9f4f56b
MB
259 (add-before 'check 'patch-tests
260 (lambda _
6e0efe8c
Y
261 (let ((store-directory (%store-directory)))
262 ;; These files contain some funny bytes that Guile is unable
263 ;; to decode for shebang patching. Just delete them.
264 (for-each delete-file '("t/t4201-shortlog.sh"
265 "t/t7813-grep-icase-iso.sh"))
266 ;; Many tests contain inline shell scripts (hooks etc).
267 (substitute* (find-files "t" "\\.sh$")
268 (("#!/bin/sh") (string-append "#!" (which "sh"))))
269 ;; Un-do shebang patching here to prevent checksum mismatch.
270 (substitute* '("t/t4034/perl/pre" "t/t4034/perl/post")
271 (("^#!.*/bin/perl") "#!/usr/bin/perl"))
272 (substitute* "t/t5003-archive-zip.sh"
273 (("cp /bin/sh") (string-append "cp " (which "sh"))))
274 (substitute* "t/t6030-bisect-porcelain.sh"
275 (("\"/bin/sh\"") (string-append "\"" (which "sh") "\"")))
276 ;; FIXME: This test runs `git commit` with a bogus EDITOR
277 ;; and empty commit message, but does not fail the way it's
278 ;; expected to. The test passes when invoked interactively.
279 (substitute* "t/t7508-status.sh"
280 (("\tcommit_template_commented") "\ttrue"))
281 ;; More checksum mismatches due to odd shebangs.
282 (substitute* "t/t9100-git-svn-basic.sh"
283 (((string-append "\"#!" store-directory ".*/bin/sh")) "\"#!/bin/sh") )
284 (substitute* "t/t9300-fast-import.sh"
285 (((string-append "\t#!" store-directory ".*/bin/sh")) "\t#!/bin/sh")
286 (((string-append "'#!" store-directory ".*/bin/sh")) "'#!/bin/sh"))
287 ;; FIXME: Some hooks fail with "basename: command not found".
288 ;; See 't/trash directory.t9164.../svn-hook.log'.
289 (delete-file "t/t9164-git-svn-dcommit-concurrent.sh")
c7699ebe 290
6e0efe8c
Y
291 ;; XXX: These tests fail intermittently for unknown reasons:
292 ;; <https://bugs.gnu.org/29546>.
293 (for-each delete-file
294 '("t/t9128-git-svn-cmd-branch.sh"
295 "t/t9167-git-svn-cmd-branch-subproject.sh"
296 "t/t9141-git-svn-multiple-branches.sh"))
297 #t)))
98378db6
LC
298 (add-after 'install 'install-shell-completion
299 (lambda* (#:key outputs #:allow-other-keys)
300 (let* ((out (assoc-ref outputs "out"))
301 (completions (string-append out "/etc/bash_completion.d")))
302 ;; TODO: Install the tcsh and zsh completions in the right place.
303 (mkdir-p completions)
304 (copy-file "contrib/completion/git-completion.bash"
305 (string-append completions "/git"))
306 #t)))
145b0693
PN
307 (add-after 'install 'install-credential-netrc
308 (lambda* (#:key outputs #:allow-other-keys)
309 (let* ((netrc (assoc-ref outputs "credential-netrc")))
310 (install-file "contrib/credential/netrc/git-credential-netrc"
311 (string-append netrc "/bin"))
312 #t)))
98378db6 313 (add-after 'install 'split
23c0e743
LC
314 (lambda* (#:key inputs outputs #:allow-other-keys)
315 ;; Split the binaries to the various outputs.
316 (let* ((out (assoc-ref outputs "out"))
58c18069 317 (se (assoc-ref outputs "send-email"))
23c0e743
LC
318 (svn (assoc-ref outputs "svn"))
319 (gui (assoc-ref outputs "gui"))
320 (gitk (string-append out "/bin/gitk"))
321 (gitk* (string-append gui "/bin/gitk"))
322 (git-gui (string-append out "/libexec/git-core/git-gui"))
323 (git-gui* (string-append gui "/libexec/git-core/git-gui"))
324 (git-cit (string-append out "/libexec/git-core/git-citool"))
325 (git-cit* (string-append gui "/libexec/git-core/git-citool"))
58c18069
EB
326 (git-se (string-append out "/libexec/git-core/git-send-email"))
327 (git-se* (string-append se "/libexec/git-core/git-send-email"))
23c0e743
LC
328 (git-svn (string-append out "/libexec/git-core/git-svn"))
329 (git-svn* (string-append svn "/libexec/git-core/git-svn"))
330 (git-sm (string-append out
331 "/libexec/git-core/git-submodule")))
332 (mkdir-p (string-append gui "/bin"))
333 (mkdir-p (string-append gui "/libexec/git-core"))
58c18069 334 (mkdir-p (string-append se "/libexec/git-core"))
23c0e743 335 (mkdir-p (string-append svn "/libexec/git-core"))
ecfb6993 336
23c0e743
LC
337 (for-each (lambda (old new)
338 (copy-file old new)
339 (delete-file old)
340 (chmod new #o555))
58c18069
EB
341 (list gitk git-gui git-cit git-se git-svn)
342 (list gitk* git-gui* git-cit* git-se* git-svn*))
ed5f49ff 343
b411517a 344 ;; Tell 'git-svn' where Subversion and perl-term-readkey are.
23c0e743
LC
345 (wrap-program git-svn*
346 `("PATH" ":" prefix
347 (,(string-append (assoc-ref inputs "subversion")
348 "/bin")))
349 `("PERL5LIB" ":" prefix
b411517a
TD
350 ,(map (lambda (i) (string-append (assoc-ref inputs i)
351 "/lib/perl5/site_perl"))
352 '("subversion" "perl-term-readkey")))
ed5f49ff 353
23c0e743
LC
354 ;; XXX: The .so for SVN/Core.pm lacks a RUNPATH, so
355 ;; help it find 'libsvn_client-1.so'.
356 `("LD_LIBRARY_PATH" ":" prefix
357 (,(string-append (assoc-ref inputs "subversion")
358 "/lib"))))
0a5a1db2 359
58c18069
EB
360 ;; Tell 'git-send-email' where perl modules are.
361 (wrap-program git-se*
362 `("PERL5LIB" ":" prefix
363 ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
355e53c4 364 (list
a6d0b306 365 ,@(transitive-input-references
355e53c4 366 'inputs
a6d0b306
EB
367 (map (lambda (l)
368 (assoc l (inputs)))
369 '("perl-authen-sasl"
370 "perl-net-smtp-ssl"
371 "perl-io-socket-ssl")))))))
3bec8a01
RW
372
373 ;; Tell 'gitweb.cgi' where perl modules are.
374 (wrap-program (string-append out "/share/gitweb/gitweb.cgi")
375 `("PERL5LIB" ":" prefix
376 ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
377 (list
378 ,@(transitive-input-references
379 'inputs
380 (map (lambda (l)
381 (assoc l (inputs)))
382 '("perl-cgi")))))))
58c18069 383
23c0e743
LC
384 ;; Tell 'git-submodule' where Perl is.
385 (wrap-program git-sm
386 `("PATH" ":" prefix
387 (,(string-append (assoc-ref inputs "perl")
ecb67a18
MW
388 "/bin"))))
389
390 #t)))
d1cada04
LF
391 (add-after 'split 'install-man-pages
392 (lambda* (#:key inputs outputs #:allow-other-keys)
393 (let* ((out (assoc-ref outputs "out"))
394 (man (string-append out "/share/man"))
395 (manpages (assoc-ref inputs "git-manpages")))
396 (mkdir-p man)
397 (with-directory-excursion man
ecb67a18 398 (invoke "tar" "xvf" manpages))))))))
da699774
LC
399
400 (native-search-paths
401 ;; For HTTPS access, Git needs a single-file certificate bundle, specified
402 ;; with $GIT_SSL_CAINFO.
da699774
LC
403 (list (search-path-specification
404 (variable "GIT_SSL_CAINFO")
6d461b21 405 (file-type 'regular)
fcd75bdb 406 (separator #f) ;single entry
82de2655
DC
407 (files '("etc/ssl/certs/ca-certificates.crt")))
408 (search-path-specification
409 (variable "GIT_EXEC_PATH")
e3ff8383 410 (separator #f) ;single entry
82de2655 411 (files '("libexec/git-core")))))
da699774 412
d9ff410f
AE
413 (synopsis "Distributed version control system")
414 (description
415 "Git is a free distributed version control system designed to handle
416everything from small to very large projects with speed and efficiency.")
369387b6 417 (license license:gpl2)
9006f8bc 418 (home-page "https://git-scm.com/")))
d9ff410f 419
086e498b
RW
420(define-public libgit2
421 (package
422 (name "libgit2")
f7156156 423 (version "0.26.6")
086e498b
RW
424 (source (origin
425 (method url-fetch)
426 (uri (string-append "https://github.com/libgit2/libgit2/"
427 "archive/v" version ".tar.gz"))
428 (file-name (string-append name "-" version ".tar.gz"))
429 (sha256
430 (base32
f7156156 431 "0qjn1v5q282v8jih8rqjdqxr5v4n4manr0c8i3nnrf6sxd3xssbn"))
86163a01 432 (patches (search-patches "libgit2-mtime-0.patch"))
53d26163
LC
433
434 ;; Remove bundled software.
6cbee49d
MW
435 (snippet '(begin
436 (delete-file-recursively "deps")
437 #t))
53d26163 438 (modules '((guix build utils)))))
086e498b 439 (build-system cmake-build-system)
8ecba89b 440 (outputs '("out" "debug"))
086e498b 441 (arguments
3d0fbd3c
LF
442 `(#:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection
443 #:phases
086e498b
RW
444 (modify-phases %standard-phases
445 (add-after 'unpack 'fix-hardcoded-paths
446 (lambda _
447 (substitute* "tests/repo/init.c"
448 (("#!/bin/sh") (string-append "#!" (which "sh"))))
449 (substitute* "tests/clar/fs.h"
450 (("/bin/cp") (which "cp"))
451 (("/bin/rm") (which "rm")))
452 #t))
453 ;; Run checks more verbosely.
454 (replace 'check
1bf91970 455 (lambda _ (invoke "./libgit2_clar" "-v" "-Q"))))))
086e498b
RW
456 (inputs
457 `(("libssh2" ,libssh2)
53d26163 458 ("http-parser" ,http-parser)
34cfeca8 459 ("python" ,python-wrapper)))
086e498b
RW
460 (native-inputs
461 `(("pkg-config" ,pkg-config)))
413f71f3
LC
462 (propagated-inputs
463 ;; These two libraries are in 'Requires.private' in libgit2.pc.
464 `(("openssl" ,openssl)
465 ("zlib" ,zlib)))
9bf160a3 466 (home-page "https://libgit2.github.com/")
086e498b
RW
467 (synopsis "Library providing Git core methods")
468 (description
469 "Libgit2 is a portable, pure C implementation of the Git core methods
470provided as a re-entrant linkable library with a solid API, allowing you to
471write native speed custom Git applications in any language with bindings.")
472 ;; GPLv2 with linking exception
369387b6 473 (license license:gpl2)))
086e498b 474
53ff5495
DC
475(define-public git-crypt
476 (package
477 (name "git-crypt")
478 (version "0.5.0")
479 (source (origin
480 (method url-fetch)
481 (uri (string-append "https://github.com/AGWA/git-crypt"
482 "/archive/" version ".tar.gz"))
483 (file-name (string-append name "-" version ".tar.gz"))
484 (sha256
485 (base32
486 "0454fdmgm5f3razkn8n03lfqm5zyzvr4r2528zmlxiwba9518l2i"))))
487 (build-system gnu-build-system)
488 (inputs
489 `(("git" ,git)
490 ("openssl" ,openssl)))
491 (arguments
492 `(#:tests? #f ; No tests.
493 #:phases
494 (modify-phases %standard-phases
495 (delete 'configure)
496 (replace 'build
497 (lambda _
56d63f81 498 (invoke "make")))
53ff5495
DC
499 (replace 'install
500 (lambda* (#:key outputs #:allow-other-keys)
501 (let ((out (assoc-ref outputs "out")))
56d63f81
TGR
502 (invoke "make" "install"
503 (string-append "PREFIX=" out))))))))
53ff5495
DC
504 (home-page "https://www.agwa.name/projects/git-crypt")
505 (synopsis "Transparent encryption of files in a git repository")
506 (description "git-crypt enables transparent encryption and decryption of
79990ce3
TGR
507files in a git repository. Files which you choose to protect are encrypted when
508committed, and decrypted when checked out. git-crypt lets you freely share a
509repository containing a mix of public and private content. git-crypt gracefully
53ff5495 510degrades, so developers without the secret key can still clone and commit to a
79990ce3 511repository with encrypted files. This lets you store your secret material (such
53ff5495
DC
512as keys or passwords) in the same repository as your code, without requiring you
513to lock down your entire repository.")
514 (license license:gpl3+)))
515
ed2b7cb2
AM
516(define-public git-remote-gcrypt
517 (package
518 (name "git-remote-gcrypt")
26cd470d 519 (version "1.0.3")
ed2b7cb2
AM
520 (source (origin
521 (method git-fetch)
522 (uri (git-reference
523 (url "https://git.spwhitton.name/git-remote-gcrypt")
524 (commit version)))
525 (file-name (string-append name "-" version "-checkout"))
526 (sha256
527 (base32
26cd470d 528 "1vay3204729c7wajgn3nxf0s0hzwpdrw14pl6kd8w2ss25gvw2k1"))))
ed2b7cb2
AM
529 (build-system trivial-build-system)
530 (arguments
531 `(#:modules ((guix build utils))
532 #:builder (begin
533 (use-modules (guix build utils))
534 (let* ((source (assoc-ref %build-inputs "source"))
535 (output (assoc-ref %outputs "out"))
536 (bindir (string-append output "/bin")))
537 (install-file (string-append source "/git-remote-gcrypt")
538 bindir)
539 #t))))
540 (home-page "https://spwhitton.name/tech/code/git-remote-gcrypt/")
541 (synopsis "Whole remote repository encryption")
542 (description "git-remote-gcrypt is a Git remote helper to push and pull from
543repositories encrypted with GnuPG. It works with the standard Git transports,
544including repository hosting services like GitLab.
545
546Remote helper programs are invoked by Git to handle network transport. This
547helper handles @code{gcrypt:} URLs that access a remote repository encrypted
548with GPG, using our custom format.
549
550Supported locations are local, @code{rsync://} and @code{sftp://}, where the
551repository is stored as a set of files, or instead any Git URL where gcrypt
552will store the same representation in a Git repository, bridged over arbitrary
553Git transport.
554
555The aim is to provide confidential, authenticated Git storage and
556collaboration using typical untrusted file hosts or services.")
557 (license license:gpl3+)))
558
7ad1fee5
SB
559(define-public cgit
560 (package
561 (name "cgit")
19a3e7f8 562 (version "1.2.1")
7ad1fee5
SB
563 (source (origin
564 (method url-fetch)
565 (uri (string-append
566 "https://git.zx2c4.com/cgit/snapshot/cgit-"
567 version ".tar.xz"))
568 (sha256
569 (base32
19a3e7f8 570 "1gw2j5xc5qdx2hwiwkr8h6kgya7v9d9ff9j32ga1dys0cca7qm1w"))))
7ad1fee5
SB
571 (build-system gnu-build-system)
572 (arguments
573 '(#:tests? #f ; XXX: fail to build the in-source git.
574 #:test-target "test"
575 #:make-flags '("CC=gcc" "SHELL_PATH=sh")
576 #:phases
577 (modify-phases %standard-phases
578 (add-after 'unpack 'unpack-git
579 (lambda* (#:key inputs #:allow-other-keys)
580 ;; Unpack the source of git into the 'git' directory.
0eb21fba 581 (invoke "tar" "--strip-components=1" "-C" "git" "-xf"
19a3e7f8 582 (assoc-ref inputs "git-source"))))
91b21ba9
OP
583 (add-after 'unpack 'patch-absolute-file-names
584 (lambda* (#:key inputs #:allow-other-keys)
585 (define (quoted-file-name input path)
586 (string-append "\"" input path "\""))
587 (substitute* "ui-snapshot.c"
588 (("\"gzip\"")
589 (quoted-file-name (assoc-ref inputs "gzip") "/bin/gzip"))
590 (("\"bzip2\"")
591 (quoted-file-name (assoc-ref inputs "bzip2") "/bin/bzip2"))
592 (("\"xz\"")
593 (quoted-file-name (assoc-ref inputs "xz") "/bin/xz")))
57c5aa7c
CB
594
595 (substitute* "filters/about-formatting.sh"
596 (("$\\(dirname $0\\)") (string-append (assoc-ref outputs "out")
597 "/lib/cgit/filters"))
598 (("\\| tr") (string-append "| " (which "tr"))))
599
600 (substitute* "filters/html-converters/txt2html"
601 (("sed") (which "sed")))
602
603 (substitute* "filters/html-converters/man2html"
604 (("groff") (which "groff")))
605
606 (substitute* "filters/html-converters/rst2html"
607 (("rst2html\\.py") (which "rst2html.py")))
608
91b21ba9 609 #t))
7ad1fee5
SB
610 (delete 'configure) ; no configure script
611 (add-after 'build 'build-man
612 (lambda* (#:key make-flags #:allow-other-keys)
0eb21fba 613 (apply invoke "make" "doc-man" make-flags)))
7ad1fee5
SB
614 (replace 'install
615 (lambda* (#:key make-flags outputs #:allow-other-keys)
616 (let ((out (assoc-ref outputs "out")))
0eb21fba
TGR
617 (apply invoke
618 "make" "install" "install-man"
619 (string-append "prefix=" out)
620 (string-append "CGIT_SCRIPT_PATH=" out "/share/cgit")
621 make-flags)
622 ;; Move the platform-dependent 'cgit.cgi' into lib to get it
623 ;; stripped.
624 (rename-file (string-append out "/share/cgit/cgit.cgi")
625 (string-append out "/lib/cgit/cgit.cgi"))
626 #t)))
57c5aa7c
CB
627 (add-after 'install 'wrap-python-scripts
628 (lambda* (#:key outputs #:allow-other-keys)
629 (for-each
630 (lambda (file)
631 (wrap-program (string-append (assoc-ref outputs "out")
632 "/lib/cgit/filters/" file)
633 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
634 '("syntax-highlighting.py"
635 "html-converters/md2html"))
636 #t)))))
7ad1fee5
SB
637 (native-inputs
638 ;; For building manpage.
91b21ba9
OP
639 `(("asciidoc" ,asciidoc)
640 ("gzip" ,gzip)
641 ("bzip2" ,bzip2)
642 ("xz" ,xz)))
7ad1fee5 643 (inputs
19a3e7f8 644 `(;; Building cgit requires a Git source tree.
5d9c28f1
LF
645 ("git-source"
646 ,(origin
647 (method url-fetch)
648 ;; XXX CGit is currently incompatible with Git > 2.18.
649 (uri "mirror://kernel.org/software/scm/git/git-2.18.0.tar.xz")
650 (sha256
651 (base32
652 "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b"))))
7ad1fee5 653 ("openssl" ,openssl)
57c5aa7c
CB
654 ("groff" ,groff)
655 ("python" ,python)
656 ("python-docutils" ,python-docutils)
657 ("python-markdown" ,python-markdown)
658 ("python-pygments" ,python-pygments)
7ad1fee5
SB
659 ("zlib" ,zlib)))
660 (home-page "https://git.zx2c4.com/cgit/")
661 (synopsis "Web frontend for git repositories")
662 (description
663 "CGit is an attempt to create a fast web interface for the Git SCM, using
664a built-in cache to decrease server I/O pressure.")
369387b6 665 (license license:gpl2)))
7ad1fee5 666
65101a25
OP
667(define-public python-ghp-import
668 (package
669 (name "python-ghp-import")
670 (version "0.5.5")
671 (source
672 (origin
673 (method url-fetch)
674 (uri (string-append
675 "https://github.com/davisp/ghp-import/archive/"
676 version ".tar.gz"))
677 (file-name (string-append name "-" version ".tar.gz"))
678 (sha256
679 (base32
680 "0x887v690xsac2hzjkpbvp3a6crh3m08mqbk3nb4xwc9dnk869q7"))))
681 (build-system python-build-system)
682 (arguments
683 `(#:phases (modify-phases %standard-phases
684 (add-after 'install 'install-documentation
685 (lambda* (#:key outputs #:allow-other-keys)
686 (let* ((out (assoc-ref outputs "out"))
687 (doc (string-append out "/share/doc"))
688 (licenses (string-append out "/share/licenses")))
689 (install-file "README.md" doc)
690 (install-file "LICENSE" licenses)))))))
691 (home-page "https://github.com/davisp/ghp-import")
692 (synopsis "Copy directory to the gh-pages branch")
693 (description "Script that copies a directory to the gh-pages branch (by
694default) of the repository.")
695
696 ;; See <https://bugs.gnu.org/27913>.
697 (license (license:non-copyleft
698 "https://raw.githubusercontent.com/davisp/ghp-import/master/LICENSE"
699 "Tumbolia Public License"))))
700
701(define-public python2-ghp-import
702 (package-with-python2
703 (strip-python2-variant python-ghp-import)))
704
ea4be20a
MB
705(define-public python-gitdb
706 (package
707 (name "python-gitdb")
708 (version "2.0.3")
709 (source (origin
710 (method url-fetch)
711 (uri (pypi-uri "gitdb2" version))
712 (sha256
713 (base32
714 "02azg62mr99b7cllyjrly77np3vw32y8nrxpa2xjapiyaga2j3mn"))))
715 (build-system python-build-system)
716 (arguments
717 `(#:phases (modify-phases %standard-phases
718 (add-before 'check 'create-test-repository
719 (lambda _
720 (mkdir "/tmp/testrepo")
721 ;; Some tests require a git repository, so create one.
722 (with-directory-excursion "/tmp/testrepo"
723 (do ((filecount 1 (1+ filecount)))
724 ((> filecount 1000))
725 (call-with-output-file (string-append
726 "file" (number->string filecount))
727 (lambda (port)
728 (format port "~a" filecount))))
729 (and
730 (invoke "git" "init")
731 (invoke "git" "config" "user.name" "Total Git")
732 (invoke "git" "config" "user.email" "git@localhost")
733 (invoke "git" "add" "-A")
734 (invoke "git" "commit" "-q" "-m" "dummy commit")))
735
736 ;; The repository checkout must be a "bare" clone.
737 (invoke "git" "clone" "--bare" "/tmp/testrepo"
738 "/tmp/testrepo.git")))
739 (replace 'check
740 (lambda _
741 (setenv "GITDB_TEST_GIT_REPO_BASE" "/tmp/testrepo.git")
742 ;; Skip tests that must be run from the gitdb repository.
743 (setenv "TRAVIS" "1")
744 (invoke "nosetests" "-v"))))))
745 (propagated-inputs
746 `(("python-smmap2" ,python-smmap2)))
747 (native-inputs
748 `(("git" ,git)
749 ("python-nose" ,python-nose)))
750 (home-page "https://github.com/gitpython-developers/gitdb")
751 (synopsis "Python implementation of the Git object database")
752 (description
753 "GitDB allows you to access @dfn{bare} Git repositories for reading and
754writing. It aims at allowing full access to loose objects as well as packs
755with performance and scalability in mind. It operates exclusively on streams,
756allowing to handle large objects with a small memory footprint.")
757 (license license:bsd-3)))
758
759(define-public python2-gitdb
760 (package-with-python2 python-gitdb))
761
8e617720
MB
762(define-public python-gitpython
763 (package
764 (name "python-gitpython")
93d50619 765 (version "2.1.11")
8e617720
MB
766 (source (origin
767 (method url-fetch)
768 (uri (pypi-uri "GitPython" version))
769 (sha256
770 (base32
93d50619 771 "1a357c28dnhgvq3saia7v29r71ynp48l2qp5xsmnc4vgzmdxqdw2"))))
8e617720
MB
772 (build-system python-build-system)
773 (arguments
774 `(#:tests? #f ;XXX: Tests can only be run within the GitPython repository.
775 #:phases (modify-phases %standard-phases
776 (add-after 'unpack 'embed-git-reference
777 (lambda* (#:key inputs #:allow-other-keys)
778 (substitute* "git/cmd.py"
779 (("git_exec_name = \"git\"")
780 (string-append "git_exec_name = \""
781 (assoc-ref inputs "git")
782 "/bin/git\"")))
783 #t)))))
784 (inputs
785 `(("git" ,git)))
786 (propagated-inputs
787 `(("python-gitdb" ,python-gitdb)))
788 (native-inputs
789 `(("python-ddt" ,python-ddt)
790 ("python-nose" ,python-nose)))
791 (home-page "https://github.com/gitpython-developers/GitPython")
792 (synopsis "Python library for interacting with Git repositories")
793 (description
794 "GitPython is a python library used to interact with Git repositories,
795high-level like git-porcelain, or low-level like git-plumbing.
796
797It provides abstractions of Git objects for easy access of repository data,
798and additionally allows you to access the Git repository more directly using
799either a pure Python implementation, or the faster, but more resource intensive
800@command{git} command implementation.")
801 (license license:bsd-3)))
802
803(define-public python2-gitpython
804 (package-with-python2 python-gitpython))
805
c7810bd1
EB
806(define-public shflags
807 (package
808 (name "shflags")
453c0026 809 (version "1.2.3")
c7810bd1
EB
810 (source (origin
811 (method url-fetch)
b65195c2
EF
812 (uri (string-append "https://github.com/kward/shflags/archive/v"
813 version ".tar.gz"))
20e73f5b 814 (file-name (string-append name "-" version ".tar.gz"))
c7810bd1
EB
815 (sha256
816 (base32
453c0026 817 "1h9xfrwwdhzflipfwdcgcc3y7zapdslnyk1rg5y8jm7k144rfrs4"))))
dcb06ac9 818 (build-system gnu-build-system)
c7810bd1
EB
819 (native-inputs `(("tar" ,tar)
820 ("gzip" ,gzip)))
821 (arguments
dcb06ac9
TGR
822 `(#:tests? #f ; no tests
823 #:phases
824 (modify-phases %standard-phases
825 (delete 'configure) ; nothing to configure
826 (delete 'build) ; nothing to build
827 (replace 'install
828 (lambda* (#:key outputs #:allow-other-keys)
829 (let* ((out (assoc-ref outputs "out"))
830 (src (string-append out "/src")))
453c0026 831 (install-file "shflags" src)
dcb06ac9 832 #t))))))
b65195c2 833 (home-page "https://github.com/kward/shflags")
c7810bd1
EB
834 (synopsis "Command-line flags library for shell scripts")
835 (description
836 "Shell Flags (shFlags) is a library written to greatly simplify the
837handling of command-line flags in Bourne based Unix shell scripts (bash, dash,
838ksh, sh, zsh). Most shell scripts use getopt for flags processing, but the
839different versions of getopt on various OSes make writing portable shell
840scripts difficult. shFlags instead provides an API that doesn't change across
841shell and OS versions so the script writer can be confident that the script
842will work.")
369387b6 843 (license license:lgpl2.1)))
c7810bd1
EB
844
845(define-public git-flow
846 (package
847 (name "git-flow")
848 ;; This version has not be officially released yet, so we build it
849 ;; directly from the git repository.
850 (version "0.4.2-pre")
851 (source (origin
852 (method git-fetch)
853 (uri (git-reference
854 (url "https://github.com/nvie/gitflow/")
698bd297 855 (commit "15aab26490facf285acef56cb5d61025eacb3a69")))
d36df187 856 (file-name (git-file-name name version))
c7810bd1
EB
857 (sha256
858 (base32
859 "01fs97q76fdfnvmrh2cyjhywcs3pykf1dg58sy0frflnsdzs6prx"))))
860 (build-system gnu-build-system)
861 (inputs `(("shflags" ,shflags)))
862 (arguments
863 '(#:tests? #f ; no tests
864 #:make-flags (list (string-append "prefix="
865 (assoc-ref %outputs "out")))
aac42d78
EF
866 #:phases
867 (modify-phases %standard-phases
868 (add-after 'unpack 'reset-shFlags-link
869 (lambda* (#:key inputs #:allow-other-keys)
870 ;; The link points to a file in the shFlags submodule.
871 ;; Redirect it to point to our system shFlags.
872 (let ((shflags (assoc-ref inputs "shflags")))
873 (begin
874 (delete-file "gitflow-shFlags")
875 (symlink (string-append shflags "/src/shflags")
876 "gitflow-shFlags")))))
877 (delete 'configure)
878 (delete 'build))))
c7810bd1
EB
879 (home-page "http://nvie.com/posts/a-successful-git-branching-model/")
880 (synopsis "Git extensions for Vincent Driessen's branching model")
881 (description
882 "Vincent Driessen's branching model is a git branching and release
883management strategy that helps developers keep track of features, hotfixes,
884and releases in bigger software projects. The git-flow library of git
885subcommands helps automate some parts of the flow to make working with it a
886lot easier.")
369387b6 887 (license license:bsd-2)))
c7810bd1 888
205441eb
SR
889(define-public stgit
890 (package
891 (name "stgit")
892 (version "0.18")
893 (source (origin
894 (method url-fetch)
895 (uri (string-append "https://github.com/ctmarinas/stgit/archive/v"
896 version ".tar.gz"))
897 (file-name (string-append name "-" version ".tar.gz"))
898 (sha256
899 (base32
900 "19fk6vw3pgp2a98wpd4j3kyiyll5dy9bi4921wq1mrky0l53mj00"))))
901 (build-system python-build-system)
902 (inputs
903 `(("git" ,git)))
904 (arguments
905 `(#:python ,python-2
906 #:phases
907 (modify-phases %standard-phases
908 (replace 'check
909 (lambda _
910 ;; two tests will fail -> disable them. TODO: fix the failing tests
911 (delete-file "t/t3300-edit.sh")
912 (delete-file "t/t7504-commit-msg-hook.sh")
a83d0c57 913 (invoke "make" "test"))))))
205441eb
SR
914 (home-page "http://procode.org/stgit/")
915 (synopsis "Stacked Git")
916 (description
917 "StGit is a command-line application that provides functionality similar
918to Quilt (i.e., pushing/popping patches to/from a stack), but using Git
919instead of @command{diff} and @command{patch}. StGit stores its patches in a
920Git repository as normal Git commits, and provides a number of commands to
921manipulate them in various ways.")
922 (license license:gpl2)))
923
80d9941c
SR
924(define-public vcsh
925 (package
926 (name "vcsh")
927 (version "1.20151229")
928 (source (origin
929 (method url-fetch)
930 (uri (string-append "https://github.com/RichiH/vcsh/archive/v"
931 version ".tar.gz"))
932 (file-name (string-append name "-" version ".tar.gz"))
933 (sha256
934 (base32
935 "1ym3swkh738c3vciffvlr96vqzhwmzkb8ajqzap8f0j9n039a1mf"))))
936 (build-system gnu-build-system)
937 (native-inputs
938 `(("which" ,which)))
939 (inputs
940 `(("git" ,git)
941 ("perl" ,perl)
942 ("perl-test-harness" ,perl-test-harness)
943 ("perl-shell-command" ,perl-shell-command)
944 ("perl-test-most" ,perl-test-most)))
945 (arguments
946 '(#:phases (modify-phases %standard-phases
947 (delete 'configure)
948 (delete 'build))
949 #:make-flags (list (string-append "PREFIX="
950 (assoc-ref %outputs "out")))
951 #:test-target "test"))
952 (home-page "https://github.com/RichiH/vcsh")
953 (synopsis "Version control system for @code{$HOME}")
954 (description
955 "vcsh version-controls configuration files in several Git repositories,
956all in one single directory. They all maintain their working trees without
957clobbering each other or interfering otherwise. By default, all Git
958repositories maintained via vcsh store the actual files in @code{$HOME},
959though this can be overridden.")
960 (license license:gpl2+)))
961
a63094a7 962(define-public git-test-sequence
698bd297 963 (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76"))
a63094a7
EB
964 (package
965 (name "git-test-sequence")
698bd297 966 (version (string-append "20140312." (string-take commit 7)))
a63094a7
EB
967 (source (origin
968 (method git-fetch)
969 (uri (git-reference
970 ;; There are many other scripts in this directory; we
971 ;; are interested in just one for this package.
972 (url "https://github.com/dustin/bindir")
973 (commit commit)))
348f8c85 974 (file-name (git-file-name name version))
a63094a7
EB
975 (sha256
976 (base32
977 "1dcq0y16yznbv4k9h8gg90kv1gkn8r8dbvl4m2rpfd7q5nqhn617"))))
978 (build-system trivial-build-system)
979 (arguments
980 `(#:modules ((guix build utils))
981 #:builder (begin
982 (use-modules (guix build utils))
983 (let* ((source (assoc-ref %build-inputs "source"))
984 (output (assoc-ref %outputs "out"))
985 (bindir (string-append output "/bin"))
986 (script "git-test-sequence"))
96c46210
LC
987 (install-file (string-append source "/" script)
988 bindir)
989 #t))))
a63094a7
EB
990 (home-page "http://dustin.sallings.org/2010/03/28/git-test-sequence.html")
991 (synopsis "Run a command over a sequence of commits")
992 (description
993 "git-test-sequence is similar to an automated git bisect except it’s
994linear. It will test every change between two points in the DAG. It will
995also walk each side of a merge and test those changes individually.")
369387b6 996 (license (license:x11-style "file://LICENSE")))))
a63094a7 997
378b01dc
DT
998(define-public gitolite
999 (package
1000 (name "gitolite")
7730b717 1001 (version "3.6.7")
378b01dc
DT
1002 (source (origin
1003 (method url-fetch)
1004 (uri (string-append
1005 "https://github.com/sitaramc/gitolite/archive/v"
1006 version ".tar.gz"))
1007 (file-name (string-append name "-" version ".tar.gz"))
378b01dc
DT
1008 (sha256
1009 (base32
7730b717 1010 "1idxipg0df80bhjcxgwxs3lllqnkvhwpinmfv1xvg1l98fxiapgp"))))
378b01dc
DT
1011 (build-system gnu-build-system)
1012 (arguments
1013 '(#:tests? #f ; no tests
1014 #:phases (modify-phases %standard-phases
1015 (delete 'configure)
1016 (delete 'build)
1017 (add-before 'install 'patch-scripts
1018 (lambda* (#:key inputs #:allow-other-keys)
1019 (let ((perl (string-append (assoc-ref inputs "perl")
1020 "/bin/perl")))
1021 ;; This seems to take care of every shell script that
1022 ;; invokes Perl.
1023 (substitute* (find-files "." ".*")
1024 ((" perl -")
db88b5a8
CL
1025 (string-append " " perl " -")))
1026
1027 ;; Avoid references to the store in authorized_keys.
1028 ;; This works because gitolite-shell is in the PATH.
1029 (substitute* "src/triggers/post-compile/ssh-authkeys"
1030 (("\\$glshell \\$user")
92793c7b
TGR
1031 "gitolite-shell $user"))
1032 #t)))
378b01dc
DT
1033 (replace 'install
1034 (lambda* (#:key outputs #:allow-other-keys)
1035 (let* ((output (assoc-ref outputs "out"))
1036 (sharedir (string-append output "/share/gitolite"))
1037 (bindir (string-append output "/bin")))
1038 (mkdir-p sharedir)
1039 (mkdir-p bindir)
92793c7b 1040 (invoke "./install" "-to" sharedir)
378b01dc
DT
1041 ;; Create symlinks for executable scripts in /bin.
1042 (for-each (lambda (script)
1043 (symlink (string-append sharedir "/" script)
1044 (string-append bindir "/" script)))
1045 '("gitolite" "gitolite-shell"))
1046 #t))))))
1047 (inputs
1048 `(("perl" ,perl)))
1049 ;; git and openssh are propagated because trying to patch the source via
1050 ;; regexp matching is too brittle and prone to false positives.
1051 (propagated-inputs
1052 `(("git" ,git)
1053 ("openssh" ,openssh)))
1054 (home-page "http://gitolite.com")
1055 (synopsis "Git access control layer")
1056 (description
1057 "Gitolite is an access control layer on top of Git, providing fine access
1058control to Git repositories.")
369387b6 1059 (license license:gpl2)))
378b01dc 1060
5151c2e1
AB
1061(define-public mercurial
1062 (package
1063 (name "mercurial")
38ad27da 1064 (version "4.4.1")
5151c2e1
AB
1065 (source (origin
1066 (method url-fetch)
5575917d
EF
1067 (uri (string-append "https://www.mercurial-scm.org/"
1068 "release/mercurial-" version ".tar.gz"))
5151c2e1
AB
1069 (sha256
1070 (base32
38ad27da 1071 "0ik2ypzxjr6vpcghxvn39a73gw52629n7vwak04gnbycsq95aalg"))))
5151c2e1
AB
1072 (build-system python-build-system)
1073 (arguments
1074 `(;; Restrict to Python 2, as Python 3 would require
1075 ;; the argument --c2to3.
1076 #:python ,python-2
1077 ;; FIXME: Disabled tests because they require the nose unit
1078 ;; testing framework: https://nose.readthedocs.org/en/latest/ .
1079 #:tests? #f))
5575917d 1080 (home-page "https://www.mercurial-scm.org/")
5151c2e1
AB
1081 (synopsis "Decentralized version control system")
1082 (description
1083 "Mercurial is a free, distributed source control management tool.
1084It efficiently handles projects of any size
1085and offers an easy and intuitive interface.")
369387b6 1086 (license license:gpl2+)))
5151c2e1 1087
fc1e4516
AE
1088(define-public neon
1089 (package
1090 (name "neon")
51eb4df6 1091 (version "0.30.2")
fc1e4516
AE
1092 (source (origin
1093 (method url-fetch)
1094 (uri (string-append "http://www.webdav.org/neon/neon-"
1095 version ".tar.gz"))
1096 (sha256
1097 (base32
51eb4df6 1098 "1jpvczcx658vimqm7c8my2q41fnmjaf1j03g7bsli6rjxk6xh2yv"))))
fc1e4516
AE
1099 (build-system gnu-build-system)
1100 (native-inputs
1101 `(("perl" ,perl)
1102 ("pkg-config" ,pkg-config)))
1103 (inputs
1104 `(("libxml2" ,libxml2)
1105 ("openssl" ,openssl)
1106 ("zlib" ,zlib)))
1107 (arguments
1108 `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
1109 ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
1110 #:tests? #f
1111 #:configure-flags '("--enable-shared"
1112 ;; requires libgnutils-config, deprecated
1113 ;; in gnutls 2.8.
1114 ; "--with-ssl=gnutls")))
1115 "--with-ssl=openssl")))
1116 (home-page "http://www.webdav.org/neon/")
1117 (synopsis "HTTP and WebDAV client library")
35ad6b2e
TGR
1118 (description
1119 "Neon is an HTTP and WebDAV client library, with a C interface and the
1120following features:
1121@enumerate
1122@item High-level wrappers for common HTTP and WebDAV operations (GET, MOVE,
1123 DELETE, etc.);
1124@item low-level interface to the HTTP request/response engine, allowing the use
1125 of arbitrary HTTP methods, headers, etc.;
1126@item authentication support including Basic and Digest support, along with
1127 GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32;
1128@item SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
1129 verifying server certificates, handling client certificates, and examining
1130 certificate properties, smartcard-based client certificates are also
1131 supported via a PKCS#11 wrapper interface;
1132@item abstract interface to parsing XML using libxml2 or expat, and wrappers for
1133 simplifying handling XML HTTP response bodies;
1134@item WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
1135 property manipulation.
1136@end enumerate\n")
369387b6 1137 (license license:gpl2+))) ; for documentation and tests; source under lgpl2.0+
fc1e4516 1138
cf3fe3b0
CR
1139(define-public subversion
1140 (package
1141 (name "subversion")
9ecfe08e 1142 (version "1.10.2")
cf3fe3b0
CR
1143 (source (origin
1144 (method url-fetch)
5993f7c4
LF
1145 (uri
1146 (list
1147 (string-append "https://archive.apache.org/dist/subversion/"
1148 "subversion-" version ".tar.bz2")
1149 (string-append "https://www-eu.apache.org/dist/subversion/"
1150 "subversion-" version ".tar.bz2")))
cf3fe3b0
CR
1151 (sha256
1152 (base32
9ecfe08e 1153 "127dysfc31q4dhbbxaznh9kqixy9jd44kgwji2gdwj6rb2lf6dav"))))
cf3fe3b0 1154 (build-system gnu-build-system)
8b2fe785 1155 (arguments
7c5a1454
EF
1156 '(#:phases
1157 (modify-phases %standard-phases
1158 (add-after 'configure 'patch-libtool-wrapper-ls
1159 (lambda* (#:key inputs #:allow-other-keys)
1160 ;; This substitution allows tests svnauthz_tests and svnlook_tests
1161 ;; to pass. These tests execute svnauthz and svnlook through
1162 ;; their libtool wrapper scripts from svn hooks, whose empty
1163 ;; environments cause "ls: command not found" errors. It would be
1164 ;; nice if this fix ultimately made its way into libtool.
1165 (let ((coreutils (assoc-ref inputs "coreutils")))
1166 (substitute* "libtool"
491f2918
EF
1167 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls")))
1168 #t)))
71653653
LF
1169 (add-before 'build 'patch-test-sh
1170 (lambda _
1171 (substitute* "subversion/tests/libsvn_repos/repos-test.c"
1172 (("#!/bin/sh") (string-append "#!" (which "sh"))))
1173 #t))
7c5a1454
EF
1174 (add-after 'install 'install-perl-bindings
1175 (lambda* (#:key outputs #:allow-other-keys)
1176 ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
1177 (let ((out (assoc-ref outputs "out")))
6d0f2612
MW
1178 (invoke "make" "swig-pl-lib")
1179 ;; FIXME: Test failures.
1180 ;; (invoke "make" "check-swig-pl")
1181 (invoke "make" "install-swig-pl-lib")
7c5a1454 1182
6d0f2612
MW
1183 ;; Set the right installation prefix.
1184 (with-directory-excursion
1185 "subversion/bindings/swig/perl/native"
1186 (invoke "perl" "Makefile.PL"
1187 "NO_PERLLOCAL=1"
1188 (string-append "PREFIX=" out))
1189 (invoke "make" "install"
1190 (string-append "OTHERLDFLAGS="
1191 "-Wl,-rpath="
1192 out "/lib")))))))))
8b2fe785 1193 (native-inputs
98b79d36
AE
1194 `(("pkg-config" ,pkg-config)
1195 ;; For the Perl bindings.
1196 ("swig" ,swig)))
cf3fe3b0 1197 (inputs
2b24faa2
AE
1198 `(("apr" ,apr)
1199 ("apr-util" ,apr-util)
71653653 1200 ("lz4" ,lz4)
46138f3e 1201 ("serf" ,serf)
cf3fe3b0 1202 ("perl" ,perl)
71653653 1203 ("python" ,python-wrapper)
cf3fe3b0 1204 ("sqlite" ,sqlite)
71653653 1205 ("utf8proc" ,utf8proc)
cf3fe3b0 1206 ("zlib" ,zlib)))
ce84c924 1207 (home-page "https://subversion.apache.org/")
35b9e423 1208 (synopsis "Revision control system")
cf3fe3b0 1209 (description
749b90a5
LC
1210 "Subversion exists to be universally recognized and adopted as a
1211centralized version control system characterized by its
cf3fe3b0
CR
1212reliability as a safe haven for valuable data; the simplicity of its model and
1213usage; and its ability to support the needs of a wide variety of users and
1214projects, from individuals to large-scale enterprise operations.")
369387b6 1215 (license license:asl2.0)))
cf3fe3b0 1216
1b1c335f
LC
1217(define-public rcs
1218 (package
1219 (name "rcs")
73ebc66f 1220 (version "5.9.4")
1b1c335f
LC
1221 (source (origin
1222 (method url-fetch)
1223 (uri (string-append "mirror://gnu/rcs/rcs-"
1224 version ".tar.xz"))
1225 (sha256
1226 (base32
096f0080
ST
1227 "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86"))
1228 (patches (search-patches "rcs-5.9.4-noreturn.patch"))))
1b1c335f 1229 (build-system gnu-build-system)
740c24df 1230 (native-inputs `(("ed" ,ed)))
6fd52309 1231 (home-page "https://www.gnu.org/software/rcs/")
1b1c335f
LC
1232 (synopsis "Per-file local revision control system")
1233 (description
79c311b8
LC
1234 "RCS is the original Revision Control System. It works on a
1235file-by-file basis, in contrast to subsequent version control systems such as
1236CVS, Subversion, and Git. This can make it suitable for system
1237administration files, for example, which are often inherently local to one
1238machine.")
369387b6 1239 (license license:gpl3+)))
1972fed4
LC
1240
1241(define-public cvs
1242 (package
1243 (name "cvs")
1244 (version "1.12.13")
1245 (source (origin
1246 (method url-fetch)
1247 (uri (string-append
9006f8bc 1248 "https://ftp.gnu.org/non-gnu/cvs/source/feature/"
1972fed4 1249 version "/cvs-" version ".tar.bz2"))
15428168 1250 (patches (search-patches "cvs-2017-12836.patch"))
1972fed4
LC
1251 (sha256
1252 (base32
1253 "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq"))))
1254 (build-system gnu-build-system)
1255 (arguments
1256 ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
7fbbd3e7
EF
1257 '(#:tests? #f
1258 #:configure-flags (list "--with-external-zlib")))
1972fed4
LC
1259 (inputs `(("zlib" ,zlib)
1260 ("nano" ,nano))) ; the default editor
1261 (home-page "http://cvs.nongnu.org")
1262 (synopsis "Historical centralized version control system")
1263 (description
1264 "CVS is a version control system, an important component of Source
1265Configuration Management (SCM). Using it, you can record the history of
1266sources files, and documents. It fills a similar role to the free software
1267RCS, PRCS, and Aegis packages.")
369387b6 1268 (license license:gpl1+)))
a4572a17 1269
59ef2030
ML
1270(define-public cvs-fast-export
1271 (package
1272 (name "cvs-fast-export")
6ae35fea 1273 (version "1.44")
59ef2030
ML
1274 (source (origin
1275 (method url-fetch)
1276 (uri (string-append "http://www.catb.org/~esr/"
1277 name "/" name "-" version ".tar.gz"))
1278 (sha256
1279 (base32
6ae35fea 1280 "1l7hlys4vw4zk4ikdjiig5vzgv5dv48mbm8bdqgvgkyyxb2j0dm0"))))
59ef2030
ML
1281 (build-system gnu-build-system)
1282 (arguments
d2885c83
EF
1283 '(#:phases
1284 (modify-phases %standard-phases
1285 (delete 'configure)
6ae35fea
TGR
1286 (add-before 'check 'fix-setpython-PATH
1287 (lambda _
1288 ;; The Makefile does try to add the current working directory to
1289 ;; $PATH, but this fails for some reason in 1.44. Hack around it.
1290 (substitute* "tests/Makefile"
1291 (("setpython" command)
1292 (string-append "./" command)))
1293 #t))
d2885c83
EF
1294 (add-after 'unpack 'remove-optimizations
1295 (lambda _
1296 ;; Don't optimize for a specific processor architecture.
1297 (substitute* "Makefile"
1298 (("CFLAGS \\+= -march=native") ""))
d2885c83
EF
1299 #t)))
1300 #:parallel-build? #f ; parallel a2x commands fail spectacularly
59ef2030
ML
1301 #:make-flags
1302 (list "CC=gcc" (string-append "prefix?=" (assoc-ref %outputs "out")))))
1303 (inputs `(("git" ,git)))
1304 (native-inputs `(("asciidoc" ,asciidoc)
59ef2030
ML
1305 ;; These are needed for the tests.
1306 ("cvs" ,cvs)
1307 ("python" ,python-2)
1308 ("rcs" ,rcs)))
1309 (home-page "http://www.catb.org/esr/cvs-fast-export/")
1310 (synopsis "Export an RCS or CVS history as a fast-import stream")
1311 (description "This program analyzes a collection of RCS files in a CVS
1312repository (or outside of one) and, when possible, emits an equivalent history
1313in the form of a fast-import stream. Not all possible histories can be
1314rendered this way; the program tries to emit useful warnings when it can't.
1315
1316The program can also produce a visualization of the resulting commit directed
1317acyclic graph (DAG) in the input format of @uref{http://www.graphviz.org,
1318Graphviz}. The package also includes @command{cvssync}, a tool for mirroring
1319masters from remote CVS hosts.")
369387b6 1320 (license license:gpl2+)))
59ef2030 1321
a4572a17
LC
1322(define-public vc-dwim
1323 (package
1324 (name "vc-dwim")
f968f1a7 1325 (version "1.8")
a4572a17
LC
1326 (source (origin
1327 (method url-fetch)
1328 (uri (string-append "mirror://gnu/vc-dwim/vc-dwim-"
1329 version ".tar.xz"))
1330 (sha256
1331 (base32
f968f1a7 1332 "0d5sqafc40l878m8wjr35jxmalj4kam1m6ph60v08ng4ml5g7931"))))
a4572a17
LC
1333 (build-system gnu-build-system)
1334 (inputs `(("perl" ,perl)
6aaf3899 1335 ("inetutils" ,inetutils))) ; for `hostname', used in the tests
b8fc3622 1336 (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags'
f968f1a7 1337 (home-page "https://www.gnu.org/software/vc-dwim/")
a4572a17
LC
1338 (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
1339 (description
a22dc0c4
LC
1340 "The vc-dwim package contains two tools, \"vc-dwim\" and \"vc-chlog\".
1341vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and
1342using version control at the same time, for example by printing a reminder
1343when a file change has been described in the ChangeLog but the file has not
79c311b8 1344been added to the VC. vc-chlog scans changed files and generates
a22dc0c4 1345standards-compliant ChangeLog entries based on the changes that it detects.")
369387b6 1346 (license license:gpl3+)))
83a39ed7
LC
1347
1348(define-public diffstat
1349 (package
1350 (name "diffstat")
22a01411 1351 (version "1.62")
83a39ed7
LC
1352 (source (origin
1353 (method url-fetch)
86bc52f9
TGR
1354 (uri
1355 (list
1356 (string-append "ftp://invisible-island.net/diffstat/"
1357 name "-" version ".tgz")
1358 (string-append "http://invisible-mirror.net/archives/diffstat/"
1359 name "-" version ".tgz")))
83a39ed7
LC
1360 (sha256
1361 (base32
22a01411 1362 "07sr482y6iw7n7ddkba0w51kbjc99snvnijkn5ba2xzd8hv1h2bz"))))
83a39ed7 1363 (build-system gnu-build-system)
432fd269 1364 (home-page "https://invisible-island.net/diffstat/")
0aea268a 1365 (synopsis "Make histograms from the output of @command{diff}")
83a39ed7 1366 (description
0aea268a
TGR
1367 "Diffstat reads the output of @command{diff} and displays a histogram of
1368the insertions, deletions, and modifications per file. It is useful for
1369reviewing large, complex patch files.")
369387b6 1370 (license (license:x11-style "file://COPYING"))))
25f76ef0 1371
25f76ef0
JD
1372(define-public cssc
1373 (package
1374 (name "cssc")
32fd2600 1375 (version "1.4.0")
25f76ef0
JD
1376 (source (origin
1377 (method url-fetch)
1378 (uri (string-append "mirror://gnu/" name "/CSSC-"
1379 version ".tar.gz"))
1380 (sha256
1381 (base32
32fd2600 1382 "15191dh8hr46cvssmv4v52gymiiyk6ca9j1bfimlqakcqab6y51h"))))
25f76ef0
JD
1383 (build-system gnu-build-system)
1384 (arguments
bf3c57ff
EF
1385 `(#:phases
1386 (modify-phases %standard-phases
1387 (add-before 'check 'precheck
1388 (lambda _
1389 (begin
1390 (substitute* "tests/common/test-common"
1391 (("/bin/pwd") (which "pwd")))
1392
1393 (substitute* "tests/prt/all-512.sh"
1394 (("/bin/sh") (which "sh")))
1395
1396 ;; XXX: This test has no hope of passing until there is a "nogroup"
1397 ;; entry (or at least some group to which the guix builder does
1398 ;; not belong) in the /etc/group file of the build environment.
1399 ;; Currently we do not have such a group. Disable this test for now.
1400 (substitute* "tests/Makefile"
1401 (("test-delta ") ""))))))))
25f76ef0
JD
1402 ;; These are needed for the tests
1403 (native-inputs `(("git" ,git)
1404 ("cvs" ,cvs)))
6fd52309 1405 (home-page "https://www.gnu.org/software/cssc/")
25f76ef0
JD
1406 (synopsis "File-based version control like SCCS")
1407 (description "GNU CSSC provides a replacement for the legacy Unix source
1408code control system SCCS. This allows old code still under that system to be
1409accessed and migrated on modern systems.")
369387b6 1410 (license license:gpl3+)))
0e534e74 1411
e881752c 1412;; This package can unfortunately work only in -TEST mode, since Aegis
0e534e74
JD
1413;; requires that it is installed setuid root.
1414(define-public aegis
1415 (package
1416 (name "aegis")
1417 (version "4.24")
1418 (source (origin
1419 (method url-fetch)
de67e922
LF
1420 (uri (string-append "mirror://sourceforge/aegis/aegis/" version
1421 "/aegis-" version ".tar.gz"))
0e534e74
JD
1422 (sha256
1423 (base32
1424 "18s86ssarfmc4l17gbpzybca29m5wa37cbaimdji8czlcry3mcjl"))
fc1adab1
AK
1425 (patches (search-patches "aegis-perl-tempdir1.patch"
1426 "aegis-perl-tempdir2.patch"
1427 "aegis-test-fixup-1.patch"
1428 "aegis-test-fixup-2.patch"
1429 "aegis-constness-error.patch"))))
0e534e74
JD
1430 (build-system gnu-build-system)
1431 (inputs
1432 `(("e2fsprogs" ,e2fsprogs)
1433 ("curl" ,curl)
0253ab39 1434 ("file" ,file)
0e534e74
JD
1435 ("libxml2" ,libxml2)
1436 ("zlib" ,zlib)
b94a6ca0 1437 ("gettext" ,gettext-minimal)))
0e534e74
JD
1438 (native-inputs
1439 `(("bison" ,bison)
1440 ("groff" ,groff)
1441 ("perl" ,perl)
1442 ;; Various tests require the following:
e881752c 1443 ("cvs" ,cvs)
0e534e74
JD
1444 ("flex" ,flex)
1445 ("cook" ,cook)
1446 ("subversion" ,subversion)
1447 ("rcs" ,rcs)
1448 ("ed" ,ed)))
1449 (arguments
e881752c 1450 `(#:configure-flags (list "--with-no-aegis-configured"
0e534e74
JD
1451 "--sharedstatedir=/var/com/aegis")
1452 #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
e881752c 1453 #:phases
8ef843c7
EF
1454 (modify-phases %standard-phases
1455 (add-before 'configure 'pre-conf
1456 (lambda _
1457 (substitute* (append '("configure"
1458 "etc/check-tar-gz.sh"
1459 "etc/patches.sh"
1460 "etc/test.sh"
1461 "script/aexver.in"
1462 "script/aebisect.in"
1463 "script/aeintegratq.in"
1464 "script/tkaegis.in"
1465 "script/test_funcs.in"
1466 "web/eg_oss_templ.sh"
1467 "web/webiface.html"
1468 "libaegis/getpw_cache.cc")
1469 (find-files "test" "\\.sh"))
1470 (("/bin/sh") (which "sh")))
923e2d24
TGR
1471 (setenv "SH" (which "sh"))
1472 #t))
8ef843c7
EF
1473 (replace 'check
1474 (lambda _
1475 (let ((home (string-append (getcwd) "/my-new-home")))
1476 ;; Some tests need to write to $HOME.
1477 (mkdir home)
1478 (setenv "HOME" home)
1479
923e2d24 1480 ;; This test assumes that flex has been symlinked to "lex".
8ef843c7
EF
1481 (substitute* "test/00/t0011a.sh"
1482 (("type lex") "type flex"))
1483
0b6be05e
TGR
1484 ;; XXX Disable tests that fail, for unknown reasons, ‘for now’.
1485 (for-each
1486 (lambda (test) (substitute* "Makefile"
1487 (((string-append "test/" test "\\.ES ")) "")))
1488 (list "00/t0011a"
1489 "00/t0049a"
1490 "01/t0196a"))
1491
8ef843c7 1492 ;; The author decided to call the check rule "sure".
923e2d24 1493 (invoke "make" "sure")))))))
0e534e74
JD
1494 (home-page "http://aegis.sourceforge.net")
1495 (synopsis "Project change supervisor")
1496 (description "Aegis is a project change supervisor, and performs some of
35b9e423 1497the Software Configuration Management needed in a CASE environment. Aegis
0e534e74
JD
1498provides a framework within which a team of developers may work on many
1499changes to a program independently, and Aegis coordinates integrating these
1500changes back into the master source of the program, with as little disruption
35b9e423 1501as possible. Resolution of contention for source files, a major headache for
0e534e74 1502any project with more than one developer, is one of Aegis's major functions.")
369387b6 1503 (license license:gpl3+)))
2459141e 1504
62063d85
ML
1505(define-public reposurgeon
1506 (package
1507 (name "reposurgeon")
218b94f3 1508 (version "3.43")
62063d85
ML
1509 (source (origin
1510 (method url-fetch)
1511 (uri (string-append "http://www.catb.org/~esr/" name "/"
1512 name "-" version ".tar.xz"))
1513 (sha256
1514 (base32
218b94f3
TGR
1515 "1af0z14wcm4bk5a9ysinbwq2fp3lf5f7i8mvwh7286hr3fnagcaz"))
1516 (patches (search-patches
1517 "reposurgeon-add-missing-docbook-files.patch"))))
62063d85
ML
1518 (build-system gnu-build-system)
1519 (arguments
33ecc7a4
TGR
1520 `(#:make-flags
1521 (list "ECHO=echo"
1522 (string-append "target=" (assoc-ref %outputs "out")))
62063d85
ML
1523 #:phases
1524 (modify-phases %standard-phases
218b94f3
TGR
1525 (add-after 'unpack 'patch-inputs
1526 (lambda* (#:key inputs #:allow-other-keys)
1527 (let ((tzdata (assoc-ref inputs "tzdata")))
1528 (substitute* "reposurgeon"
1529 (("/usr/share/zoneinfo")
1530 (string-append tzdata "/share/zoneinfo")))
33ecc7a4
TGR
1531 (substitute* "test/svn-to-svn"
1532 (("/bin/echo") "echo"))
218b94f3 1533 #t)))
33ecc7a4 1534 (delete 'configure) ; no configure script
62063d85
ML
1535 (add-before 'build 'fix-docbook
1536 (lambda* (#:key inputs #:allow-other-keys)
1537 (substitute* (find-files "." "\\.xml$")
1538 (("docbook/docbookx.dtd")
1539 (string-append (assoc-ref inputs "docbook-xml")
1540 "/xml/dtd/docbook/docbookx.dtd")))
1541 #t))
33ecc7a4
TGR
1542 (add-before 'check 'set-up-test-environment
1543 (lambda* (#:key inputs #:allow-other-keys)
1544 (let ((tzdata (assoc-ref inputs "tzdata")))
1545 (setenv "TZDIR" (string-append tzdata "/share/zoneinfo"))
1546 #t)))
62063d85
ML
1547 (add-after 'install 'install-emacs-data
1548 (lambda* (#:key outputs #:allow-other-keys)
1549 (install-file "reposurgeon-mode.el"
1550 (string-append (assoc-ref outputs "out")
443c432e
TGR
1551 "/share/emacs/site-lisp"))
1552 #t)))))
62063d85 1553 (inputs
218b94f3
TGR
1554 `(("python" ,python-wrapper)
1555 ("tzdata" ,tzdata)))
62063d85 1556 (native-inputs
33ecc7a4
TGR
1557 `( ;; For building documentation.
1558 ("asciidoc" ,asciidoc)
218b94f3 1559 ("docbook-xml" ,docbook-xml)
62063d85
ML
1560 ("docbook-xsl" ,docbook-xsl)
1561 ("libxml2" ,libxml2)
33ecc7a4
TGR
1562 ("xmlto" ,xmlto)
1563
1564 ;; For tests.
1565 ("cvs" ,cvs)
1566 ("git" ,git)
1567 ("mercurial" ,mercurial)
1568 ("subversion" ,subversion)))
62063d85
ML
1569 (home-page "http://www.catb.org/~esr/reposurgeon/")
1570 (synopsis "Edit version-control repository history")
1571 (description "Reposurgeon enables risky operations that version-control
1572systems don't want to let you do, such as editing past comments and metadata
1573and removing commits. It works with any version control system that can
1574export and import Git fast-import streams, including Git, Mercurial, Fossil,
1575Bazaar, CVS, RCS, and Src. It can also read Subversion dump files directly
1576and can thus be used to script production of very high-quality conversions
1577from Subversion to any supported Distributed Version Control System (DVCS).")
1578 ;; Most files are distributed under bsd-2, except 'repocutter' which is
1579 ;; under bsd-3.
369387b6 1580 (license (list license:bsd-2 license:bsd-3))))
62063d85 1581
2459141e
1582(define-public tig
1583 (package
1584 (name "tig")
5416e40f 1585 (version "2.4.1")
2459141e
1586 (source (origin
1587 (method url-fetch)
1588 (uri (string-append
73f71bc9
EF
1589 "https://github.com/jonas/tig/releases/download/tig-"
1590 version "/tig-" version ".tar.gz"))
2459141e
1591 (sha256
1592 (base32
5416e40f 1593 "1f2qhpzbl7f35lsjcnx8lxzskha24m4frczsw78284jp7qcamdmn"))))
2459141e 1594 (build-system gnu-build-system)
2203e4c2
EF
1595 (native-inputs
1596 `(("asciidoc" ,asciidoc)
1597 ("xmlto" ,xmlto)))
2459141e 1598 (inputs
d0e11e8b
EF
1599 `(("ncurses" ,ncurses)
1600 ("readline" ,readline)))
2459141e 1601 (arguments
2203e4c2
EF
1602 `(#:phases
1603 (modify-phases %standard-phases
1604 (add-after 'install 'install-doc
1605 (lambda _
5cacd314 1606 (invoke "make" "install-doc"))))
2203e4c2 1607 #:tests? #f)) ; tests require access to /dev/tty
73f71bc9
EF
1608 ;; #:test-target "test"))
1609 (home-page "https://jonas.github.io/tig/")
2459141e
1610 (synopsis "Ncurses-based text user interface for Git")
1611 (description
1612 "Tig is an ncurses text user interface for Git, primarily intended as
1613a history browser. It can also stage hunks for commit, or colorize the
5416e40f 1614output of the @code{git} command.")
369387b6 1615 (license license:gpl2+)))
df7393b9
LC
1616
1617(define-public findnewest
1618 (package
1619 (name "findnewest")
9c7e7ead 1620 (version "0.3")
df7393b9
LC
1621 (source (origin
1622 (method url-fetch)
1623 (uri (string-append
1624 "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
1625 version ".tar.gz"))
1626 (sha256
1627 (base32
9c7e7ead 1628 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
df7393b9 1629 (build-system gnu-build-system)
df7393b9
LC
1630 (native-inputs `(("autoconf" ,autoconf)
1631 ("automake" ,automake)))
1632 (home-page "https://github.com/0-wiz-0/findnewest/releases")
1633 (synopsis "Print the modification time of the latest file")
1634 (description
1635 "Recursively find the newest file in a file tree and print its
1636modification time.")
369387b6 1637 (license license:bsd-2)))
e92b8599
KM
1638
1639(define-public myrepos
1640 (package
1641 (name "myrepos")
2fe05cb6 1642 (version "1.20171231")
e92b8599
KM
1643 (source
1644 (origin
d46e9fcb
EF
1645 (method git-fetch)
1646 (uri (git-reference
1647 (url "git://myrepos.branchable.com/myrepos")
1648 (commit version)))
1649 (file-name (string-append name "-" version "-checkout"))
e92b8599 1650 (sha256
aa8ac029
EF
1651 (base32 "10q7lpx152xnkk701fscn4dq99q9znnmv3bc2482khhjg7z8rps0"))
1652 (patches (search-patches "myrepos-CVE-2018-7032.patch"))))
e92b8599
KM
1653 (build-system gnu-build-system)
1654 (inputs
1655 `(("perl" ,perl)))
1656 (arguments
d46e9fcb 1657 '(#:test-target "test"
d5a3e8f0 1658 #:phases (modify-phases %standard-phases (delete 'configure))
e92b8599 1659 #:make-flags (list (string-append "PREFIX=" %output))))
d46e9fcb 1660 (home-page "https://myrepos.branchable.com/")
e92b8599
KM
1661 (synopsis "Multiple repository management tool")
1662 (description
1663 "Myrepos provides the @code{mr} command, which maps an operation (e.g.,
1664fetching updates) over a collection of version control repositories. It
1665supports a large number of version control systems: Git, Subversion,
1666Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
369387b6 1667 (license license:gpl2+)))
e8d2168c
EF
1668
1669(define-public git-annex-remote-hubic
1670 (package
1671 (name "git-annex-remote-hubic")
1672 (version "0.3.1")
1673 (source (origin
1674 (method url-fetch)
1675 (uri (string-append
1676 "https://github.com/Schnouki/" name "/archive/v"
1677 version ".tar.gz"))
1678 (file-name (string-append name "-" version ".tar.gz"))
1679 (sha256
1680 (base32
1681 "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
1682 (build-system python-build-system)
f71d1a08 1683 (arguments `(#:python ,python-2))
e8d2168c 1684 (native-inputs
f3b98f4f 1685 `(;; for the tests
f71d1a08 1686 ("python2-six" ,python2-six)))
e8d2168c 1687 (propagated-inputs
7b6ff42a 1688 `(("python2-dateutil" ,python2-dateutil)
f71d1a08
EF
1689 ("python2-futures" ,python2-futures)
1690 ("python2-rauth" ,python2-rauth)
1691 ("python2-swiftclient" ,python2-swiftclient)))
e8d2168c
EF
1692 (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
1693 (synopsis "Use hubic as a git-annex remote")
1694 (description
1695 "This package allows you to use your hubic account as a \"special
1696repository\" with git-annex.")
369387b6 1697 (license license:gpl3+)))
f36a1eba
EB
1698
1699(define-public fossil
1700 (package
1701 (name "fossil")
64bd7f35 1702 (version "2.5")
f36a1eba
EB
1703 (source
1704 (origin
1705 (method url-fetch)
d0b13d7b 1706 ;; Older downloads are moved to another URL.
1707 (uri (list
1708 (string-append
1709 "https://www.fossil-scm.org/index.html/uv/download/"
1710 "fossil-src-" version ".tar.gz")
1711 (string-append
1712 "https://www.fossil-scm.org/index.html/uv/"
1713 "fossil-src-" version ".tar.gz")))
f36a1eba
EB
1714 (sha256
1715 (base32
64bd7f35 1716 "1lxawkhr1ki9fqw8076fxib2b1w673449yzb6vxjshqzh5h77c7r"))))
f36a1eba
EB
1717 (build-system gnu-build-system)
1718 (native-inputs
1719 `(("tcl" ,tcl) ;for configuration only
1720 ("which" ,which) ;for tests only
1721 ("ed" ,ed))) ;ditto
1722 (inputs
1723 `(("openssl" ,openssl)
1724 ("zlib" ,zlib)
1725 ("sqlite" ,sqlite)))
1726 (arguments
1727 `(#:configure-flags (list "--with-openssl=auto"
1728 "--disable-internal-sqlite")
1729 #:test-target "test"
1730 #:phases (modify-phases %standard-phases
1731 (replace 'configure
1732 (lambda* (#:key outputs (configure-flags '())
5c0f68e8 1733 #:allow-other-keys)
f36a1eba
EB
1734 ;; The 'configure' script is not an autoconf script and
1735 ;; chokes on unrecognized options.
5c0f68e8
TGR
1736 (apply invoke
1737 "./configure"
1738 (string-append "--prefix="
1739 (assoc-ref outputs "out"))
1740 configure-flags)
1741 #t))
f36a1eba
EB
1742 (add-before 'check 'test-setup
1743 (lambda _
1744 (setenv "USER" "guix")
1745 (setenv "TZ" "UTC")
f36a1eba
EB
1746 #t)))))
1747 (home-page "https://fossil-scm.org")
1748 (synopsis "Software configuration management system")
1749 (description
1750 "Fossil is a distributed source control management system which supports
1751access and administration over HTTP CGI or via a built-in HTTP server. It has
1752a built-in wiki, built-in file browsing, built-in tickets system, etc.")
369387b6 1753 (license (list license:public-domain ;src/miniz.c, src/shell.c
1754 license:bsd-2))))
1062f245 1755
1756(define-public stagit
1757 (package
1758 (name "stagit")
6b86af5a 1759 (version "0.7.2")
1062f245 1760 (source (origin
1761 (method url-fetch)
fea8b729 1762 (uri (string-append "https://dl.2f30.org/releases/"
1062f245 1763 name "-" version ".tar.gz"))
1764 (sha256
1765 (base32
6b86af5a 1766 "1m3s9g1z9szbjrhm8sic91xh6f2bfpi56rskdkqd5wc4wdycpyi5"))))
1062f245 1767 (build-system gnu-build-system)
1768 (arguments
1769 `(#:tests? #f ; No tests
1770 #:make-flags (list "CC=gcc"
1771 (string-append "PREFIX=" %output))
1772 #:phases
1773 (modify-phases %standard-phases
1774 (delete 'configure)))) ; No configure script
1775 (inputs
1776 `(("libgit2" ,libgit2)))
fea8b729 1777 (home-page "https://2f30.org/")
1062f245 1778 (synopsis "Static git page generator")
1779 (description "Stagit creates static pages for git repositories, the results can
1780be served with a HTTP file server of your choice.")
1781 (license license:expat)))
d81f131f 1782
1783;; Darcs has no https support: http://irclog.perlgeek.de/darcs/2016-09-17
1784;; http://darcs.net/manual/Configuring_darcs.html#SECTION00440070000000000000
1785;; and results of search engines will show that if the protocol is http, https
1786;; is never mentioned.
1787(define-public darcs
1788 (package
1789 (name "darcs")
72816ebe 1790 (version "2.14.1")
d81f131f 1791 (source
1792 (origin
1793 (method url-fetch)
1794 (uri (string-append "https://hackage.haskell.org/package/darcs/"
1795 "darcs-" version ".tar.gz"))
1796 (sha256
1797 (base32
72816ebe 1798 "0dfd6bp2wy0aabxx7l93gi3dmq21j970cds424xdy1mgmjcvrpb1"))
d81f131f 1799 (modules '((guix build utils)))
1800 ;; Remove time-dependent code for reproducibility.
1801 (snippet
1802 '(begin
1803 (substitute* "darcs/darcs.hs"
1804 (("__DATE__") "\"1970-01-01\"")
1805 (("__TIME__") "\"00:00:00\""))
6cbee49d 1806 #t))))
d81f131f 1807 (build-system haskell-build-system)
1808 (arguments
1809 `(#:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
1810 "-fnetwork-uri" "-fhttp" "--flag=executable"
72816ebe
AI
1811 "--flag=library")
1812 #:phases
1813 (modify-phases %standard-phases
1814 (add-after 'patch-source-shebangs 'patch-sh
1815 (lambda _
1816 (substitute* "tests/issue538.sh"
1817 (("/bin/sh") (which "sh")))
1818 #t)))))
d81f131f 1819 (inputs
1820 `(("ghc-cmdargs" ,ghc-cmdargs)
1821 ("ghc-split" ,ghc-split)
1822 ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
1823 ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
1824 ("ghc-test-framework" ,ghc-test-framework)
1825 ("ghc-quickcheck" ,ghc-quickcheck)
1826 ("ghc-findbin" ,ghc-findbin)
1827 ("ghc-hunit" ,ghc-hunit)
d81f131f 1828 ("ghc-async" ,ghc-async)
1829 ("ghc-attoparsec" ,ghc-attoparsec)
1830 ("ghc-base16-bytestring" ,ghc-base16-bytestring)
d81f131f 1831 ("ghc-bytestring-builder" ,ghc-bytestring-builder)
1832 ("ghc-cryptohash" ,ghc-cryptohash)
1833 ("ghc-data-ordlist" ,ghc-data-ordlist)
d81f131f 1834 ("ghc-fgl" ,ghc-fgl)
1835 ("ghc-system-filepath" ,ghc-system-filepath)
1836 ("ghc-graphviz" ,ghc-graphviz)
1837 ("ghc-hashable" ,ghc-hashable)
d81f131f 1838 ("ghc-html" ,ghc-html)
1839 ("ghc-mmap" ,ghc-mmap)
1840 ("ghc-mtl" ,ghc-mtl)
1841 ("ghc-old-time" ,ghc-old-time)
1842 ("ghc-parsec" ,ghc-parsec)
d81f131f 1843 ("ghc-random" ,ghc-random)
1844 ("ghc-regex-applicative" ,ghc-regex-applicative)
1845 ("ghc-regex-compat-tdfa" ,ghc-regex-compat-tdfa)
1846 ("ghc-sandi" ,ghc-sandi)
1847 ("ghc-shelly" ,ghc-shelly)
1848 ("ghc-tar" ,ghc-tar)
1849 ("ghc-transformers-compat" ,ghc-transformers-compat)
1850 ("ghc-unix-compat" ,ghc-unix-compat)
1851 ("ghc-utf8-string" ,ghc-utf8-string)
1852 ("ghc-vector" ,ghc-vector)
1853 ("ghc-zip-archive" ,ghc-zip-archive)
1854 ("ghc-zlib" ,ghc-zlib)
1855 ("ghc-http" ,ghc-http)
1856 ("curl" ,curl)
1857 ("ghc" ,ghc)
1858 ("ncurses" ,ncurses)
1859 ("perl" ,perl)
1860 ("libiconv" ,libiconv)
1861 ("ghc-network" ,ghc-network)
1862 ("ghc-network-uri" ,ghc-network-uri)))
1863 (native-inputs
1864 `(("pkg-config" ,pkg-config)))
1865 (home-page "http://darcs.net")
1866 (synopsis "Distributed Revision Control System")
1867 (description
1868 "Darcs is a revision control system. It is:
1869
1870@enumerate
1871@item Distributed: Every user has access to the full command set, removing boundaries
1872between server and client or committer and non-committers.
1873@item Interactive: Darcs is easy to learn and efficient to use because it asks you
1874questions in response to simple commands, giving you choices in your work flow.
1875You can choose to record one change in a file, while ignoring another. As you update
1876from upstream, you can review each patch name, even the full diff for interesting
1877patches.
1878@item Smart: Originally developed by physicist David Roundy, darcs is based on a
1879unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
1880@end enumerate")
1881 (license license:gpl2)))
2613f5af
RW
1882
1883(define-public java-jgit
1884 (package
1885 (name "java-jgit")
1886 (version "4.7.0.201704051617-r")
1887 (source (origin
1888 (method url-fetch)
1889 (uri (string-append "https://repo1.maven.org/maven2/"
1890 "org/eclipse/jgit/org.eclipse.jgit/"
1891 version "/org.eclipse.jgit-"
1892 version "-sources.jar"))
1893 (sha256
1894 (base32
1895 "13ii4jn02ynzq6i7gsyi21k2i94jpc85wf6bcm31q4cyvzv0mk4k"))))
1896 (build-system ant-build-system)
1897 (arguments
1898 `(#:tests? #f ; There are no tests to run.
1899 #:jar-name "jgit.jar"
1900 ;; JGit must be built with a JDK supporting Java 8.
1901 #:jdk ,icedtea-8
1902 ;; Target our older default JDK.
88433733
RW
1903 #:make-flags (list "-Dtarget=1.7")
1904 #:phases
1905 (modify-phases %standard-phases
1906 ;; The jar file generated by the default build.xml does not include
1907 ;; the text properties files, so we need to add them.
1908 (add-after 'build 'add-properties
1909 (lambda* (#:key jar-name #:allow-other-keys)
1910 (with-directory-excursion "src"
5bad6451
TGR
1911 (apply invoke "jar" "-uf"
1912 (string-append "../build/jar/" jar-name)
1913 (find-files "." "\\.properties$")))
1914 #t)))))
2613f5af
RW
1915 (inputs
1916 `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
1917 ("java-javaewah" ,java-javaewah)
1918 ("java-jsch" ,java-jsch)
1919 ("java-slf4j-api" ,java-slf4j-api)))
1920 (home-page "https://eclipse.org/jgit/")
1921 (synopsis "Java library implementing the Git version control system")
1922 (description "JGit is a lightweight, pure Java library implementing the
1923Git version control system, providing repository access routines, support for
1924network protocols, and core version control algorithms.")
1925 (license license:edl1.0)))
bdb31853
RW
1926
1927;; For axoloti. This package can still be built with icedtea-7, which is
1928;; currently used as the default JDK.
1929(define-public java-jgit-4.2
1930 (package (inherit java-jgit)
1931 (version "4.2.0.201601211800-r")
1932 (source (origin
1933 (method url-fetch)
1934 (uri (string-append "https://repo1.maven.org/maven2/"
1935 "org/eclipse/jgit/org.eclipse.jgit/"
1936 version "/org.eclipse.jgit-"
1937 version "-sources.jar"))
1938 (sha256
1939 (base32
1940 "15gm537iivhnzlkjym4x3wn5jqdjdragsw9pdpzqqg21nrc817mm"))))
1941 (build-system ant-build-system)
1942 (arguments
88433733 1943 (substitute-keyword-arguments (package-arguments java-jgit)
bdb31853 1944 ;; Build for default JDK.
88433733
RW
1945 ((#:jdk _) icedtea-7)
1946 ((#:phases phases)
1947 `(modify-phases ,phases
1948 (add-after 'unpack 'use-latest-javaewah-API
1949 (lambda _
1950 (substitute* "src/org/eclipse/jgit/internal/storage/file/BitmapIndexImpl.java"
1951 (("wordinbits") "WORD_IN_BITS"))
1952 #t))))))
bdb31853
RW
1953 (inputs
1954 `(("java-javaewah" ,java-javaewah)
1955 ("java-jsch" ,java-jsch)
1956 ("java-slf4j-api" ,java-slf4j-api)))))
ca3c1439
OP
1957
1958(define-public gource
1959 (package
1960 (name "gource")
5bc4188f 1961 (version "0.49")
ca3c1439
OP
1962 (source (origin
1963 (method url-fetch)
1964 (uri (string-append
45b48698
OP
1965 "https://github.com/acaudwell/Gource/releases/download"
1966 "/gource-" version "/gource-" version ".tar.gz"))
ca3c1439
OP
1967 (sha256
1968 (base32
5bc4188f 1969 "12hf5ipcsp9dxsqn84n4kr63xaiskrnf5a084wr29qk171lj7pd9"))))
ca3c1439
OP
1970 (build-system gnu-build-system)
1971 (arguments
1972 `(#:configure-flags
1973 (list (string-append "--with-boost-libdir="
1974 (assoc-ref %build-inputs "boost")
1975 "/lib"))))
1976 (native-inputs
1977 `(("pkg-config" ,pkg-config)))
1978 (inputs
1979 `(("boost" ,boost)
1980 ("ftgl" ,ftgl)
1981 ("glew" ,glew)
1982 ("glm" ,glm)
1983 ("glu" ,glu)
1984 ("libpng" ,libpng)
1985 ("mesa" ,mesa)
1986 ("pcre" ,pcre)
1987 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image)))))
1988 (home-page "http://gource.io/")
1989 (synopsis "3D visualisation tool for source control repositories")
1990 (description "@code{gource} provides a software version control
1991visualization. The repository is displayed as a tree where the root of the
1992repository is the centre, directories are branches and files are leaves.
1993Contributors to the source code appear and disappear as they contribute to
1994specific files and directories.")
1995 (license license:gpl3+)))
0ed7498a
SB
1996
1997(define-public src
1998 (package
1999 (name "src")
2000 (version "1.18")
2001 (source (origin
2002 (method url-fetch)
2003 (uri (string-append
2004 "http://www.catb.org/~esr/src/src-" version ".tar.gz"))
2005 (sha256
2006 (base32
2007 "0n0skhvya8w2az45h2gsafxy8m2mvqas64nrgxifcmrzfv0rf26c"))))
2008 (build-system gnu-build-system)
2009 (arguments
2010 '(#:make-flags
2011 (list (string-append "prefix=" (assoc-ref %outputs "out")))
2012 #:phases
2013 (modify-phases %standard-phases
2014 (delete 'configure) ; no 'configure' script
2015 (add-after 'install 'wrap-program
2016 (lambda* (#:key inputs outputs #:allow-other-keys)
2017 (let* ((out (assoc-ref outputs "out"))
2018 (prog (string-append out "/bin/src"))
2019 (rcs (assoc-ref inputs "rcs")))
2020 (wrap-program prog
2021 `("PATH" ":" prefix (,(string-append rcs "/bin"))))
2022 #t)))
2023 (replace 'check
2024 (lambda _
2025 (setenv "HOME" (getenv "TMPDIR"))
2026 (invoke "git" "config" "--global" "user.name" "guix")
2027 (invoke "git" "config" "--global" "user.email" "guix")
2028 (invoke "./srctest"))))))
2029 (native-inputs
2030 ;; For testing.
2031 `(("git" ,git)
2032 ("perl" ,perl)))
2033 (inputs
2034 `(("python" ,python-wrapper)
2035 ("rcs" ,rcs)))
2036 (synopsis "Simple revision control")
2037 (home-page "http://www.catb.org/~esr/src/")
2038 (description
2039 "SRC (or src) is simple revision control, a version-control system for
2040single-file projects by solo developers and authors. It modernizes the
2041venerable RCS, hence the anagrammatic acronym. The design is tuned for use
2042cases like all those little scripts in your @file{~/bin} directory, or a
2043directory full of HOWTOs.")
2044 (license license:bsd-2)))
a078a6ec
TS
2045
2046(define-public git-annex
2047 (package
2048 (name "git-annex")
c8e15c9f 2049 (version "6.20180807")
a078a6ec
TS
2050 (source
2051 (origin
2052 (method url-fetch)
2053 (uri (string-append "https://hackage.haskell.org/package/"
2054 "git-annex/git-annex-" version ".tar.gz"))
2055 (sha256
2056 (base32
c8e15c9f 2057 "1wkqh1y58m0z1mf2j33qhndpxcjwv8mbv384kdk17vn0lp9zas1s"))))
a078a6ec
TS
2058 (build-system haskell-build-system)
2059 (arguments
2060 `(#:configure-flags
2061 '("--flags=-Android -Assistant -Pairing -S3 -Webapp -WebDAV")
2062 #:phases
2063 (modify-phases %standard-phases
2064 (add-before 'configure 'patch-shell
2065 (lambda _
2066 (substitute* "Utility/Shell.hs"
2067 (("/bin/sh") (which "sh")))
2068 #t))
2069 (add-before 'configure 'factor-setup
2070 (lambda _
2071 ;; Factor out necessary build logic from the provided
2072 ;; `Setup.hs' script. The script as-is does not work because
2073 ;; it cannot find its dependencies, and there is no obvious way
2074 ;; to tell it where to look. Note that we do not preserve the
2075 ;; code that installs man pages here.
2076 (call-with-output-file "PreConf.hs"
2077 (lambda (out)
2078 (format out "import qualified Build.Configure as Configure~%")
2079 (format out "main = Configure.run Configure.tests~%")))
2080 (call-with-output-file "Setup.hs"
2081 (lambda (out)
2082 (format out "import Distribution.Simple~%")
2083 (format out "main = defaultMain~%")))
2084 #t))
2085 (add-before 'configure 'pre-configure
2086 (lambda _
2087 (invoke "runhaskell" "PreConf.hs")
2088 #t))
2089 (replace 'check
2090 (lambda _
2091 ;; We need to set the path so that Git recognizes
2092 ;; `git annex' as a custom command.
2093 (setenv "PATH" (string-append (getenv "PATH") ":"
2094 (getcwd) "/dist/build/git-annex"))
2095 (with-directory-excursion "dist/build/git-annex"
2096 (symlink "git-annex" "git-annex-shell"))
2097 (invoke "git-annex" "test")
2098 #t))
2099 (add-after 'install 'install-symlinks
2100 (lambda* (#:key outputs #:allow-other-keys)
2101 (let* ((out (assoc-ref outputs "out"))
2102 (bin (string-append out "/bin")))
2103 (symlink (string-append bin "/git-annex")
2104 (string-append bin "/git-annex-shell"))
2105 (symlink (string-append bin "/git-annex")
2106 (string-append bin "/git-remote-tor-annex"))
2107 #t))))))
2108 (inputs
2109 `(("curl" ,curl)
2110 ("ghc-aeson" ,ghc-aeson)
2111 ("ghc-async" ,ghc-async)
2112 ("ghc-bloomfilter" ,ghc-bloomfilter)
2113 ("ghc-byteable" ,ghc-byteable)
2114 ("ghc-case-insensitive" ,ghc-case-insensitive)
2115 ("ghc-crypto-api" ,ghc-crypto-api)
2116 ("ghc-cryptonite" ,ghc-cryptonite)
2117 ("ghc-data-default" ,ghc-data-default)
2118 ("ghc-disk-free-space" ,ghc-disk-free-space)
2119 ("ghc-dlist" ,ghc-dlist)
2120 ("ghc-edit-distance" ,ghc-edit-distance)
2121 ("ghc-esqueleto" ,ghc-esqueleto)
2122 ("ghc-exceptions" ,ghc-exceptions)
2123 ("ghc-feed" ,ghc-feed)
2124 ("ghc-free" ,ghc-free)
2125 ("ghc-hslogger" ,ghc-hslogger)
2126 ("ghc-http-client" ,ghc-http-client)
2127 ("ghc-http-conduit" ,ghc-http-conduit)
2128 ("ghc-http-types" ,ghc-http-types)
2129 ("ghc-ifelse" ,ghc-ifelse)
2130 ("ghc-memory" ,ghc-memory)
2131 ("ghc-monad-control" ,ghc-monad-control)
2132 ("ghc-monad-logger" ,ghc-monad-logger)
2133 ("ghc-mtl" ,ghc-mtl)
2134 ("ghc-network" ,ghc-network)
2135 ("ghc-old-locale" ,ghc-old-locale)
2136 ("ghc-optparse-applicative" ,ghc-optparse-applicative)
2137 ("ghc-persistent" ,ghc-persistent)
2138 ("ghc-persistent-sqlite" ,ghc-persistent-sqlite)
2139 ("ghc-persistent-template" ,ghc-persistent-template)
2140 ("ghc-quickcheck" ,ghc-quickcheck)
2141 ("ghc-random" ,ghc-random)
2142 ("ghc-regex-tdfa" ,ghc-regex-tdfa)
2143 ("ghc-resourcet" ,ghc-resourcet)
2144 ("ghc-safesemaphore" ,ghc-safesemaphore)
2145 ("ghc-sandi" ,ghc-sandi)
2146 ("ghc-securemem" ,ghc-securemem)
2147 ("ghc-socks" ,ghc-socks)
2148 ("ghc-split" ,ghc-split)
2149 ("ghc-stm" ,ghc-stm)
2150 ("ghc-stm-chans" ,ghc-stm-chans)
c19af99c 2151 ("ghc-tagsoup" ,ghc-tagsoup)
a078a6ec
TS
2152 ("ghc-text" ,ghc-text)
2153 ("ghc-unix-compat" ,ghc-unix-compat)
2154 ("ghc-unordered-containers" ,ghc-unordered-containers)
2155 ("ghc-utf8-string" ,ghc-utf8-string)
2156 ("ghc-uuid" ,ghc-uuid)
2157 ("git" ,git)
2158 ("rsync" ,rsync)))
2159 (native-inputs
2160 `(("ghc-tasty" ,ghc-tasty)
2161 ("ghc-tasty-hunit" ,ghc-tasty-hunit)
2162 ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
2163 ("ghc-tasty-rerun" ,ghc-tasty-rerun)))
2164 (home-page "https://git-annex.branchable.com/")
2165 (synopsis "Manage files with Git, without checking in their contents")
2166 (description "This package allows managing files with Git, without
2167checking the file contents into Git. It can store files in many places,
2168such as local hard drives and cloud storage services. It can also be
2169used to keep a folder in sync between computers.")
2170 ;; The web app is released under the AGPLv3+.
2171 (license (list license:gpl3+
2172 license:agpl3+))))