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