Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / version-control.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
4 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
5 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
6 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
7 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
8 ;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
9 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
10 ;;; Copyright © 2015 Kyle Meyer <kyle@kyleam.com>
11 ;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
12 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
13 ;;; Copyright © 2016, 2017, 2018 ng0 <ng0@n0.is>
14 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
15 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
16 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
17 ;;; Copyright © 2017 André <eu@euandre.org>
18 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
19 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
20 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
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
37 (define-module (gnu packages version-control)
38 #:use-module ((guix licenses) #:prefix license:)
39 #:use-module (guix utils)
40 #:use-module (guix packages)
41 #:use-module (guix download)
42 #:use-module (guix git-download)
43 #:use-module (guix build-system ant)
44 #:use-module (guix build-system cmake)
45 #:use-module (guix build-system gnu)
46 #:use-module (guix build-system haskell)
47 #:use-module (guix build-system python)
48 #:use-module (guix build-system trivial)
49 #:use-module (gnu packages apr)
50 #:use-module (gnu packages autotools)
51 #:use-module (gnu packages documentation)
52 #:use-module (gnu packages base)
53 #:use-module (gnu packages bison)
54 #:use-module (gnu packages boost)
55 #:use-module (gnu packages cook)
56 #:use-module (gnu packages curl)
57 #:use-module (gnu packages docbook)
58 #:use-module (gnu packages ed)
59 #:use-module (gnu packages file)
60 #:use-module (gnu packages flex)
61 #:use-module (gnu packages gettext)
62 #:use-module (gnu packages gl)
63 #:use-module (gnu packages groff)
64 #:use-module (gnu packages haskell)
65 #:use-module (gnu packages haskell-check)
66 #:use-module (gnu packages haskell-crypto)
67 #:use-module (gnu packages haskell-web)
68 #:use-module (gnu packages image)
69 #:use-module (gnu packages java)
70 #:use-module (gnu packages linux)
71 #:use-module (gnu packages maths)
72 #:use-module (gnu packages nano)
73 #:use-module (gnu packages ncurses)
74 #:use-module (gnu packages ssh)
75 #:use-module (gnu packages web)
76 #:use-module (gnu packages openstack)
77 #:use-module (gnu packages pcre)
78 #:use-module (gnu packages perl)
79 #:use-module (gnu packages perl-check)
80 #:use-module (gnu packages pkg-config)
81 #:use-module (gnu packages python)
82 #:use-module (gnu packages python-web)
83 #:use-module (gnu packages readline)
84 #:use-module (gnu packages databases)
85 #:use-module (gnu packages admin)
86 #:use-module (gnu packages xml)
87 #:use-module (gnu packages emacs)
88 #:use-module (gnu packages compression)
89 #:use-module (gnu packages sdl)
90 #:use-module (gnu packages swig)
91 #:use-module (gnu packages tcl)
92 #:use-module (gnu packages time)
93 #:use-module (gnu packages tls)
94 #:use-module (gnu packages)
95 #:use-module (ice-9 match)
96 #:use-module (srfi srfi-1))
97
98 (define-public bazaar
99 (package
100 (name "bazaar")
101 (version "2.7.0")
102 (source
103 (origin
104 (method url-fetch)
105 (uri (string-append "https://launchpad.net/bzr/"
106 (version-major+minor version) "/" version
107 "/+download/bzr-" version ".tar.gz"))
108 (patches (search-patches "bazaar-CVE-2017-14176.patch"))
109 (sha256
110 (base32
111 "1cysix5k3wa6y7jjck3ckq3abls4gvz570s0v0hxv805nwki4i8d"))))
112 (build-system python-build-system)
113 (inputs
114 ;; Note: 'tools/packaging/lp-upload-release' and 'tools/weavemerge.sh'
115 ;; require Zsh.
116 `(("gettext" ,gettext-minimal)))
117 (arguments
118 `(#:tests? #f ; no test target
119 #:python ,python-2 ; Python 3 apparently not yet supported, see
120 ; https://answers.launchpad.net/bzr/+question/229048
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)))))
128 (home-page "https://gnu.org/software/bazaar")
129 (synopsis "Version control system supporting both distributed and centralized workflows")
130 (description
131 "GNU Bazaar is a version control system that allows you to record
132 changes to project files over time. It supports both a distributed workflow
133 as well as the classic centralized workflow.")
134 (license license:gpl2+)))
135
136 (define-public git
137 (package
138 (name "git")
139 ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
140 ;; to be updated as well.
141 (version "2.16.1")
142 (source (origin
143 (method url-fetch)
144 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
145 version ".tar.xz"))
146 (sha256
147 (base32
148 "06gay8k29glg4giwphjalcc1fknxw4bmxkmbr3ic3gzxy8vl7bfg"))))
149 (build-system gnu-build-system)
150 (native-inputs
151 `(("native-perl" ,perl)
152 ("gettext" ,gettext-minimal)
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
161 "1ympib7kd818v4wjgfrhxjrmv91n50lgxxg0i9gcqihgy3divrlp"))))))
162 (inputs
163 `(("curl" ,curl)
164 ("expat" ,expat)
165 ("openssl" ,openssl)
166 ("perl" ,perl)
167 ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL
168 ("zlib" ,zlib)
169
170 ;; For 'gitweb.cgi'
171 ("perl-cgi" ,perl-cgi)
172
173 ;; For 'git-svn'.
174 ("subversion" ,subversion)
175 ("perl-term-readkey" ,perl-term-readkey)
176
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
182 ;; For 'git gui', 'gitk', and 'git citool'.
183 ("tcl" ,tcl)
184 ("tk" ,tk)))
185 (outputs '("out" ; the core
186 "send-email" ; for git-send-email
187 "svn" ; git-svn
188 "gui")) ; gitk, git gui
189 (arguments
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
194 ;; nars; see <https://bugs.gnu.org/21949>.
195 "NO_INSTALL_HARDLINKS=indeed")
196 #:test-target "test"
197
198 ;; Tests fail randomly when parallel: <https://bugs.gnu.org/29512>.
199 #:parallel-tests? #f
200
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
207 #:modules ((srfi srfi-1)
208 ,@%gnu-build-system-modules)
209 #:phases
210 (modify-phases %standard-phases
211 (add-after 'configure 'patch-makefiles
212 (lambda _
213 (substitute* "Makefile"
214 (("/bin/sh") (which "sh"))
215 (("/usr/bin/perl") (which "perl"))
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))
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))
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")
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"))
263 #t))
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
274 (lambda* (#:key inputs outputs #:allow-other-keys)
275 ;; Split the binaries to the various outputs.
276 (let* ((out (assoc-ref outputs "out"))
277 (se (assoc-ref outputs "send-email"))
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"))
286 (git-se (string-append out "/libexec/git-core/git-send-email"))
287 (git-se* (string-append se "/libexec/git-core/git-send-email"))
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"))
294 (mkdir-p (string-append se "/libexec/git-core"))
295 (mkdir-p (string-append svn "/libexec/git-core"))
296
297 (for-each (lambda (old new)
298 (copy-file old new)
299 (delete-file old)
300 (chmod new #o555))
301 (list gitk git-gui git-cit git-se git-svn)
302 (list gitk* git-gui* git-cit* git-se* git-svn*))
303
304 ;; Tell 'git-svn' where Subversion and perl-term-readkey are.
305 (wrap-program git-svn*
306 `("PATH" ":" prefix
307 (,(string-append (assoc-ref inputs "subversion")
308 "/bin")))
309 `("PERL5LIB" ":" prefix
310 ,(map (lambda (i) (string-append (assoc-ref inputs i)
311 "/lib/perl5/site_perl"))
312 '("subversion" "perl-term-readkey")))
313
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"))))
319
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"))
324 (list
325 ,@(transitive-input-references
326 'inputs
327 (map (lambda (l)
328 (assoc l (inputs)))
329 '("perl-authen-sasl"
330 "perl-net-smtp-ssl"
331 "perl-io-socket-ssl")))))))
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")))))))
343
344 ;; Tell 'git-submodule' where Perl is.
345 (wrap-program git-sm
346 `("PATH" ":" prefix
347 (,(string-append (assoc-ref inputs "perl")
348 "/bin")))))))
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)))))))))
357
358 (native-search-paths
359 ;; For HTTPS access, Git needs a single-file certificate bundle, specified
360 ;; with $GIT_SSL_CAINFO.
361 (list (search-path-specification
362 (variable "GIT_SSL_CAINFO")
363 (file-type 'regular)
364 (separator #f) ;single entry
365 (files '("etc/ssl/certs/ca-certificates.crt")))
366 (search-path-specification
367 (variable "GIT_EXEC_PATH")
368 (separator #f) ;single entry
369 (files '("libexec/git-core")))))
370
371 (synopsis "Distributed version control system")
372 (description
373 "Git is a free distributed version control system designed to handle
374 everything from small to very large projects with speed and efficiency.")
375 (license license:gpl2)
376 (home-page "https://git-scm.com/")))
377
378 (define-public libgit2
379 (package
380 (name "libgit2")
381 (version "0.26.0")
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
389 "1b3figbhp5l83vd37vq6j2narrq4yl9pfw6mw0px0dzb1hz3jqka"))
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)))))
395 (build-system cmake-build-system)
396 (outputs '("out" "debug"))
397 (arguments
398 `(#:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection
399 #:phases
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)
414 ("http-parser" ,http-parser)
415 ("python" ,python-wrapper)))
416 (native-inputs
417 `(("pkg-config" ,pkg-config)))
418 (propagated-inputs
419 ;; These two libraries are in 'Requires.private' in libgit2.pc.
420 `(("openssl" ,openssl)
421 ("zlib" ,zlib)))
422 (home-page "https://libgit2.github.com/")
423 (synopsis "Library providing Git core methods")
424 (description
425 "Libgit2 is a portable, pure C implementation of the Git core methods
426 provided as a re-entrant linkable library with a solid API, allowing you to
427 write native speed custom Git applications in any language with bindings.")
428 ;; GPLv2 with linking exception
429 (license license:gpl2)))
430
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
463 files in a git repository. Files which you choose to protect are encrypted when
464 committed, and decrypted when checked out. git-crypt lets you freely share a
465 repository containing a mix of public and private content. git-crypt gracefully
466 degrades, so developers without the secret key can still clone and commit to a
467 repository with encrypted files. This lets you store your secret material (such
468 as keys or passwords) in the same repository as your code, without requiring you
469 to lock down your entire repository.")
470 (license license:gpl3+)))
471
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
499 repositories encrypted with GnuPG. It works with the standard Git transports,
500 including repository hosting services like GitLab.
501
502 Remote helper programs are invoked by Git to handle network transport. This
503 helper handles @code{gcrypt:} URLs that access a remote repository encrypted
504 with GPG, using our custom format.
505
506 Supported locations are local, @code{rsync://} and @code{sftp://}, where the
507 repository is stored as a set of files, or instead any Git URL where gcrypt
508 will store the same representation in a Git repository, bridged over arbitrary
509 Git transport.
510
511 The aim is to provide confidential, authenticated Git storage and
512 collaboration using typical untrusted file hosts or services.")
513 (license license:gpl3+)))
514
515 (define-public cgit
516 (package
517 (name "cgit")
518 ;; XXX When updating cgit, try removing the special 'git:src' input and
519 ;; using the source of the git package.
520 (version "1.1")
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
528 "142qcgs8dwnzhymn0a7xx47p9fc2z5wrb86ah4a9iz0mpqlsz288"))))
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")))))
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))
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.
574 `(("asciidoc" ,asciidoc)
575 ("gzip" ,gzip)
576 ("bzip2" ,bzip2)
577 ("xz" ,xz)))
578 (inputs
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)
585 (uri "mirror://kernel.org/software/scm/git/git-2.10.5.tar.xz")
586 (sha256
587 (base32
588 "1r2aa19gnrvm2y4fqcvpw1g9l72n48axqmpgv18s6d0y2p72vhzj"))))
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
595 a built-in cache to decrease server I/O pressure.")
596 (license license:gpl2)))
597
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
625 default) 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
636 (define-public shflags
637 (package
638 (name "shflags")
639 (version "1.2.0")
640 (source (origin
641 (method url-fetch)
642 (uri (string-append "https://github.com/kward/shflags/archive/v"
643 version ".tar.gz"))
644 (sha256
645 (base32
646 "0zxw12haylaq60a335xlqcs4afw2zrgwqymmpw0m21r51w6irdmr"))))
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)))))
668 (home-page "https://github.com/kward/shflags")
669 (synopsis "Command-line flags library for shell scripts")
670 (description
671 "Shell Flags (shFlags) is a library written to greatly simplify the
672 handling of command-line flags in Bourne based Unix shell scripts (bash, dash,
673 ksh, sh, zsh). Most shell scripts use getopt for flags processing, but the
674 different versions of getopt on various OSes make writing portable shell
675 scripts difficult. shFlags instead provides an API that doesn't change across
676 shell and OS versions so the script writer can be confident that the script
677 will work.")
678 (license license:lgpl2.1)))
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/")
690 (commit "15aab26490facf285acef56cb5d61025eacb3a69")))
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")))
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))))
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
717 management strategy that helps developers keep track of features, hotfixes,
718 and releases in bigger software projects. The git-flow library of git
719 subcommands helps automate some parts of the flow to make working with it a
720 lot easier.")
721 (license license:bsd-2)))
722
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
752 to Quilt (i.e., pushing/popping patches to/from a stack), but using Git
753 instead of @command{diff} and @command{patch}. StGit stores its patches in a
754 Git repository as normal Git commits, and provides a number of commands to
755 manipulate them in various ways.")
756 (license license:gpl2)))
757
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,
790 all in one single directory. They all maintain their working trees without
791 clobbering each other or interfering otherwise. By default, all Git
792 repositories maintained via vcsh store the actual files in @code{$HOME},
793 though this can be overridden.")
794 (license license:gpl2+)))
795
796 (define-public git-test-sequence
797 (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76"))
798 (package
799 (name "git-test-sequence")
800 (version (string-append "20140312." (string-take commit 7)))
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"))
820 (install-file (string-append source "/" script)
821 bindir)
822 #t))))
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
827 linear. It will test every change between two points in the DAG. It will
828 also walk each side of a merge and test those changes individually.")
829 (license (license:x11-style "file://LICENSE")))))
830
831 (define-public gitolite
832 (package
833 (name "gitolite")
834 (version "3.6.6")
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"))
841 (sha256
842 (base32
843 "07q33f86694s0x3k9lcmy1vzfw9appdrlmmb9j3bz4qkrxqdnwb9"))))
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 -")
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")))))
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
890 control to Git repositories.")
891 (license license:gpl2)))
892
893 (define-public mercurial
894 (package
895 (name "mercurial")
896 (version "4.4.1")
897 (source (origin
898 (method url-fetch)
899 (uri (string-append "https://www.mercurial-scm.org/"
900 "release/mercurial-" version ".tar.gz"))
901 (sha256
902 (base32
903 "0ik2ypzxjr6vpcghxvn39a73gw52629n7vwak04gnbycsq95aalg"))))
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))
912 (home-page "https://www.mercurial-scm.org/")
913 (synopsis "Decentralized version control system")
914 (description
915 "Mercurial is a free, distributed source control management tool.
916 It efficiently handles projects of any size
917 and offers an easy and intuitive interface.")
918 (license license:gpl2+)))
919
920 (define-public neon
921 (package
922 (name "neon")
923 (version "0.30.2")
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
930 "1jpvczcx658vimqm7c8my2q41fnmjaf1j03g7bsli6rjxk6xh2yv"))))
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")
950 (description
951 "Neon is an HTTP and WebDAV client library, with a C interface and the
952 following 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")
969 (license license:gpl2+))) ; for documentation and tests; source under lgpl2.0+
970
971 (define-public subversion
972 (package
973 (name "subversion")
974 (version "1.8.19")
975 (source (origin
976 (method url-fetch)
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")))
983 (sha256
984 (base32
985 "1gp6426gkdza6ni2whgifjcmjb4nq34ljy07yxkrhlarvfq6ks2n"))))
986 (build-system gnu-build-system)
987 (arguments
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"
999 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls")))
1000 #t)))
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"
1015 "NO_PERLLOCAL=1"
1016 (string-append "PREFIX=" out)))
1017 (zero?
1018 (system* "make" "install"
1019 (string-append "OTHERLDFLAGS="
1020 "-Wl,-rpath="
1021 out "/lib"))))))))))))
1022 (native-inputs
1023 `(("pkg-config" ,pkg-config)
1024 ;; For the Perl bindings.
1025 ("swig" ,swig)))
1026 (inputs
1027 `(("apr" ,apr)
1028 ("apr-util" ,apr-util)
1029 ("serf" ,serf)
1030 ("perl" ,perl)
1031 ("python" ,python-2) ; incompatible with Python 3 (print syntax)
1032 ("sqlite" ,sqlite)
1033 ("zlib" ,zlib)))
1034 (home-page "https://subversion.apache.org/")
1035 (synopsis "Revision control system")
1036 (description
1037 "Subversion exists to be universally recognized and adopted as a
1038 centralized version control system characterized by its
1039 reliability as a safe haven for valuable data; the simplicity of its model and
1040 usage; and its ability to support the needs of a wide variety of users and
1041 projects, from individuals to large-scale enterprise operations.")
1042 (license license:asl2.0)))
1043
1044 (define-public rcs
1045 (package
1046 (name "rcs")
1047 (version "5.9.4")
1048 (source (origin
1049 (method url-fetch)
1050 (uri (string-append "mirror://gnu/rcs/rcs-"
1051 version ".tar.xz"))
1052 (sha256
1053 (base32
1054 "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86"))
1055 (patches (search-patches "rcs-5.9.4-noreturn.patch"))))
1056 (build-system gnu-build-system)
1057 (native-inputs `(("ed" ,ed)))
1058 (home-page "https://www.gnu.org/software/rcs/")
1059 (synopsis "Per-file local revision control system")
1060 (description
1061 "RCS is the original Revision Control System. It works on a
1062 file-by-file basis, in contrast to subsequent version control systems such as
1063 CVS, Subversion, and Git. This can make it suitable for system
1064 administration files, for example, which are often inherently local to one
1065 machine.")
1066 (license license:gpl3+)))
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
1075 "https://ftp.gnu.org/non-gnu/cvs/source/feature/"
1076 version "/cvs-" version ".tar.bz2"))
1077 (patches (search-patches "cvs-2017-12836.patch"))
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.
1084 '(#:tests? #f
1085 #:configure-flags (list "--with-external-zlib")))
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
1092 Configuration Management (SCM). Using it, you can record the history of
1093 sources files, and documents. It fills a similar role to the free software
1094 RCS, PRCS, and Aegis packages.")
1095 (license license:gpl1+)))
1096
1097 (define-public cvs-fast-export
1098 (package
1099 (name "cvs-fast-export")
1100 (version "1.43")
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
1107 "17xp5q4cxmd6z0ii1fdr4j1djb9mz1qv7hzr6fawdapjzahi65m3"))))
1108 (build-system gnu-build-system)
1109 (arguments
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
1123 #:make-flags
1124 (list "CC=gcc" (string-append "prefix?=" (assoc-ref %outputs "out")))))
1125 (inputs `(("git" ,git)))
1126 (native-inputs `(("asciidoc" ,asciidoc)
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
1134 repository (or outside of one) and, when possible, emits an equivalent history
1135 in the form of a fast-import stream. Not all possible histories can be
1136 rendered this way; the program tries to emit useful warnings when it can't.
1137
1138 The program can also produce a visualization of the resulting commit directed
1139 acyclic graph (DAG) in the input format of @uref{http://www.graphviz.org,
1140 Graphviz}. The package also includes @command{cvssync}, a tool for mirroring
1141 masters from remote CVS hosts.")
1142 (license license:gpl2+)))
1143
1144 (define-public vc-dwim
1145 (package
1146 (name "vc-dwim")
1147 (version "1.8")
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
1154 "0d5sqafc40l878m8wjr35jxmalj4kam1m6ph60v08ng4ml5g7931"))))
1155 (build-system gnu-build-system)
1156 (inputs `(("perl" ,perl)
1157 ("inetutils" ,inetutils))) ; for `hostname', used in the tests
1158 (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags'
1159 (home-page "https://www.gnu.org/software/vc-dwim/")
1160 (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
1161 (description
1162 "The vc-dwim package contains two tools, \"vc-dwim\" and \"vc-chlog\".
1163 vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and
1164 using version control at the same time, for example by printing a reminder
1165 when a file change has been described in the ChangeLog but the file has not
1166 been added to the VC. vc-chlog scans changed files and generates
1167 standards-compliant ChangeLog entries based on the changes that it detects.")
1168 (license license:gpl3+)))
1169
1170 (define-public diffstat
1171 (package
1172 (name "diffstat")
1173 (version "1.61")
1174 (source (origin
1175 (method url-fetch)
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")))
1182 (sha256
1183 (base32
1184 "1vjmda2zfjxg0qkaj8hfqa8g6bfwnn1ja8696rxrjgqq4w69wd95"))))
1185 (build-system gnu-build-system)
1186 (home-page "https://invisible-island.net/diffstat/")
1187 (synopsis "Make histograms from the output of @command{diff}")
1188 (description
1189 "Diffstat reads the output of @command{diff} and displays a histogram of
1190 the insertions, deletions, and modifications per file. It is useful for
1191 reviewing large, complex patch files.")
1192 (license (license:x11-style "file://COPYING"))))
1193
1194 (define-public cssc
1195 (package
1196 (name "cssc")
1197 (version "1.4.0")
1198 (source (origin
1199 (method url-fetch)
1200 (uri (string-append "mirror://gnu/" name "/CSSC-"
1201 version ".tar.gz"))
1202 (sha256
1203 (base32
1204 "15191dh8hr46cvssmv4v52gymiiyk6ca9j1bfimlqakcqab6y51h"))))
1205 (build-system gnu-build-system)
1206 (arguments
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 ") ""))))))))
1224 ;; These are needed for the tests
1225 (native-inputs `(("git" ,git)
1226 ("cvs" ,cvs)))
1227 (home-page "https://www.gnu.org/software/cssc/")
1228 (synopsis "File-based version control like SCCS")
1229 (description "GNU CSSC provides a replacement for the legacy Unix source
1230 code control system SCCS. This allows old code still under that system to be
1231 accessed and migrated on modern systems.")
1232 (license license:gpl3+)))
1233
1234 ;; This package can unfortunately work only in -TEST mode, since Aegis
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)
1242 (uri (string-append "mirror://sourceforge/aegis/aegis/" version
1243 "/aegis-" version ".tar.gz"))
1244 (sha256
1245 (base32
1246 "18s86ssarfmc4l17gbpzybca29m5wa37cbaimdji8czlcry3mcjl"))
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"))))
1252 (build-system gnu-build-system)
1253 (inputs
1254 `(("e2fsprogs" ,e2fsprogs)
1255 ("curl" ,curl)
1256 ("file" ,file)
1257 ("libxml2" ,libxml2)
1258 ("zlib" ,zlib)
1259 ("gettext" ,gettext-minimal)))
1260 (native-inputs
1261 `(("bison" ,bison)
1262 ("groff" ,groff)
1263 ("perl" ,perl)
1264 ;; Various tests require the following:
1265 ("cvs" ,cvs)
1266 ("flex" ,flex)
1267 ("cook" ,cook)
1268 ("subversion" ,subversion)
1269 ("rcs" ,rcs)
1270 ("ed" ,ed)))
1271 (arguments
1272 `(#:configure-flags (list "--with-no-aegis-configured"
1273 "--sharedstatedir=/var/com/aegis")
1274 #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
1275 #:phases
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"))))))))
1307 (home-page "http://aegis.sourceforge.net")
1308 (synopsis "Project change supervisor")
1309 (description "Aegis is a project change supervisor, and performs some of
1310 the Software Configuration Management needed in a CASE environment. Aegis
1311 provides a framework within which a team of developers may work on many
1312 changes to a program independently, and Aegis coordinates integrating these
1313 changes back into the master source of the program, with as little disruption
1314 as possible. Resolution of contention for source files, a major headache for
1315 any project with more than one developer, is one of Aegis's major functions.")
1316 (license license:gpl3+)))
1317
1318 (define-public reposurgeon
1319 (package
1320 (name "reposurgeon")
1321 (version "3.43")
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 "1af0z14wcm4bk5a9ysinbwq2fp3lf5f7i8mvwh7286hr3fnagcaz"))
1329 (patches (search-patches
1330 "reposurgeon-add-missing-docbook-files.patch"))))
1331 (build-system gnu-build-system)
1332 (arguments
1333 `(#:make-flags
1334 (list "ECHO=echo"
1335 (string-append "target=" (assoc-ref %outputs "out")))
1336 #:phases
1337 (modify-phases %standard-phases
1338 (add-after 'unpack 'patch-inputs
1339 (lambda* (#:key inputs #:allow-other-keys)
1340 (let ((tzdata (assoc-ref inputs "tzdata")))
1341 (substitute* "reposurgeon"
1342 (("/usr/share/zoneinfo")
1343 (string-append tzdata "/share/zoneinfo")))
1344 (substitute* "test/svn-to-svn"
1345 (("/bin/echo") "echo"))
1346 #t)))
1347 (delete 'configure) ; no configure script
1348 (add-before 'build 'fix-docbook
1349 (lambda* (#:key inputs #:allow-other-keys)
1350 (substitute* (find-files "." "\\.xml$")
1351 (("docbook/docbookx.dtd")
1352 (string-append (assoc-ref inputs "docbook-xml")
1353 "/xml/dtd/docbook/docbookx.dtd")))
1354 #t))
1355 (add-before 'check 'set-up-test-environment
1356 (lambda* (#:key inputs #:allow-other-keys)
1357 (let ((tzdata (assoc-ref inputs "tzdata")))
1358 (setenv "TZDIR" (string-append tzdata "/share/zoneinfo"))
1359 #t)))
1360 (add-after 'install 'install-emacs-data
1361 (lambda* (#:key outputs #:allow-other-keys)
1362 (install-file "reposurgeon-mode.el"
1363 (string-append (assoc-ref outputs "out")
1364 "/share/emacs/site-lisp")))))))
1365 (inputs
1366 `(("python" ,python-wrapper)
1367 ("tzdata" ,tzdata)))
1368 (native-inputs
1369 `( ;; For building documentation.
1370 ("asciidoc" ,asciidoc)
1371 ("docbook-xml" ,docbook-xml)
1372 ("docbook-xsl" ,docbook-xsl)
1373 ("libxml2" ,libxml2)
1374 ("xmlto" ,xmlto)
1375
1376 ;; For tests.
1377 ("cvs" ,cvs)
1378 ("git" ,git)
1379 ("mercurial" ,mercurial)
1380 ("subversion" ,subversion)))
1381 (home-page "http://www.catb.org/~esr/reposurgeon/")
1382 (synopsis "Edit version-control repository history")
1383 (description "Reposurgeon enables risky operations that version-control
1384 systems don't want to let you do, such as editing past comments and metadata
1385 and removing commits. It works with any version control system that can
1386 export and import Git fast-import streams, including Git, Mercurial, Fossil,
1387 Bazaar, CVS, RCS, and Src. It can also read Subversion dump files directly
1388 and can thus be used to script production of very high-quality conversions
1389 from Subversion to any supported Distributed Version Control System (DVCS).")
1390 ;; Most files are distributed under bsd-2, except 'repocutter' which is
1391 ;; under bsd-3.
1392 (license (list license:bsd-2 license:bsd-3))))
1393
1394 (define-public tig
1395 (package
1396 (name "tig")
1397 (version "2.3.0")
1398 (source (origin
1399 (method url-fetch)
1400 (uri (string-append
1401 "https://github.com/jonas/tig/releases/download/tig-"
1402 version "/tig-" version ".tar.gz"))
1403 (sha256
1404 (base32
1405 "1vf02snz8qiiqiyqss1z63rzzmwbrc9agcgh21jdq13rja306vv8"))))
1406 (build-system gnu-build-system)
1407 (native-inputs
1408 `(("asciidoc" ,asciidoc)
1409 ("xmlto" ,xmlto)))
1410 (inputs
1411 `(("ncurses" ,ncurses)
1412 ("readline" ,readline)))
1413 (arguments
1414 `(#:phases
1415 (modify-phases %standard-phases
1416 (add-after 'install 'install-doc
1417 (lambda _
1418 (zero? (system* "make" "install-doc")))))
1419 #:tests? #f)) ; tests require access to /dev/tty
1420 ;; #:test-target "test"))
1421 (home-page "https://jonas.github.io/tig/")
1422 (synopsis "Ncurses-based text user interface for Git")
1423 (description
1424 "Tig is an ncurses text user interface for Git, primarily intended as
1425 a history browser. It can also stage hunks for commit, or colorize the
1426 output of the 'git' command.")
1427 (license license:gpl2+)))
1428
1429 (define-public findnewest
1430 (package
1431 (name "findnewest")
1432 (version "0.3")
1433 (source (origin
1434 (method url-fetch)
1435 (uri (string-append
1436 "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
1437 version ".tar.gz"))
1438 (sha256
1439 (base32
1440 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
1441 (build-system gnu-build-system)
1442 (arguments
1443 '(#:phases (modify-phases %standard-phases
1444 (add-after 'unpack 'bootstrap
1445 (lambda _
1446 (zero? (system* "autoreconf" "-vfi")))))))
1447 (native-inputs `(("autoconf" ,autoconf)
1448 ("automake" ,automake)))
1449 (home-page "https://github.com/0-wiz-0/findnewest/releases")
1450 (synopsis "Print the modification time of the latest file")
1451 (description
1452 "Recursively find the newest file in a file tree and print its
1453 modification time.")
1454 (license license:bsd-2)))
1455
1456 (define-public myrepos
1457 (package
1458 (name "myrepos")
1459 (version "1.20171231")
1460 (source
1461 (origin
1462 (method git-fetch)
1463 (uri (git-reference
1464 (url "git://myrepos.branchable.com/myrepos")
1465 (commit version)))
1466 (file-name (string-append name "-" version "-checkout"))
1467 (sha256
1468 (base32 "10q7lpx152xnkk701fscn4dq99q9znnmv3bc2482khhjg7z8rps0"))))
1469 (build-system gnu-build-system)
1470 (inputs
1471 `(("perl" ,perl)))
1472 (arguments
1473 '(#:test-target "test"
1474 #:phases (modify-phases %standard-phases (delete 'configure))
1475 #:make-flags (list (string-append "PREFIX=" %output))))
1476 (home-page "https://myrepos.branchable.com/")
1477 (synopsis "Multiple repository management tool")
1478 (description
1479 "Myrepos provides the @code{mr} command, which maps an operation (e.g.,
1480 fetching updates) over a collection of version control repositories. It
1481 supports a large number of version control systems: Git, Subversion,
1482 Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
1483 (license license:gpl2+)))
1484
1485 (define-public git-annex-remote-hubic
1486 (package
1487 (name "git-annex-remote-hubic")
1488 (version "0.3.1")
1489 (source (origin
1490 (method url-fetch)
1491 (uri (string-append
1492 "https://github.com/Schnouki/" name "/archive/v"
1493 version ".tar.gz"))
1494 (file-name (string-append name "-" version ".tar.gz"))
1495 (sha256
1496 (base32
1497 "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
1498 (build-system python-build-system)
1499 (arguments `(#:python ,python-2))
1500 (native-inputs
1501 `(;; for the tests
1502 ("python2-six" ,python2-six)))
1503 (propagated-inputs
1504 `(("python2-dateutil" ,python2-dateutil)
1505 ("python2-futures" ,python2-futures)
1506 ("python2-rauth" ,python2-rauth)
1507 ("python2-swiftclient" ,python2-swiftclient)))
1508 (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
1509 (synopsis "Use hubic as a git-annex remote")
1510 (description
1511 "This package allows you to use your hubic account as a \"special
1512 repository\" with git-annex.")
1513 (license license:gpl3+)))
1514
1515 (define-public fossil
1516 (package
1517 (name "fossil")
1518 (version "2.4")
1519 (source
1520 (origin
1521 (method url-fetch)
1522 ;; Older downloads are moved to another URL.
1523 (uri (list
1524 (string-append
1525 "https://www.fossil-scm.org/index.html/uv/download/"
1526 "fossil-src-" version ".tar.gz")
1527 (string-append
1528 "https://www.fossil-scm.org/index.html/uv/"
1529 "fossil-src-" version ".tar.gz")))
1530 (sha256
1531 (base32
1532 "0add35lk2ac4qg29d7ygj7pskv8lfln33f3kgf6x3548msv9hd6j"))))
1533 (build-system gnu-build-system)
1534 (native-inputs
1535 `(("tcl" ,tcl) ;for configuration only
1536 ("which" ,which) ;for tests only
1537 ("ed" ,ed))) ;ditto
1538 (inputs
1539 `(("openssl" ,openssl)
1540 ("zlib" ,zlib)
1541 ("sqlite" ,sqlite)))
1542 (arguments
1543 `(#:configure-flags (list "--with-openssl=auto"
1544 "--disable-internal-sqlite")
1545 #:test-target "test"
1546 #:phases (modify-phases %standard-phases
1547 (replace 'configure
1548 (lambda* (#:key outputs (configure-flags '())
1549 #:allow-other-keys)
1550 ;; The 'configure' script is not an autoconf script and
1551 ;; chokes on unrecognized options.
1552 (zero? (apply system*
1553 "./configure"
1554 (string-append "--prefix="
1555 (assoc-ref outputs "out"))
1556 configure-flags))))
1557 (add-before 'check 'test-setup
1558 (lambda _
1559 (setenv "USER" "guix")
1560 (setenv "TZ" "UTC")
1561 #t)))))
1562 (home-page "https://fossil-scm.org")
1563 (synopsis "Software configuration management system")
1564 (description
1565 "Fossil is a distributed source control management system which supports
1566 access and administration over HTTP CGI or via a built-in HTTP server. It has
1567 a built-in wiki, built-in file browsing, built-in tickets system, etc.")
1568 (license (list license:public-domain ;src/miniz.c, src/shell.c
1569 license:bsd-2))))
1570
1571 (define-public stagit
1572 (package
1573 (name "stagit")
1574 (version "0.7.2")
1575 (source (origin
1576 (method url-fetch)
1577 (uri (string-append "https://dl.2f30.org/releases/"
1578 name "-" version ".tar.gz"))
1579 (sha256
1580 (base32
1581 "1m3s9g1z9szbjrhm8sic91xh6f2bfpi56rskdkqd5wc4wdycpyi5"))))
1582 (build-system gnu-build-system)
1583 (arguments
1584 `(#:tests? #f ; No tests
1585 #:make-flags (list "CC=gcc"
1586 (string-append "PREFIX=" %output))
1587 #:phases
1588 (modify-phases %standard-phases
1589 (delete 'configure)))) ; No configure script
1590 (inputs
1591 `(("libgit2" ,libgit2)))
1592 (home-page "https://2f30.org/")
1593 (synopsis "Static git page generator")
1594 (description "Stagit creates static pages for git repositories, the results can
1595 be served with a HTTP file server of your choice.")
1596 (license license:expat)))
1597
1598 ;; Darcs has no https support: http://irclog.perlgeek.de/darcs/2016-09-17
1599 ;; http://darcs.net/manual/Configuring_darcs.html#SECTION00440070000000000000
1600 ;; and results of search engines will show that if the protocol is http, https
1601 ;; is never mentioned.
1602 (define-public darcs
1603 (package
1604 (name "darcs")
1605 (version "2.12.5")
1606 (source
1607 (origin
1608 (method url-fetch)
1609 (uri (string-append "https://hackage.haskell.org/package/darcs/"
1610 "darcs-" version ".tar.gz"))
1611 (sha256
1612 (base32
1613 "0lrm0sal5pl453mkqn8b9fc9l7lwinc140iqihya9g17bk408nrm"))
1614 (modules '((guix build utils)))
1615 ;; Remove time-dependent code for reproducibility.
1616 (snippet
1617 '(begin
1618 (substitute* "darcs/darcs.hs"
1619 (("__DATE__") "\"1970-01-01\"")
1620 (("__TIME__") "\"00:00:00\""))
1621 (substitute* "src/impossible.h"
1622 (("__DATE__") "\"\"")
1623 (("__TIME__") "\"\""))))))
1624 (build-system haskell-build-system)
1625 (arguments
1626 `(#:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
1627 "-fnetwork-uri" "-fhttp" "--flag=executable"
1628 "--flag=library"
1629 "--allow-newer=shelly")
1630 ;; FIXME: darcs is not compatible with the latest QuickCheck
1631 #:tests? #f))
1632 (inputs
1633 `(("ghc-cmdargs" ,ghc-cmdargs)
1634 ("ghc-split" ,ghc-split)
1635 ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
1636 ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
1637 ("ghc-test-framework" ,ghc-test-framework)
1638 ("ghc-quickcheck" ,ghc-quickcheck)
1639 ("ghc-findbin" ,ghc-findbin)
1640 ("ghc-hunit" ,ghc-hunit)
1641 ("ghc-array" ,ghc-array)
1642 ("ghc-async" ,ghc-async)
1643 ("ghc-attoparsec" ,ghc-attoparsec)
1644 ("ghc-base16-bytestring" ,ghc-base16-bytestring)
1645 ("ghc-binary" ,ghc-binary)
1646 ("ghc-bytestring-builder" ,ghc-bytestring-builder)
1647 ("ghc-cryptohash" ,ghc-cryptohash)
1648 ("ghc-data-ordlist" ,ghc-data-ordlist)
1649 ("ghc-fgl" ,ghc-fgl)
1650 ("ghc-system-filepath" ,ghc-system-filepath)
1651 ("ghc-graphviz" ,ghc-graphviz)
1652 ("ghc-hashable" ,ghc-hashable)
1653 ("ghc-haskeline" ,ghc-haskeline)
1654 ("ghc-html" ,ghc-html)
1655 ("ghc-mmap" ,ghc-mmap)
1656 ("ghc-mtl" ,ghc-mtl)
1657 ("ghc-old-time" ,ghc-old-time)
1658 ("ghc-parsec" ,ghc-parsec)
1659 ("ghc-random" ,ghc-random)
1660 ("ghc-regex-applicative" ,ghc-regex-applicative)
1661 ("ghc-regex-compat-tdfa" ,ghc-regex-compat-tdfa)
1662 ("ghc-sandi" ,ghc-sandi)
1663 ("ghc-shelly" ,ghc-shelly)
1664 ("ghc-tar" ,ghc-tar)
1665 ("ghc-transformers-compat" ,ghc-transformers-compat)
1666 ("ghc-unix-compat" ,ghc-unix-compat)
1667 ("ghc-utf8-string" ,ghc-utf8-string)
1668 ("ghc-vector" ,ghc-vector)
1669 ("ghc-zip-archive" ,ghc-zip-archive)
1670 ("ghc-zlib" ,ghc-zlib)
1671 ("ghc-http" ,ghc-http)
1672 ("curl" ,curl)
1673 ("ghc" ,ghc)
1674 ("ncurses" ,ncurses)
1675 ("perl" ,perl)
1676 ("libiconv" ,libiconv)
1677 ("ghc-network" ,ghc-network)
1678 ("ghc-network-uri" ,ghc-network-uri)))
1679 (native-inputs
1680 `(("pkg-config" ,pkg-config)))
1681 (home-page "http://darcs.net")
1682 (synopsis "Distributed Revision Control System")
1683 (description
1684 "Darcs is a revision control system. It is:
1685
1686 @enumerate
1687 @item Distributed: Every user has access to the full command set, removing boundaries
1688 between server and client or committer and non-committers.
1689 @item Interactive: Darcs is easy to learn and efficient to use because it asks you
1690 questions in response to simple commands, giving you choices in your work flow.
1691 You can choose to record one change in a file, while ignoring another. As you update
1692 from upstream, you can review each patch name, even the full diff for interesting
1693 patches.
1694 @item Smart: Originally developed by physicist David Roundy, darcs is based on a
1695 unique algebra of patches called @url{http://darcs.net/Theory,Patchtheory}.
1696 @end enumerate")
1697 (license license:gpl2)))
1698
1699 (define-public java-jgit
1700 (package
1701 (name "java-jgit")
1702 (version "4.7.0.201704051617-r")
1703 (source (origin
1704 (method url-fetch)
1705 (uri (string-append "https://repo1.maven.org/maven2/"
1706 "org/eclipse/jgit/org.eclipse.jgit/"
1707 version "/org.eclipse.jgit-"
1708 version "-sources.jar"))
1709 (sha256
1710 (base32
1711 "13ii4jn02ynzq6i7gsyi21k2i94jpc85wf6bcm31q4cyvzv0mk4k"))))
1712 (build-system ant-build-system)
1713 (arguments
1714 `(#:tests? #f ; There are no tests to run.
1715 #:jar-name "jgit.jar"
1716 ;; JGit must be built with a JDK supporting Java 8.
1717 #:jdk ,icedtea-8
1718 ;; Target our older default JDK.
1719 #:make-flags (list "-Dtarget=1.7")
1720 #:phases
1721 (modify-phases %standard-phases
1722 ;; The jar file generated by the default build.xml does not include
1723 ;; the text properties files, so we need to add them.
1724 (add-after 'build 'add-properties
1725 (lambda* (#:key jar-name #:allow-other-keys)
1726 (with-directory-excursion "src"
1727 (zero? (apply system* "jar" "-uf"
1728 (string-append "../build/jar/" jar-name)
1729 (find-files "." "\\.properties$")))))))))
1730 (inputs
1731 `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
1732 ("java-javaewah" ,java-javaewah)
1733 ("java-jsch" ,java-jsch)
1734 ("java-slf4j-api" ,java-slf4j-api)))
1735 (home-page "https://eclipse.org/jgit/")
1736 (synopsis "Java library implementing the Git version control system")
1737 (description "JGit is a lightweight, pure Java library implementing the
1738 Git version control system, providing repository access routines, support for
1739 network protocols, and core version control algorithms.")
1740 (license license:edl1.0)))
1741
1742 ;; For axoloti. This package can still be built with icedtea-7, which is
1743 ;; currently used as the default JDK.
1744 (define-public java-jgit-4.2
1745 (package (inherit java-jgit)
1746 (version "4.2.0.201601211800-r")
1747 (source (origin
1748 (method url-fetch)
1749 (uri (string-append "https://repo1.maven.org/maven2/"
1750 "org/eclipse/jgit/org.eclipse.jgit/"
1751 version "/org.eclipse.jgit-"
1752 version "-sources.jar"))
1753 (sha256
1754 (base32
1755 "15gm537iivhnzlkjym4x3wn5jqdjdragsw9pdpzqqg21nrc817mm"))))
1756 (build-system ant-build-system)
1757 (arguments
1758 (substitute-keyword-arguments (package-arguments java-jgit)
1759 ;; Build for default JDK.
1760 ((#:jdk _) icedtea-7)
1761 ((#:phases phases)
1762 `(modify-phases ,phases
1763 (add-after 'unpack 'use-latest-javaewah-API
1764 (lambda _
1765 (substitute* "src/org/eclipse/jgit/internal/storage/file/BitmapIndexImpl.java"
1766 (("wordinbits") "WORD_IN_BITS"))
1767 #t))))))
1768 (inputs
1769 `(("java-javaewah" ,java-javaewah)
1770 ("java-jsch" ,java-jsch)
1771 ("java-slf4j-api" ,java-slf4j-api)))))
1772
1773 (define-public gource
1774 (package
1775 (name "gource")
1776 (version "0.47")
1777 (source (origin
1778 (method url-fetch)
1779 (uri (string-append
1780 "https://github.com/acaudwell/Gource/releases/download"
1781 "/gource-" version "/gource-" version ".tar.gz"))
1782 (sha256
1783 (base32
1784 "1llqwdnfa1pff8bxk27qsqff1fcg0a9kfdib0rn7p28vl21n1cgj"))))
1785 (build-system gnu-build-system)
1786 (arguments
1787 `(#:configure-flags
1788 (list (string-append "--with-boost-libdir="
1789 (assoc-ref %build-inputs "boost")
1790 "/lib"))))
1791 (native-inputs
1792 `(("pkg-config" ,pkg-config)))
1793 (inputs
1794 `(("boost" ,boost)
1795 ("ftgl" ,ftgl)
1796 ("glew" ,glew)
1797 ("glm" ,glm)
1798 ("glu" ,glu)
1799 ("libpng" ,libpng)
1800 ("mesa" ,mesa)
1801 ("pcre" ,pcre)
1802 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image)))))
1803 (home-page "http://gource.io/")
1804 (synopsis "3D visualisation tool for source control repositories")
1805 (description "@code{gource} provides a software version control
1806 visualization. The repository is displayed as a tree where the root of the
1807 repository is the centre, directories are branches and files are leaves.
1808 Contributors to the source code appear and disappear as they contribute to
1809 specific files and directories.")
1810 (license license:gpl3+)))