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