http-client: Improve error reporting.
[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>
1a59b6d0 4;;; Copyright © 2013, 2014, 2015, 2016 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>
17206f72 9;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
e92b8599 10;;; Copyright © 2015 Kyle Meyer <kyle@kyleam.com>
086e498b 11;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
d1cada04 12;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
369387b6 13;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
dcee3fc5
NK
14;;;
15;;; This file is part of GNU Guix.
16;;;
17;;; GNU Guix is free software; you can redistribute it and/or modify it
18;;; under the terms of the GNU General Public License as published by
19;;; the Free Software Foundation; either version 3 of the License, or (at
20;;; your option) any later version.
21;;;
22;;; GNU Guix is distributed in the hope that it will be useful, but
23;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25;;; GNU General Public License for more details.
26;;;
27;;; You should have received a copy of the GNU General Public License
28;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
29
1b1c335f 30(define-module (gnu packages version-control)
369387b6 31 #:use-module ((guix licenses) #:prefix license:)
d1cba090 32 #:use-module (guix utils)
dcee3fc5
NK
33 #:use-module (guix packages)
34 #:use-module (guix download)
c7810bd1 35 #:use-module (guix git-download)
086e498b 36 #:use-module (guix build-system cmake)
1b1c335f 37 #:use-module (guix build-system gnu)
dcee3fc5 38 #:use-module (guix build-system python)
c7810bd1 39 #:use-module (guix build-system trivial)
2b24faa2 40 #:use-module (gnu packages apr)
df7393b9 41 #:use-module (gnu packages autotools)
99828fa7 42 #:use-module (gnu packages documentation)
c7810bd1 43 #:use-module (gnu packages base)
0e534e74
JD
44 #:use-module (gnu packages bison)
45 #:use-module (gnu packages cook)
d9ff410f 46 #:use-module (gnu packages curl)
59ef2030 47 #:use-module (gnu packages docbook)
740c24df 48 #:use-module (gnu packages ed)
0e534e74
JD
49 #:use-module (gnu packages file)
50 #:use-module (gnu packages flex)
fc1e4516 51 #:use-module (gnu packages gettext)
0e534e74
JD
52 #:use-module (gnu packages groff)
53 #:use-module (gnu packages linux)
1972fed4 54 #:use-module (gnu packages nano)
2459141e 55 #:use-module (gnu packages ncurses)
378b01dc 56 #:use-module (gnu packages ssh)
46138f3e 57 #:use-module (gnu packages web)
e8d2168c 58 #:use-module (gnu packages openstack)
cf3fe3b0 59 #:use-module (gnu packages perl)
fc1e4516 60 #:use-module (gnu packages pkg-config)
cf3fe3b0 61 #:use-module (gnu packages python)
d0e11e8b 62 #:use-module (gnu packages readline)
5f96f303 63 #:use-module (gnu packages databases)
9de46ffb 64 #:use-module (gnu packages admin)
d9ff410f 65 #:use-module (gnu packages xml)
a4572a17 66 #:use-module (gnu packages emacs)
8b2fe785 67 #:use-module (gnu packages compression)
ecfb6993 68 #:use-module (gnu packages swig)
25f76ef0 69 #:use-module (gnu packages tcl)
cc2b77df 70 #:use-module (gnu packages tls)
58c18069
EB
71 #:use-module (gnu packages)
72 #:use-module (ice-9 match)
73 #:use-module (srfi srfi-1))
dcee3fc5
NK
74
75(define-public bazaar
76 (package
77 (name "bazaar")
d1cba090 78 (version "2.7.0")
dcee3fc5
NK
79 (source
80 (origin
81 (method url-fetch)
d1cba090
EF
82 (uri (string-append "https://launchpad.net/bzr/"
83 (version-major+minor version) "/" version
dcee3fc5
NK
84 "/+download/bzr-" version ".tar.gz"))
85 (sha256
86 (base32
d1cba090 87 "1cysix5k3wa6y7jjck3ckq3abls4gvz570s0v0hxv805nwki4i8d"))))
dcee3fc5
NK
88 (build-system python-build-system)
89 (inputs
90 ;; Note: 'tools/packaging/lp-upload-release' and 'tools/weavemerge.sh'
91 ;; require Zsh.
b94a6ca0 92 `(("gettext" ,gettext-minimal)))
dcee3fc5 93 (arguments
1611eccd 94 `(#:tests? #f ; no test target
3b9af0f3 95 #:python ,python-2 ; Python 3 apparently not yet supported, see
1611eccd 96 ; https://answers.launchpad.net/bzr/+question/229048
730c740e
EF
97 #:phases
98 (modify-phases %standard-phases
99 (add-after 'unpack 'fix-mandir
100 (lambda _
101 (substitute* "setup.py"
102 (("man/man1") "share/man/man1"))
103 #t)))))
dcee3fc5 104 (home-page "https://gnu.org/software/bazaar")
79c311b8 105 (synopsis "Version control system supporting both distributed and centralized workflows")
dcee3fc5 106 (description
79c311b8 107 "GNU Bazaar is a version control system that allows you to record
35b9e423 108changes to project files over time. It supports both a distributed workflow
79c311b8 109as well as the classic centralized workflow.")
369387b6 110 (license license:gpl2+)))
1b1c335f 111
d9ff410f
AE
112(define-public git
113 (package
114 (name "git")
663d5b53 115 (version "2.11.0")
d9ff410f
AE
116 (source (origin
117 (method url-fetch)
4d96439d 118 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
ff212a5c 119 version ".tar.xz"))
d9ff410f
AE
120 (sha256
121 (base32
663d5b53 122 "02zx368id8rys0bh2sjrxz0ln2l2wm5nf1vhp1rj72clsilqszky"))))
d9ff410f 123 (build-system gnu-build-system)
2a5e15c6
LC
124 (native-inputs
125 `(("native-perl" ,perl)
b94a6ca0 126 ("gettext" ,gettext-minimal)
d1cada04
LF
127 ("git-manpages"
128 ,(origin
129 (method url-fetch)
130 (uri (string-append
131 "mirror://kernel.org/software/scm/git/git-manpages-"
132 version ".tar.xz"))
133 (sha256
134 (base32
663d5b53 135 "1n18jnpi0z3skwc1ckrm7zdld6i3zvn0g95cg9r9pdn0564fglxk"))))))
d9ff410f
AE
136 (inputs
137 `(("curl" ,curl)
138 ("expat" ,expat)
d9ff410f
AE
139 ("openssl" ,openssl)
140 ("perl" ,perl)
d1f30e99 141 ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL
ed5f49ff
LC
142 ("zlib" ,zlib)
143
3bec8a01
RW
144 ;; For 'gitweb.cgi'
145 ("perl-cgi" ,perl-cgi)
146
ed5f49ff 147 ;; For 'git-svn'.
ecfb6993 148 ("subversion" ,subversion)
b411517a 149 ("perl-term-readkey" ,perl-term-readkey)
ecfb6993 150
58c18069
EB
151 ;; For 'git-send-email'
152 ("perl-authen-sasl" ,perl-authen-sasl)
153 ("perl-net-smtp-ssl" ,perl-net-smtp-ssl)
154 ("perl-io-socket-ssl" ,perl-io-socket-ssl)
155
ecfb6993
LC
156 ;; For 'git gui', 'gitk', and 'git citool'.
157 ("tcl" ,tcl)
158 ("tk" ,tk)))
159 (outputs '("out" ; the core
58c18069 160 "send-email" ; for git-send-email
ecfb6993
LC
161 "svn" ; git-svn
162 "gui")) ; gitk, git gui
d9ff410f 163 (arguments
1a59b6d0
LC
164 `(#:make-flags `("V=1" ;more verbose compilation
165
166 ;; By default 'make install' creates hard links for
167 ;; things in 'libexec/git-core', which leads to huge
168 ;; nars; see <http://bugs.gnu.org/21949>.
169 "NO_INSTALL_HARDLINKS=indeed")
d9ff410f
AE
170 #:test-target "test"
171 #:tests? #f ; FIXME: Many tests are failing
ecfb6993
LC
172
173 ;; The explicit --with-tcltk forces the build system to hardcode the
174 ;; absolute file name to 'wish'.
175 #:configure-flags (list (string-append "--with-tcltk="
176 (assoc-ref %build-inputs "tk")
177 "/bin/wish8.6")) ; XXX
178
58c18069
EB
179 #:modules ((srfi srfi-1)
180 ,@%gnu-build-system-modules)
d9ff410f 181 #:phases
98378db6
LC
182 (modify-phases %standard-phases
183 (add-after 'configure 'patch-makefile-shebangs
184 (lambda _
185 (substitute* "Makefile"
186 (("/bin/sh") (which "sh"))
187 (("/usr/bin/perl") (which "perl"))
188 (("/usr/bin/python") (which "python")))))
8601feae
LC
189 (add-after 'configure 'add-PM.stamp
190 (lambda _
191 ;; Add the "PM.stamp" to avoid "no rule to make target".
192 (call-with-output-file "perl/PM.stamp" (const #t))
193 #t))
98378db6
LC
194 (add-after 'install 'install-shell-completion
195 (lambda* (#:key outputs #:allow-other-keys)
196 (let* ((out (assoc-ref outputs "out"))
197 (completions (string-append out "/etc/bash_completion.d")))
198 ;; TODO: Install the tcsh and zsh completions in the right place.
199 (mkdir-p completions)
200 (copy-file "contrib/completion/git-completion.bash"
201 (string-append completions "/git"))
202 #t)))
203 (add-after 'install 'split
23c0e743
LC
204 (lambda* (#:key inputs outputs #:allow-other-keys)
205 ;; Split the binaries to the various outputs.
206 (let* ((out (assoc-ref outputs "out"))
58c18069 207 (se (assoc-ref outputs "send-email"))
23c0e743
LC
208 (svn (assoc-ref outputs "svn"))
209 (gui (assoc-ref outputs "gui"))
210 (gitk (string-append out "/bin/gitk"))
211 (gitk* (string-append gui "/bin/gitk"))
212 (git-gui (string-append out "/libexec/git-core/git-gui"))
213 (git-gui* (string-append gui "/libexec/git-core/git-gui"))
214 (git-cit (string-append out "/libexec/git-core/git-citool"))
215 (git-cit* (string-append gui "/libexec/git-core/git-citool"))
58c18069
EB
216 (git-se (string-append out "/libexec/git-core/git-send-email"))
217 (git-se* (string-append se "/libexec/git-core/git-send-email"))
23c0e743
LC
218 (git-svn (string-append out "/libexec/git-core/git-svn"))
219 (git-svn* (string-append svn "/libexec/git-core/git-svn"))
220 (git-sm (string-append out
221 "/libexec/git-core/git-submodule")))
222 (mkdir-p (string-append gui "/bin"))
223 (mkdir-p (string-append gui "/libexec/git-core"))
58c18069 224 (mkdir-p (string-append se "/libexec/git-core"))
23c0e743 225 (mkdir-p (string-append svn "/libexec/git-core"))
ecfb6993 226
23c0e743
LC
227 (for-each (lambda (old new)
228 (copy-file old new)
229 (delete-file old)
230 (chmod new #o555))
58c18069
EB
231 (list gitk git-gui git-cit git-se git-svn)
232 (list gitk* git-gui* git-cit* git-se* git-svn*))
ed5f49ff 233
b411517a 234 ;; Tell 'git-svn' where Subversion and perl-term-readkey are.
23c0e743
LC
235 (wrap-program git-svn*
236 `("PATH" ":" prefix
237 (,(string-append (assoc-ref inputs "subversion")
238 "/bin")))
239 `("PERL5LIB" ":" prefix
b411517a
TD
240 ,(map (lambda (i) (string-append (assoc-ref inputs i)
241 "/lib/perl5/site_perl"))
242 '("subversion" "perl-term-readkey")))
ed5f49ff 243
23c0e743
LC
244 ;; XXX: The .so for SVN/Core.pm lacks a RUNPATH, so
245 ;; help it find 'libsvn_client-1.so'.
246 `("LD_LIBRARY_PATH" ":" prefix
247 (,(string-append (assoc-ref inputs "subversion")
248 "/lib"))))
0a5a1db2 249
58c18069
EB
250 ;; Tell 'git-send-email' where perl modules are.
251 (wrap-program git-se*
252 `("PERL5LIB" ":" prefix
253 ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
355e53c4 254 (list
a6d0b306 255 ,@(transitive-input-references
355e53c4 256 'inputs
a6d0b306
EB
257 (map (lambda (l)
258 (assoc l (inputs)))
259 '("perl-authen-sasl"
260 "perl-net-smtp-ssl"
261 "perl-io-socket-ssl")))))))
3bec8a01
RW
262
263 ;; Tell 'gitweb.cgi' where perl modules are.
264 (wrap-program (string-append out "/share/gitweb/gitweb.cgi")
265 `("PERL5LIB" ":" prefix
266 ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
267 (list
268 ,@(transitive-input-references
269 'inputs
270 (map (lambda (l)
271 (assoc l (inputs)))
272 '("perl-cgi")))))))
58c18069 273
23c0e743
LC
274 ;; Tell 'git-submodule' where Perl is.
275 (wrap-program git-sm
276 `("PATH" ":" prefix
277 (,(string-append (assoc-ref inputs "perl")
278 "/bin"))))
2a5e15c6 279
23c0e743
LC
280 ;; Tell 'git' to look for core programs in the user's profile.
281 ;; This allows user to install other outputs of this package and
282 ;; have them transparently taken into account. There's a
283 ;; 'GIT_EXEC_PATH' environment variable, but it's supposed to
284 ;; specify a single directory, not a search path.
285 (wrap-program (string-append out "/bin/git")
286 `("PATH" ":" prefix
d1cada04
LF
287 ("$HOME/.guix-profile/libexec/git-core"))))))
288 (add-after 'split 'install-man-pages
289 (lambda* (#:key inputs outputs #:allow-other-keys)
290 (let* ((out (assoc-ref outputs "out"))
291 (man (string-append out "/share/man"))
292 (manpages (assoc-ref inputs "git-manpages")))
293 (mkdir-p man)
294 (with-directory-excursion man
295 (zero? (system* "tar" "xvf" manpages)))))))))
da699774
LC
296
297 (native-search-paths
298 ;; For HTTPS access, Git needs a single-file certificate bundle, specified
299 ;; with $GIT_SSL_CAINFO.
300 ;; FIXME: This variable designates a single file; it is not a search path.
301 (list (search-path-specification
302 (variable "GIT_SSL_CAINFO")
6d461b21 303 (file-type 'regular)
da699774
LC
304 (files '("etc/ssl/certs/ca-certificates.crt")))))
305
d9ff410f
AE
306 (synopsis "Distributed version control system")
307 (description
308 "Git is a free distributed version control system designed to handle
309everything from small to very large projects with speed and efficiency.")
369387b6 310 (license license:gpl2)
d9ff410f
AE
311 (home-page "http://git-scm.com/")))
312
4e835710
JD
313;; Some dependent packages directly access internal interfaces which
314;; have changed in 2.10
315(define-public git@2.9
316 (package
317 (inherit git)
318 (version "2.9.3")
319 (source (origin
320 (method url-fetch)
321 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
322 version ".tar.xz"))
323 (sha256
324 (base32
325 "0qzs681a64k3shh5p0rg41l1z16fbk5sj0xga45k34hp1hsp654z"))))))
326
086e498b
RW
327(define-public libgit2
328 (package
329 (name "libgit2")
c163a284 330 (version "0.24.3")
086e498b
RW
331 (source (origin
332 (method url-fetch)
333 (uri (string-append "https://github.com/libgit2/libgit2/"
334 "archive/v" version ".tar.gz"))
335 (file-name (string-append name "-" version ".tar.gz"))
336 (sha256
337 (base32
c163a284 338 "0m37b2jq8g70bmxlgrhbj4p23c893vxwmlmw1v5ywfxz3njyc90a"))))
086e498b
RW
339 (build-system cmake-build-system)
340 (arguments
341 `(#:phases
342 (modify-phases %standard-phases
343 (add-after 'unpack 'fix-hardcoded-paths
344 (lambda _
345 (substitute* "tests/repo/init.c"
346 (("#!/bin/sh") (string-append "#!" (which "sh"))))
347 (substitute* "tests/clar/fs.h"
348 (("/bin/cp") (which "cp"))
349 (("/bin/rm") (which "rm")))
350 #t))
351 ;; Run checks more verbosely.
352 (replace 'check
353 (lambda _ (zero? (system* "./libgit2_clar" "-v" "-Q")))))))
354 (inputs
355 `(("libssh2" ,libssh2)
356 ("libcurl" ,curl)
3a099d17 357 ("python" ,python-wrapper)
086e498b
RW
358 ("openssl" ,openssl)))
359 (native-inputs
360 `(("pkg-config" ,pkg-config)))
9bf160a3 361 (home-page "https://libgit2.github.com/")
086e498b
RW
362 (synopsis "Library providing Git core methods")
363 (description
364 "Libgit2 is a portable, pure C implementation of the Git core methods
365provided as a re-entrant linkable library with a solid API, allowing you to
366write native speed custom Git applications in any language with bindings.")
367 ;; GPLv2 with linking exception
369387b6 368 (license license:gpl2)))
086e498b 369
7ad1fee5
SB
370(define-public cgit
371 (package
372 (name "cgit")
569d9efe 373 (version "1.0")
7ad1fee5
SB
374 (source (origin
375 (method url-fetch)
376 (uri (string-append
377 "https://git.zx2c4.com/cgit/snapshot/cgit-"
378 version ".tar.xz"))
379 (sha256
380 (base32
569d9efe 381 "0kbh835p7dl4h88qv55fyfh1za09cgnqh63rii325w9215hm95x8"))))
7ad1fee5
SB
382 (build-system gnu-build-system)
383 (arguments
384 '(#:tests? #f ; XXX: fail to build the in-source git.
385 #:test-target "test"
386 #:make-flags '("CC=gcc" "SHELL_PATH=sh")
387 #:phases
388 (modify-phases %standard-phases
389 (add-after 'unpack 'unpack-git
390 (lambda* (#:key inputs #:allow-other-keys)
391 ;; Unpack the source of git into the 'git' directory.
392 (zero? (system*
393 "tar" "--strip-components=1" "-C" "git" "-xf"
394 (assoc-ref inputs "git:src")))))
395 (delete 'configure) ; no configure script
396 (add-after 'build 'build-man
397 (lambda* (#:key make-flags #:allow-other-keys)
398 (zero? (apply system* `("make" ,@make-flags "doc-man")))))
399 (replace 'install
400 (lambda* (#:key make-flags outputs #:allow-other-keys)
401 (let ((out (assoc-ref outputs "out")))
402 (and (zero? (apply system*
403 `("make" ,@make-flags
404 ,(string-append "prefix=" out)
405 ,(string-append
406 "CGIT_SCRIPT_PATH=" out "/share/cgit")
407 "install" "install-man")))
408 ;; Move the platform-dependent 'cgit.cgi' into lib
409 ;; to get it stripped.
410 (rename-file (string-append out "/share/cgit/cgit.cgi")
411 (string-append out "/lib/cgit/cgit.cgi"))
412 #t)))))))
413 (native-inputs
414 ;; For building manpage.
415 `(("asciidoc" ,asciidoc)
416 ("docbook-xml" ,docbook-xml)
417 ("docbook-xsl" ,docbook-xsl)
418 ("xmllint" ,libxml2)
419 ("xsltprot" ,libxslt)))
420 (inputs
4e835710 421 `(("git:src" ,(package-source git@2.9))
7ad1fee5
SB
422 ("openssl" ,openssl)
423 ("zlib" ,zlib)))
424 (home-page "https://git.zx2c4.com/cgit/")
425 (synopsis "Web frontend for git repositories")
426 (description
427 "CGit is an attempt to create a fast web interface for the Git SCM, using
428a built-in cache to decrease server I/O pressure.")
369387b6 429 (license license:gpl2)))
7ad1fee5 430
c7810bd1
EB
431(define-public shflags
432 (package
433 (name "shflags")
b65195c2 434 (version "1.2.0")
c7810bd1
EB
435 (source (origin
436 (method url-fetch)
b65195c2
EF
437 (uri (string-append "https://github.com/kward/shflags/archive/v"
438 version ".tar.gz"))
c7810bd1
EB
439 (sha256
440 (base32
b65195c2 441 "0zxw12haylaq60a335xlqcs4afw2zrgwqymmpw0m21r51w6irdmr"))))
c7810bd1
EB
442 (build-system trivial-build-system)
443 (native-inputs `(("tar" ,tar)
444 ("gzip" ,gzip)))
445 (arguments
446 `(#:modules ((guix build utils))
447 #:builder (begin
448 (use-modules (guix build utils))
449 (let* ((source (assoc-ref %build-inputs "source"))
450 (tar (assoc-ref %build-inputs "tar"))
451 (gzip (assoc-ref %build-inputs "gzip"))
452 (output (assoc-ref %outputs "out"))
453 (srcdir (string-append output "/src")))
454 (begin
455 (setenv "PATH" (string-append gzip "/bin"))
456 (system* (string-append tar "/bin/tar") "xzf"
457 source)
458 (chdir ,(string-append name "-" version))
459 (mkdir-p srcdir)
460 (copy-file "src/shflags"
461 (string-append srcdir "/shflags"))
462 #t)))))
b65195c2 463 (home-page "https://github.com/kward/shflags")
c7810bd1
EB
464 (synopsis "Command-line flags library for shell scripts")
465 (description
466 "Shell Flags (shFlags) is a library written to greatly simplify the
467handling of command-line flags in Bourne based Unix shell scripts (bash, dash,
468ksh, sh, zsh). Most shell scripts use getopt for flags processing, but the
469different versions of getopt on various OSes make writing portable shell
470scripts difficult. shFlags instead provides an API that doesn't change across
471shell and OS versions so the script writer can be confident that the script
472will work.")
369387b6 473 (license license:lgpl2.1)))
c7810bd1
EB
474
475(define-public git-flow
476 (package
477 (name "git-flow")
478 ;; This version has not be officially released yet, so we build it
479 ;; directly from the git repository.
480 (version "0.4.2-pre")
481 (source (origin
482 (method git-fetch)
483 (uri (git-reference
484 (url "https://github.com/nvie/gitflow/")
698bd297 485 (commit "15aab26490facf285acef56cb5d61025eacb3a69")))
c7810bd1
EB
486 (sha256
487 (base32
488 "01fs97q76fdfnvmrh2cyjhywcs3pykf1dg58sy0frflnsdzs6prx"))))
489 (build-system gnu-build-system)
490 (inputs `(("shflags" ,shflags)))
491 (arguments
492 '(#:tests? #f ; no tests
493 #:make-flags (list (string-append "prefix="
494 (assoc-ref %outputs "out")))
aac42d78
EF
495 #:phases
496 (modify-phases %standard-phases
497 (add-after 'unpack 'reset-shFlags-link
498 (lambda* (#:key inputs #:allow-other-keys)
499 ;; The link points to a file in the shFlags submodule.
500 ;; Redirect it to point to our system shFlags.
501 (let ((shflags (assoc-ref inputs "shflags")))
502 (begin
503 (delete-file "gitflow-shFlags")
504 (symlink (string-append shflags "/src/shflags")
505 "gitflow-shFlags")))))
506 (delete 'configure)
507 (delete 'build))))
c7810bd1
EB
508 (home-page "http://nvie.com/posts/a-successful-git-branching-model/")
509 (synopsis "Git extensions for Vincent Driessen's branching model")
510 (description
511 "Vincent Driessen's branching model is a git branching and release
512management strategy that helps developers keep track of features, hotfixes,
513and releases in bigger software projects. The git-flow library of git
514subcommands helps automate some parts of the flow to make working with it a
515lot easier.")
369387b6 516 (license license:bsd-2)))
c7810bd1 517
a63094a7 518(define-public git-test-sequence
698bd297 519 (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76"))
a63094a7
EB
520 (package
521 (name "git-test-sequence")
698bd297 522 (version (string-append "20140312." (string-take commit 7)))
a63094a7
EB
523 (source (origin
524 (method git-fetch)
525 (uri (git-reference
526 ;; There are many other scripts in this directory; we
527 ;; are interested in just one for this package.
528 (url "https://github.com/dustin/bindir")
529 (commit commit)))
530 (sha256
531 (base32
532 "1dcq0y16yznbv4k9h8gg90kv1gkn8r8dbvl4m2rpfd7q5nqhn617"))))
533 (build-system trivial-build-system)
534 (arguments
535 `(#:modules ((guix build utils))
536 #:builder (begin
537 (use-modules (guix build utils))
538 (let* ((source (assoc-ref %build-inputs "source"))
539 (output (assoc-ref %outputs "out"))
540 (bindir (string-append output "/bin"))
541 (script "git-test-sequence"))
96c46210
LC
542 (install-file (string-append source "/" script)
543 bindir)
544 #t))))
a63094a7
EB
545 (home-page "http://dustin.sallings.org/2010/03/28/git-test-sequence.html")
546 (synopsis "Run a command over a sequence of commits")
547 (description
548 "git-test-sequence is similar to an automated git bisect except it’s
549linear. It will test every change between two points in the DAG. It will
550also walk each side of a merge and test those changes individually.")
369387b6 551 (license (license:x11-style "file://LICENSE")))))
a63094a7 552
378b01dc
DT
553(define-public gitolite
554 (package
555 (name "gitolite")
20109e07 556 (version "3.6.5")
378b01dc
DT
557 (source (origin
558 (method url-fetch)
559 (uri (string-append
560 "https://github.com/sitaramc/gitolite/archive/v"
561 version ".tar.gz"))
562 (file-name (string-append name "-" version ".tar.gz"))
378b01dc
DT
563 (sha256
564 (base32
20109e07 565 "0xpqg04gyr4dhdhxx5lbk61lwwd5ml32530bigg2qy663icngwqm"))))
378b01dc
DT
566 (build-system gnu-build-system)
567 (arguments
568 '(#:tests? #f ; no tests
569 #:phases (modify-phases %standard-phases
570 (delete 'configure)
571 (delete 'build)
572 (add-before 'install 'patch-scripts
573 (lambda* (#:key inputs #:allow-other-keys)
574 (let ((perl (string-append (assoc-ref inputs "perl")
575 "/bin/perl")))
576 ;; This seems to take care of every shell script that
577 ;; invokes Perl.
578 (substitute* (find-files "." ".*")
579 ((" perl -")
580 (string-append " " perl " -"))))))
581 (replace 'install
582 (lambda* (#:key outputs #:allow-other-keys)
583 (let* ((output (assoc-ref outputs "out"))
584 (sharedir (string-append output "/share/gitolite"))
585 (bindir (string-append output "/bin")))
586 (mkdir-p sharedir)
587 (mkdir-p bindir)
588 (system* "./install" "-to" sharedir)
589 ;; Create symlinks for executable scripts in /bin.
590 (for-each (lambda (script)
591 (symlink (string-append sharedir "/" script)
592 (string-append bindir "/" script)))
593 '("gitolite" "gitolite-shell"))
594 #t))))))
595 (inputs
596 `(("perl" ,perl)))
597 ;; git and openssh are propagated because trying to patch the source via
598 ;; regexp matching is too brittle and prone to false positives.
599 (propagated-inputs
600 `(("git" ,git)
601 ("openssh" ,openssh)))
602 (home-page "http://gitolite.com")
603 (synopsis "Git access control layer")
604 (description
605 "Gitolite is an access control layer on top of Git, providing fine access
606control to Git repositories.")
369387b6 607 (license license:gpl2)))
378b01dc 608
5151c2e1
AB
609(define-public mercurial
610 (package
611 (name "mercurial")
79f9d5d5 612 (version "3.9")
5151c2e1
AB
613 (source (origin
614 (method url-fetch)
5575917d
EF
615 (uri (string-append "https://www.mercurial-scm.org/"
616 "release/mercurial-" version ".tar.gz"))
5151c2e1
AB
617 (sha256
618 (base32
79f9d5d5 619 "1g6svg7fc1kyaxq653iwsvdh8hp2lrhs2ywazfc436a4zzf2akw3"))))
5151c2e1
AB
620 (build-system python-build-system)
621 (arguments
622 `(;; Restrict to Python 2, as Python 3 would require
623 ;; the argument --c2to3.
624 #:python ,python-2
625 ;; FIXME: Disabled tests because they require the nose unit
626 ;; testing framework: https://nose.readthedocs.org/en/latest/ .
627 #:tests? #f))
5575917d 628 (home-page "https://www.mercurial-scm.org/")
5151c2e1
AB
629 (synopsis "Decentralized version control system")
630 (description
631 "Mercurial is a free, distributed source control management tool.
632It efficiently handles projects of any size
633and offers an easy and intuitive interface.")
369387b6 634 (license license:gpl2+)))
5151c2e1 635
fc1e4516
AE
636(define-public neon
637 (package
638 (name "neon")
892f92b7 639 (version "0.30.1")
fc1e4516
AE
640 (source (origin
641 (method url-fetch)
642 (uri (string-append "http://www.webdav.org/neon/neon-"
643 version ".tar.gz"))
644 (sha256
645 (base32
892f92b7 646 "1pawhk02x728xn396a1kcivy9gqm94srmgad6ymr9l0qvk02dih0"))))
fc1e4516
AE
647 (build-system gnu-build-system)
648 (native-inputs
649 `(("perl" ,perl)
650 ("pkg-config" ,pkg-config)))
651 (inputs
652 `(("libxml2" ,libxml2)
653 ("openssl" ,openssl)
654 ("zlib" ,zlib)))
655 (arguments
656 `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
657 ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
658 #:tests? #f
659 #:configure-flags '("--enable-shared"
660 ;; requires libgnutils-config, deprecated
661 ;; in gnutls 2.8.
662 ; "--with-ssl=gnutls")))
663 "--with-ssl=openssl")))
664 (home-page "http://www.webdav.org/neon/")
665 (synopsis "HTTP and WebDAV client library")
666 (description "Neon is an HTTP and WebDAV client library, with a
667C interface. Features:
668High-level wrappers for common HTTP and WebDAV operations (GET, MOVE,
669DELETE, etc.);
670low-level interface to the HTTP request/response engine, allowing the use
671of arbitrary HTTP methods, headers, etc.;
672authentication support including Basic and Digest support, along with
673GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32;
674SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
675verifying server certificates, handling client certificates, and examining
676certificate properties, smartcard-based client certificates are also
677supported via a PKCS#11 wrapper interface;
678abstract interface to parsing XML using libxml2 or expat, and wrappers for
679simplifying handling XML HTTP response bodies;
680WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
681property manipulation.")
369387b6 682 (license license:gpl2+))) ; for documentation and tests; source under lgpl2.0+
fc1e4516 683
cf3fe3b0
CR
684(define-public subversion
685 (package
686 (name "subversion")
491f2918 687 (version "1.8.17")
cf3fe3b0
CR
688 (source (origin
689 (method url-fetch)
ce84c924 690 (uri (string-append "https://archive.apache.org/dist/subversion/"
7639105b 691 "subversion-" version ".tar.bz2"))
cf3fe3b0
CR
692 (sha256
693 (base32
491f2918 694 "1450fkj1jmxyphqn6cd95z1ykwsabajm9jw4i412qpwss8w9a4fy"))))
cf3fe3b0 695 (build-system gnu-build-system)
8b2fe785 696 (arguments
7c5a1454
EF
697 '(#:phases
698 (modify-phases %standard-phases
699 (add-after 'configure 'patch-libtool-wrapper-ls
700 (lambda* (#:key inputs #:allow-other-keys)
701 ;; This substitution allows tests svnauthz_tests and svnlook_tests
702 ;; to pass. These tests execute svnauthz and svnlook through
703 ;; their libtool wrapper scripts from svn hooks, whose empty
704 ;; environments cause "ls: command not found" errors. It would be
705 ;; nice if this fix ultimately made its way into libtool.
706 (let ((coreutils (assoc-ref inputs "coreutils")))
707 (substitute* "libtool"
491f2918
EF
708 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls")))
709 #t)))
7c5a1454
EF
710 (add-after 'install 'install-perl-bindings
711 (lambda* (#:key outputs #:allow-other-keys)
712 ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
713 (let ((out (assoc-ref outputs "out")))
714 (and (zero? (system* "make" "swig-pl-lib"))
715 ;; FIXME: Test failures.
716 ;; (zero? (system* "make" "check-swig-pl"))
717 (zero? (system* "make" "install-swig-pl-lib"))
718
719 ;; Set the right installation prefix.
720 (with-directory-excursion
721 "subversion/bindings/swig/perl/native"
722 (and (zero?
723 (system* "perl" "Makefile.PL"
724 (string-append "PREFIX=" out)))
725 (zero?
726 (system* "make" "install"
727 (string-append "OTHERLDFLAGS="
728 "-Wl,-rpath="
729 out "/lib"))))))))))))
8b2fe785 730 (native-inputs
98b79d36
AE
731 `(("pkg-config" ,pkg-config)
732 ;; For the Perl bindings.
733 ("swig" ,swig)))
cf3fe3b0 734 (inputs
2b24faa2
AE
735 `(("apr" ,apr)
736 ("apr-util" ,apr-util)
46138f3e 737 ("serf" ,serf)
cf3fe3b0 738 ("perl" ,perl)
aa9e22ef 739 ("python" ,python-2) ; incompatible with Python 3 (print syntax)
cf3fe3b0
CR
740 ("sqlite" ,sqlite)
741 ("zlib" ,zlib)))
ce84c924 742 (home-page "https://subversion.apache.org/")
35b9e423 743 (synopsis "Revision control system")
cf3fe3b0 744 (description
749b90a5
LC
745 "Subversion exists to be universally recognized and adopted as a
746centralized version control system characterized by its
cf3fe3b0
CR
747reliability as a safe haven for valuable data; the simplicity of its model and
748usage; and its ability to support the needs of a wide variety of users and
749projects, from individuals to large-scale enterprise operations.")
369387b6 750 (license license:asl2.0)))
cf3fe3b0 751
1b1c335f
LC
752(define-public rcs
753 (package
754 (name "rcs")
73ebc66f 755 (version "5.9.4")
1b1c335f
LC
756 (source (origin
757 (method url-fetch)
758 (uri (string-append "mirror://gnu/rcs/rcs-"
759 version ".tar.xz"))
760 (sha256
761 (base32
73ebc66f 762 "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86"))))
1b1c335f 763 (build-system gnu-build-system)
740c24df 764 (native-inputs `(("ed" ,ed)))
1b1c335f
LC
765 (home-page "http://www.gnu.org/software/rcs/")
766 (synopsis "Per-file local revision control system")
767 (description
79c311b8
LC
768 "RCS is the original Revision Control System. It works on a
769file-by-file basis, in contrast to subsequent version control systems such as
770CVS, Subversion, and Git. This can make it suitable for system
771administration files, for example, which are often inherently local to one
772machine.")
369387b6 773 (license license:gpl3+)))
1972fed4
LC
774
775(define-public cvs
776 (package
777 (name "cvs")
778 (version "1.12.13")
779 (source (origin
780 (method url-fetch)
781 (uri (string-append
782 "http://ftp.gnu.org/non-gnu/cvs/source/feature/"
783 version "/cvs-" version ".tar.bz2"))
784 (sha256
785 (base32
786 "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq"))))
787 (build-system gnu-build-system)
788 (arguments
789 ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
7fbbd3e7
EF
790 '(#:tests? #f
791 #:configure-flags (list "--with-external-zlib")))
1972fed4
LC
792 (inputs `(("zlib" ,zlib)
793 ("nano" ,nano))) ; the default editor
794 (home-page "http://cvs.nongnu.org")
795 (synopsis "Historical centralized version control system")
796 (description
797 "CVS is a version control system, an important component of Source
798Configuration Management (SCM). Using it, you can record the history of
799sources files, and documents. It fills a similar role to the free software
800RCS, PRCS, and Aegis packages.")
369387b6 801 (license license:gpl1+)))
a4572a17 802
59ef2030
ML
803(define-public cvs-fast-export
804 (package
805 (name "cvs-fast-export")
806 (version "1.33")
807 (source (origin
808 (method url-fetch)
809 (uri (string-append "http://www.catb.org/~esr/"
810 name "/" name "-" version ".tar.gz"))
811 (sha256
812 (base32
813 "1c3s4nacbwlaaccx1fr7hf72kxxrzy49y2rdz5hhqbk8r29vm8w1"))))
814 (build-system gnu-build-system)
815 (arguments
816 `(#:phases (modify-phases %standard-phases (delete 'configure))
817 #:make-flags
818 (list "CC=gcc" (string-append "prefix?=" (assoc-ref %outputs "out")))))
819 (inputs `(("git" ,git)))
820 (native-inputs `(("asciidoc" ,asciidoc)
821 ("docbook-xml" ,docbook-xml)
822 ("docbook-xsl" ,docbook-xsl)
823 ("xmllint" ,libxml2)
824 ("xsltproc" ,libxslt)
825 ;; These are needed for the tests.
826 ("cvs" ,cvs)
827 ("python" ,python-2)
828 ("rcs" ,rcs)))
829 (home-page "http://www.catb.org/esr/cvs-fast-export/")
830 (synopsis "Export an RCS or CVS history as a fast-import stream")
831 (description "This program analyzes a collection of RCS files in a CVS
832repository (or outside of one) and, when possible, emits an equivalent history
833in the form of a fast-import stream. Not all possible histories can be
834rendered this way; the program tries to emit useful warnings when it can't.
835
836The program can also produce a visualization of the resulting commit directed
837acyclic graph (DAG) in the input format of @uref{http://www.graphviz.org,
838Graphviz}. The package also includes @command{cvssync}, a tool for mirroring
839masters from remote CVS hosts.")
369387b6 840 (license license:gpl2+)))
59ef2030 841
a4572a17
LC
842(define-public vc-dwim
843 (package
844 (name "vc-dwim")
845 (version "1.7")
846 (source (origin
847 (method url-fetch)
848 (uri (string-append "mirror://gnu/vc-dwim/vc-dwim-"
849 version ".tar.xz"))
850 (sha256
851 (base32
852 "094pjwshvazlgagc254in2xvrp93vhcj0kb5ms17qs7sch99x9z2"))))
853 (build-system gnu-build-system)
854 (inputs `(("perl" ,perl)
6aaf3899 855 ("inetutils" ,inetutils))) ; for `hostname', used in the tests
b8fc3622 856 (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags'
a4572a17
LC
857 (home-page "http://www.gnu.org/software/vc-dwim/")
858 (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
859 (description
a22dc0c4
LC
860 "The vc-dwim package contains two tools, \"vc-dwim\" and \"vc-chlog\".
861vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and
862using version control at the same time, for example by printing a reminder
863when a file change has been described in the ChangeLog but the file has not
79c311b8 864been added to the VC. vc-chlog scans changed files and generates
a22dc0c4 865standards-compliant ChangeLog entries based on the changes that it detects.")
369387b6 866 (license license:gpl3+)))
83a39ed7
LC
867
868(define-public diffstat
869 (package
870 (name "diffstat")
871 (version "1.58")
872 (source (origin
873 (method url-fetch)
874 (uri (string-append
875 "ftp://invisible-island.net/diffstat/diffstat-"
876 version ".tgz"))
877 (sha256
878 (base32
879 "14rpf5c05ff30f6vn6pn6pzy0k4g4is5im656ahsxff3k58i7mgs"))))
880 (build-system gnu-build-system)
881 (home-page "http://invisible-island.net/diffstat/")
882 (synopsis "Make histograms from the output of 'diff'")
883 (description
35b9e423 884 "Diffstat reads the output of 'diff' and displays a histogram of the
83a39ed7
LC
885insertions, deletions, and modifications per-file. It is useful for reviewing
886large, complex patch files.")
369387b6 887 (license (license:x11-style "file://COPYING"))))
25f76ef0 888
25f76ef0
JD
889(define-public cssc
890 (package
891 (name "cssc")
32fd2600 892 (version "1.4.0")
25f76ef0
JD
893 (source (origin
894 (method url-fetch)
895 (uri (string-append "mirror://gnu/" name "/CSSC-"
896 version ".tar.gz"))
897 (sha256
898 (base32
32fd2600 899 "15191dh8hr46cvssmv4v52gymiiyk6ca9j1bfimlqakcqab6y51h"))))
25f76ef0
JD
900 (build-system gnu-build-system)
901 (arguments
bf3c57ff
EF
902 `(#:phases
903 (modify-phases %standard-phases
904 (add-before 'check 'precheck
905 (lambda _
906 (begin
907 (substitute* "tests/common/test-common"
908 (("/bin/pwd") (which "pwd")))
909
910 (substitute* "tests/prt/all-512.sh"
911 (("/bin/sh") (which "sh")))
912
913 ;; XXX: This test has no hope of passing until there is a "nogroup"
914 ;; entry (or at least some group to which the guix builder does
915 ;; not belong) in the /etc/group file of the build environment.
916 ;; Currently we do not have such a group. Disable this test for now.
917 (substitute* "tests/Makefile"
918 (("test-delta ") ""))))))))
25f76ef0
JD
919 ;; These are needed for the tests
920 (native-inputs `(("git" ,git)
921 ("cvs" ,cvs)))
922 (home-page "http://www.gnu.org/software/cssc/")
923 (synopsis "File-based version control like SCCS")
924 (description "GNU CSSC provides a replacement for the legacy Unix source
925code control system SCCS. This allows old code still under that system to be
926accessed and migrated on modern systems.")
369387b6 927 (license license:gpl3+)))
0e534e74 928
e881752c 929;; This package can unfortunately work only in -TEST mode, since Aegis
0e534e74
JD
930;; requires that it is installed setuid root.
931(define-public aegis
932 (package
933 (name "aegis")
934 (version "4.24")
935 (source (origin
936 (method url-fetch)
de67e922
LF
937 (uri (string-append "mirror://sourceforge/aegis/aegis/" version
938 "/aegis-" version ".tar.gz"))
0e534e74
JD
939 (sha256
940 (base32
941 "18s86ssarfmc4l17gbpzybca29m5wa37cbaimdji8czlcry3mcjl"))
fc1adab1
AK
942 (patches (search-patches "aegis-perl-tempdir1.patch"
943 "aegis-perl-tempdir2.patch"
944 "aegis-test-fixup-1.patch"
945 "aegis-test-fixup-2.patch"
946 "aegis-constness-error.patch"))))
0e534e74
JD
947 (build-system gnu-build-system)
948 (inputs
949 `(("e2fsprogs" ,e2fsprogs)
950 ("curl" ,curl)
0253ab39 951 ("file" ,file)
0e534e74
JD
952 ("libxml2" ,libxml2)
953 ("zlib" ,zlib)
b94a6ca0 954 ("gettext" ,gettext-minimal)))
0e534e74
JD
955 (native-inputs
956 `(("bison" ,bison)
957 ("groff" ,groff)
958 ("perl" ,perl)
959 ;; Various tests require the following:
e881752c 960 ("cvs" ,cvs)
0e534e74
JD
961 ("flex" ,flex)
962 ("cook" ,cook)
963 ("subversion" ,subversion)
964 ("rcs" ,rcs)
965 ("ed" ,ed)))
966 (arguments
e881752c 967 `(#:configure-flags (list "--with-no-aegis-configured"
0e534e74
JD
968 "--sharedstatedir=/var/com/aegis")
969 #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
e881752c 970 #:phases
8ef843c7
EF
971 (modify-phases %standard-phases
972 (add-before 'configure 'pre-conf
973 (lambda _
974 (substitute* (append '("configure"
975 "etc/check-tar-gz.sh"
976 "etc/patches.sh"
977 "etc/test.sh"
978 "script/aexver.in"
979 "script/aebisect.in"
980 "script/aeintegratq.in"
981 "script/tkaegis.in"
982 "script/test_funcs.in"
983 "web/eg_oss_templ.sh"
984 "web/webiface.html"
985 "libaegis/getpw_cache.cc")
986 (find-files "test" "\\.sh"))
987 (("/bin/sh") (which "sh")))
988 (setenv "SH" (which "sh"))))
989 (replace 'check
990 (lambda _
991 (let ((home (string-append (getcwd) "/my-new-home")))
992 ;; Some tests need to write to $HOME.
993 (mkdir home)
994 (setenv "HOME" home)
995
996 ;; This test assumes that flex has been symlinked to "lex".
997 (substitute* "test/00/t0011a.sh"
998 (("type lex") "type flex"))
999
1000 ;; The author decided to call the check rule "sure".
1001 (zero? (system* "make" "sure"))))))))
0e534e74
JD
1002 (home-page "http://aegis.sourceforge.net")
1003 (synopsis "Project change supervisor")
1004 (description "Aegis is a project change supervisor, and performs some of
35b9e423 1005the Software Configuration Management needed in a CASE environment. Aegis
0e534e74
JD
1006provides a framework within which a team of developers may work on many
1007changes to a program independently, and Aegis coordinates integrating these
1008changes back into the master source of the program, with as little disruption
35b9e423 1009as possible. Resolution of contention for source files, a major headache for
0e534e74 1010any project with more than one developer, is one of Aegis's major functions.")
369387b6 1011 (license license:gpl3+)))
2459141e 1012
62063d85
ML
1013(define-public reposurgeon
1014 (package
1015 (name "reposurgeon")
1016 (version "3.37")
1017 (source (origin
1018 (method url-fetch)
1019 (uri (string-append "http://www.catb.org/~esr/" name "/"
1020 name "-" version ".tar.xz"))
1021 (sha256
1022 (base32
1023 "14asjg4xy3mhh5z0r3k7c1wv9y803j2zfq32g5q5m95sf7yzygan"))))
1024 (build-system gnu-build-system)
1025 (arguments
1026 `(#:tests? #f ;no test suite distributed
1027 #:make-flags
1028 (list (string-append "target=" (assoc-ref %outputs "out")))
1029 #:phases
1030 (modify-phases %standard-phases
1031 (delete 'configure)
1032 (add-before 'build 'fix-docbook
1033 (lambda* (#:key inputs #:allow-other-keys)
1034 (substitute* (find-files "." "\\.xml$")
1035 (("docbook/docbookx.dtd")
1036 (string-append (assoc-ref inputs "docbook-xml")
1037 "/xml/dtd/docbook/docbookx.dtd")))
1038 #t))
1039 (add-after 'install 'install-emacs-data
1040 (lambda* (#:key outputs #:allow-other-keys)
1041 (install-file "reposurgeon-mode.el"
1042 (string-append (assoc-ref outputs "out")
1043 "/share/emacs/site-lisp")))))))
1044 (inputs
1045 `(("python" ,python-wrapper)))
1046 (native-inputs
1047 `(("asciidoc" ,asciidoc)
1048 ("docbook-xml" ,docbook-xml-4.1.2)
1049 ("docbook-xsl" ,docbook-xsl)
1050 ("libxml2" ,libxml2)
1051 ("xmlto" ,xmlto)))
1052 (home-page "http://www.catb.org/~esr/reposurgeon/")
1053 (synopsis "Edit version-control repository history")
1054 (description "Reposurgeon enables risky operations that version-control
1055systems don't want to let you do, such as editing past comments and metadata
1056and removing commits. It works with any version control system that can
1057export and import Git fast-import streams, including Git, Mercurial, Fossil,
1058Bazaar, CVS, RCS, and Src. It can also read Subversion dump files directly
1059and can thus be used to script production of very high-quality conversions
1060from Subversion to any supported Distributed Version Control System (DVCS).")
1061 ;; Most files are distributed under bsd-2, except 'repocutter' which is
1062 ;; under bsd-3.
369387b6 1063 (license (list license:bsd-2 license:bsd-3))))
62063d85 1064
2459141e
1065(define-public tig
1066 (package
1067 (name "tig")
50feff81 1068 (version "2.2")
2459141e
1069 (source (origin
1070 (method url-fetch)
1071 (uri (string-append
1072 "http://jonas.nitro.dk/tig/releases/tig-"
1073 version ".tar.gz"))
1074 (sha256
1075 (base32
50feff81 1076 "0k3m894vfkgkj7xbr0j6ph91351dl6id5f0hk2ksjp5lmg9i6llg"))))
2459141e 1077 (build-system gnu-build-system)
2203e4c2
EF
1078 (native-inputs
1079 `(("asciidoc" ,asciidoc)
1080 ("xmlto" ,xmlto)))
2459141e 1081 (inputs
d0e11e8b
EF
1082 `(("ncurses" ,ncurses)
1083 ("readline" ,readline)))
2459141e 1084 (arguments
2203e4c2
EF
1085 `(#:phases
1086 (modify-phases %standard-phases
1087 (add-after 'install 'install-doc
1088 (lambda _
1089 (zero? (system* "make" "install-doc")))))
1090 #:tests? #f)) ; tests require access to /dev/tty
92d9a36e 1091 ;;`(#:test-target "test"))
2459141e
1092 (home-page "http://jonas.nitro.dk/tig/")
1093 (synopsis "Ncurses-based text user interface for Git")
1094 (description
1095 "Tig is an ncurses text user interface for Git, primarily intended as
1096a history browser. It can also stage hunks for commit, or colorize the
1097output of the 'git' command.")
369387b6 1098 (license license:gpl2+)))
df7393b9
LC
1099
1100(define-public findnewest
1101 (package
1102 (name "findnewest")
9c7e7ead 1103 (version "0.3")
df7393b9
LC
1104 (source (origin
1105 (method url-fetch)
1106 (uri (string-append
1107 "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
1108 version ".tar.gz"))
1109 (sha256
1110 (base32
9c7e7ead 1111 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
df7393b9
LC
1112 (build-system gnu-build-system)
1113 (arguments
1114 '(#:phases (modify-phases %standard-phases
1115 (add-before 'configure 'bootstrap
1116 (lambda _
1117 (zero? (system* "autoreconf" "-vfi")))))))
1118 (native-inputs `(("autoconf" ,autoconf)
1119 ("automake" ,automake)))
1120 (home-page "https://github.com/0-wiz-0/findnewest/releases")
1121 (synopsis "Print the modification time of the latest file")
1122 (description
1123 "Recursively find the newest file in a file tree and print its
1124modification time.")
369387b6 1125 (license license:bsd-2)))
e92b8599
KM
1126
1127(define-public myrepos
1128 (package
1129 (name "myrepos")
17206f72 1130 (version "1.20160123")
e92b8599
KM
1131 (source
1132 (origin
1133 (method url-fetch)
1134 (uri (string-append
1135 "https://github.com/joeyh/myrepos/archive/"
1136 version ".tar.gz"))
1137 (file-name (string-append name "-" version ".tar.gz"))
1138 (sha256
17206f72 1139 (base32 "1723cg5haplz2w9dwdzp6ds1ip33cx3awmj4wnb0h4yq171v5lqk"))))
e92b8599
KM
1140 (build-system gnu-build-system)
1141 (inputs
1142 `(("perl" ,perl)))
1143 (arguments
1144 `(#:test-target "test"
1145 #:phases (alist-delete 'configure %standard-phases)
1146 #:make-flags (list (string-append "PREFIX=" %output))))
1147 (home-page "http://myrepos.branchable.com/")
1148 (synopsis "Multiple repository management tool")
1149 (description
1150 "Myrepos provides the @code{mr} command, which maps an operation (e.g.,
1151fetching updates) over a collection of version control repositories. It
1152supports a large number of version control systems: Git, Subversion,
1153Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
369387b6 1154 (license license:gpl2+)))
e8d2168c
EF
1155
1156(define-public git-annex-remote-hubic
1157 (package
1158 (name "git-annex-remote-hubic")
1159 (version "0.3.1")
1160 (source (origin
1161 (method url-fetch)
1162 (uri (string-append
1163 "https://github.com/Schnouki/" name "/archive/v"
1164 version ".tar.gz"))
1165 (file-name (string-append name "-" version ".tar.gz"))
1166 (sha256
1167 (base32
1168 "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
1169 (build-system python-build-system)
f71d1a08 1170 (arguments `(#:python ,python-2))
e8d2168c 1171 (native-inputs
f3b98f4f 1172 `(;; for the tests
f71d1a08 1173 ("python2-six" ,python2-six)))
e8d2168c 1174 (propagated-inputs
f71d1a08
EF
1175 `(("python2-dateutil" ,python2-dateutil-2)
1176 ("python2-futures" ,python2-futures)
1177 ("python2-rauth" ,python2-rauth)
1178 ("python2-swiftclient" ,python2-swiftclient)))
e8d2168c
EF
1179 (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
1180 (synopsis "Use hubic as a git-annex remote")
1181 (description
1182 "This package allows you to use your hubic account as a \"special
1183repository\" with git-annex.")
369387b6 1184 (license license:gpl3+)))
f36a1eba
EB
1185
1186(define-public fossil
1187 (package
1188 (name "fossil")
7a3f9405 1189 (version "1.35")
f36a1eba
EB
1190 (source
1191 (origin
1192 (method url-fetch)
f36a1eba 1193 (uri (string-append
7a3f9405
EF
1194 "https://www.fossil-scm.org/index.html/uv/download/"
1195 "fossil-src-" version ".tar.gz"))
f36a1eba
EB
1196 (sha256
1197 (base32
7a3f9405 1198 "07ds6rhq69bhydpm9a01mgdhxf88p9b6y5hdnhn8gjc7ba92zyf1"))))
f36a1eba
EB
1199 (build-system gnu-build-system)
1200 (native-inputs
1201 `(("tcl" ,tcl) ;for configuration only
1202 ("which" ,which) ;for tests only
1203 ("ed" ,ed))) ;ditto
1204 (inputs
1205 `(("openssl" ,openssl)
1206 ("zlib" ,zlib)
1207 ("sqlite" ,sqlite)))
1208 (arguments
1209 `(#:configure-flags (list "--with-openssl=auto"
1210 "--disable-internal-sqlite")
1211 #:test-target "test"
1212 #:phases (modify-phases %standard-phases
1213 (replace 'configure
1214 (lambda* (#:key outputs (configure-flags '())
1215 #:allow-other-keys)
1216 ;; The 'configure' script is not an autoconf script and
1217 ;; chokes on unrecognized options.
1218 (zero? (apply system*
1219 "./configure"
1220 (string-append "--prefix="
1221 (assoc-ref outputs "out"))
1222 configure-flags))))
1223 (add-before 'check 'test-setup
1224 (lambda _
1225 (setenv "USER" "guix")
1226 (setenv "TZ" "UTC")
1227 ;; Fixing the th1 test would require many backports, so
1228 ;; just disable for now.
1229 (delete-file "test/th1.test")
1230 #t)))))
1231 (home-page "https://fossil-scm.org")
1232 (synopsis "Software configuration management system")
1233 (description
1234 "Fossil is a distributed source control management system which supports
1235access and administration over HTTP CGI or via a built-in HTTP server. It has
1236a built-in wiki, built-in file browsing, built-in tickets system, etc.")
369387b6 1237 (license (list license:public-domain ;src/miniz.c, src/shell.c
1238 license:bsd-2))))
1062f245 1239
1240(define-public stagit
1241 (package
1242 (name "stagit")
1243 (version "0.4")
1244 (source (origin
1245 (method url-fetch)
1246 (uri (string-append "http://dl.2f30.org/releases/"
1247 name "-" version ".tar.gz"))
1248 (sha256
1249 (base32
1250 "0z5r06wqrfnsz24ci4hjqbd62svclvhkgzaq9npsyjcp6jnf7izc"))))
1251 (build-system gnu-build-system)
1252 (arguments
1253 `(#:tests? #f ; No tests
1254 #:make-flags (list "CC=gcc"
1255 (string-append "PREFIX=" %output))
1256 #:phases
1257 (modify-phases %standard-phases
1258 (delete 'configure)))) ; No configure script
1259 (inputs
1260 `(("libgit2" ,libgit2)))
1261 (home-page "http://2f30.org")
1262 (synopsis "Static git page generator")
1263 (description "Stagit creates static pages for git repositories, the results can
1264be served with a HTTP file server of your choice.")
1265 (license license:expat)))