gnu: orc: Update home page.
[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>
022c9772 4;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
fc1e4516 5;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
62063d85 6;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
6c0e2dbb 7;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
f36a1eba 8;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
f968f1a7 9;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
e92b8599 10;;; Copyright © 2015 Kyle Meyer <kyle@kyleam.com>
086e498b 11;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
d1cada04 12;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
877c6163 13;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
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")
17fc8da3 115 (version "2.12.2")
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
17fc8da3 122 "0jlccxx7l4c76h830y8lhrxr4kqksrxqlnmj3xb8sqbfa0irw6nj"))))
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
17fc8da3 135 "0n4mgw5mbrr1hm0y7xgwixf9p6gy61m6qm67ldagpxxhwq2dmlby"))))))
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")
82de2655 278 "/bin")))))))
d1cada04
LF
279 (add-after 'split 'install-man-pages
280 (lambda* (#:key inputs outputs #:allow-other-keys)
281 (let* ((out (assoc-ref outputs "out"))
282 (man (string-append out "/share/man"))
283 (manpages (assoc-ref inputs "git-manpages")))
284 (mkdir-p man)
285 (with-directory-excursion man
286 (zero? (system* "tar" "xvf" manpages)))))))))
da699774
LC
287
288 (native-search-paths
289 ;; For HTTPS access, Git needs a single-file certificate bundle, specified
290 ;; with $GIT_SSL_CAINFO.
291 ;; FIXME: This variable designates a single file; it is not a search path.
292 (list (search-path-specification
293 (variable "GIT_SSL_CAINFO")
6d461b21 294 (file-type 'regular)
82de2655
DC
295 (files '("etc/ssl/certs/ca-certificates.crt")))
296 (search-path-specification
297 (variable "GIT_EXEC_PATH")
298 (files '("libexec/git-core")))))
da699774 299
d9ff410f
AE
300 (synopsis "Distributed version control system")
301 (description
302 "Git is a free distributed version control system designed to handle
303everything from small to very large projects with speed and efficiency.")
369387b6 304 (license license:gpl2)
d9ff410f
AE
305 (home-page "http://git-scm.com/")))
306
4e835710
JD
307;; Some dependent packages directly access internal interfaces which
308;; have changed in 2.10
309(define-public git@2.9
310 (package
311 (inherit git)
312 (version "2.9.3")
313 (source (origin
314 (method url-fetch)
315 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
316 version ".tar.xz"))
317 (sha256
318 (base32
319 "0qzs681a64k3shh5p0rg41l1z16fbk5sj0xga45k34hp1hsp654z"))))))
320
086e498b
RW
321(define-public libgit2
322 (package
323 (name "libgit2")
022c9772 324 (version "0.25.1")
086e498b
RW
325 (source (origin
326 (method url-fetch)
327 (uri (string-append "https://github.com/libgit2/libgit2/"
328 "archive/v" version ".tar.gz"))
329 (file-name (string-append name "-" version ".tar.gz"))
330 (sha256
331 (base32
022c9772 332 "1cdwcw38frc1wf28x5ppddazv9hywc718j92f3xa3ybzzycyds3s"))))
086e498b
RW
333 (build-system cmake-build-system)
334 (arguments
335 `(#:phases
336 (modify-phases %standard-phases
337 (add-after 'unpack 'fix-hardcoded-paths
338 (lambda _
339 (substitute* "tests/repo/init.c"
340 (("#!/bin/sh") (string-append "#!" (which "sh"))))
341 (substitute* "tests/clar/fs.h"
342 (("/bin/cp") (which "cp"))
343 (("/bin/rm") (which "rm")))
344 #t))
a48a1071
LC
345 (add-after 'unpack 'apply-patch
346 (lambda* (#:key inputs #:allow-other-keys)
347 ;; XXX: For some reason adding the patch in 'patches', which
348 ;; leads to a new tarball with all timestamps reset and ordering
349 ;; by name (slightly different file order compared to the
350 ;; original tarball) leads to an obscure Python error while
351 ;; running 'generate.py':
352 ;; 'Module' object has no attribute 'callbacks'
353 ;; Thus, apply the patch here, which minimizes disruption.
354 (let ((patch (assoc-ref inputs "patch")))
355 (zero? (system* "patch" "-p1" "--force" "--input" patch)))))
086e498b
RW
356 ;; Run checks more verbosely.
357 (replace 'check
358 (lambda _ (zero? (system* "./libgit2_clar" "-v" "-Q")))))))
359 (inputs
360 `(("libssh2" ,libssh2)
361 ("libcurl" ,curl)
a48a1071
LC
362 ("python" ,python-wrapper)
363 ("patch" ,(search-patch "libgit2-use-after-free.patch"))))
086e498b
RW
364 (native-inputs
365 `(("pkg-config" ,pkg-config)))
413f71f3
LC
366 (propagated-inputs
367 ;; These two libraries are in 'Requires.private' in libgit2.pc.
368 `(("openssl" ,openssl)
369 ("zlib" ,zlib)))
9bf160a3 370 (home-page "https://libgit2.github.com/")
086e498b
RW
371 (synopsis "Library providing Git core methods")
372 (description
373 "Libgit2 is a portable, pure C implementation of the Git core methods
374provided as a re-entrant linkable library with a solid API, allowing you to
375write native speed custom Git applications in any language with bindings.")
376 ;; GPLv2 with linking exception
369387b6 377 (license license:gpl2)))
086e498b 378
53ff5495
DC
379(define-public git-crypt
380 (package
381 (name "git-crypt")
382 (version "0.5.0")
383 (source (origin
384 (method url-fetch)
385 (uri (string-append "https://github.com/AGWA/git-crypt"
386 "/archive/" version ".tar.gz"))
387 (file-name (string-append name "-" version ".tar.gz"))
388 (sha256
389 (base32
390 "0454fdmgm5f3razkn8n03lfqm5zyzvr4r2528zmlxiwba9518l2i"))))
391 (build-system gnu-build-system)
392 (inputs
393 `(("git" ,git)
394 ("openssl" ,openssl)))
395 (arguments
396 `(#:tests? #f ; No tests.
397 #:phases
398 (modify-phases %standard-phases
399 (delete 'configure)
400 (replace 'build
401 (lambda _
402 (zero? (system* "make"))))
403 (replace 'install
404 (lambda* (#:key outputs #:allow-other-keys)
405 (let ((out (assoc-ref outputs "out")))
406 (zero? (system* "make" "install"
407 (string-append "PREFIX=" out)))))))))
408 (home-page "https://www.agwa.name/projects/git-crypt")
409 (synopsis "Transparent encryption of files in a git repository")
410 (description "git-crypt enables transparent encryption and decryption of
411files in a git repository. Files which you choose to protect are encrypted when
412committed, and decrypted when checked out. git-crypt lets you freely share a
413repository containing a mix of public and private content. git-crypt gracefully
414degrades, so developers without the secret key can still clone and commit to a
415repository with encrypted files. This lets you store your secret material (such
416as keys or passwords) in the same repository as your code, without requiring you
417to lock down your entire repository.")
418 (license license:gpl3+)))
419
7ad1fee5
SB
420(define-public cgit
421 (package
422 (name "cgit")
569d9efe 423 (version "1.0")
7ad1fee5
SB
424 (source (origin
425 (method url-fetch)
426 (uri (string-append
427 "https://git.zx2c4.com/cgit/snapshot/cgit-"
428 version ".tar.xz"))
429 (sha256
430 (base32
569d9efe 431 "0kbh835p7dl4h88qv55fyfh1za09cgnqh63rii325w9215hm95x8"))))
7ad1fee5
SB
432 (build-system gnu-build-system)
433 (arguments
434 '(#:tests? #f ; XXX: fail to build the in-source git.
435 #:test-target "test"
436 #:make-flags '("CC=gcc" "SHELL_PATH=sh")
437 #:phases
438 (modify-phases %standard-phases
439 (add-after 'unpack 'unpack-git
440 (lambda* (#:key inputs #:allow-other-keys)
441 ;; Unpack the source of git into the 'git' directory.
442 (zero? (system*
443 "tar" "--strip-components=1" "-C" "git" "-xf"
444 (assoc-ref inputs "git:src")))))
445 (delete 'configure) ; no configure script
446 (add-after 'build 'build-man
447 (lambda* (#:key make-flags #:allow-other-keys)
448 (zero? (apply system* `("make" ,@make-flags "doc-man")))))
449 (replace 'install
450 (lambda* (#:key make-flags outputs #:allow-other-keys)
451 (let ((out (assoc-ref outputs "out")))
452 (and (zero? (apply system*
453 `("make" ,@make-flags
454 ,(string-append "prefix=" out)
455 ,(string-append
456 "CGIT_SCRIPT_PATH=" out "/share/cgit")
457 "install" "install-man")))
458 ;; Move the platform-dependent 'cgit.cgi' into lib
459 ;; to get it stripped.
460 (rename-file (string-append out "/share/cgit/cgit.cgi")
461 (string-append out "/lib/cgit/cgit.cgi"))
462 #t)))))))
463 (native-inputs
464 ;; For building manpage.
4b0e6367 465 `(("asciidoc" ,asciidoc)))
7ad1fee5 466 (inputs
4e835710 467 `(("git:src" ,(package-source git@2.9))
7ad1fee5
SB
468 ("openssl" ,openssl)
469 ("zlib" ,zlib)))
470 (home-page "https://git.zx2c4.com/cgit/")
471 (synopsis "Web frontend for git repositories")
472 (description
473 "CGit is an attempt to create a fast web interface for the Git SCM, using
474a built-in cache to decrease server I/O pressure.")
369387b6 475 (license license:gpl2)))
7ad1fee5 476
c7810bd1
EB
477(define-public shflags
478 (package
479 (name "shflags")
b65195c2 480 (version "1.2.0")
c7810bd1
EB
481 (source (origin
482 (method url-fetch)
b65195c2
EF
483 (uri (string-append "https://github.com/kward/shflags/archive/v"
484 version ".tar.gz"))
c7810bd1
EB
485 (sha256
486 (base32
b65195c2 487 "0zxw12haylaq60a335xlqcs4afw2zrgwqymmpw0m21r51w6irdmr"))))
c7810bd1
EB
488 (build-system trivial-build-system)
489 (native-inputs `(("tar" ,tar)
490 ("gzip" ,gzip)))
491 (arguments
492 `(#:modules ((guix build utils))
493 #:builder (begin
494 (use-modules (guix build utils))
495 (let* ((source (assoc-ref %build-inputs "source"))
496 (tar (assoc-ref %build-inputs "tar"))
497 (gzip (assoc-ref %build-inputs "gzip"))
498 (output (assoc-ref %outputs "out"))
499 (srcdir (string-append output "/src")))
500 (begin
501 (setenv "PATH" (string-append gzip "/bin"))
502 (system* (string-append tar "/bin/tar") "xzf"
503 source)
504 (chdir ,(string-append name "-" version))
505 (mkdir-p srcdir)
506 (copy-file "src/shflags"
507 (string-append srcdir "/shflags"))
508 #t)))))
b65195c2 509 (home-page "https://github.com/kward/shflags")
c7810bd1
EB
510 (synopsis "Command-line flags library for shell scripts")
511 (description
512 "Shell Flags (shFlags) is a library written to greatly simplify the
513handling of command-line flags in Bourne based Unix shell scripts (bash, dash,
514ksh, sh, zsh). Most shell scripts use getopt for flags processing, but the
515different versions of getopt on various OSes make writing portable shell
516scripts difficult. shFlags instead provides an API that doesn't change across
517shell and OS versions so the script writer can be confident that the script
518will work.")
369387b6 519 (license license:lgpl2.1)))
c7810bd1
EB
520
521(define-public git-flow
522 (package
523 (name "git-flow")
524 ;; This version has not be officially released yet, so we build it
525 ;; directly from the git repository.
526 (version "0.4.2-pre")
527 (source (origin
528 (method git-fetch)
529 (uri (git-reference
530 (url "https://github.com/nvie/gitflow/")
698bd297 531 (commit "15aab26490facf285acef56cb5d61025eacb3a69")))
c7810bd1
EB
532 (sha256
533 (base32
534 "01fs97q76fdfnvmrh2cyjhywcs3pykf1dg58sy0frflnsdzs6prx"))))
535 (build-system gnu-build-system)
536 (inputs `(("shflags" ,shflags)))
537 (arguments
538 '(#:tests? #f ; no tests
539 #:make-flags (list (string-append "prefix="
540 (assoc-ref %outputs "out")))
aac42d78
EF
541 #:phases
542 (modify-phases %standard-phases
543 (add-after 'unpack 'reset-shFlags-link
544 (lambda* (#:key inputs #:allow-other-keys)
545 ;; The link points to a file in the shFlags submodule.
546 ;; Redirect it to point to our system shFlags.
547 (let ((shflags (assoc-ref inputs "shflags")))
548 (begin
549 (delete-file "gitflow-shFlags")
550 (symlink (string-append shflags "/src/shflags")
551 "gitflow-shFlags")))))
552 (delete 'configure)
553 (delete 'build))))
c7810bd1
EB
554 (home-page "http://nvie.com/posts/a-successful-git-branching-model/")
555 (synopsis "Git extensions for Vincent Driessen's branching model")
556 (description
557 "Vincent Driessen's branching model is a git branching and release
558management strategy that helps developers keep track of features, hotfixes,
559and releases in bigger software projects. The git-flow library of git
560subcommands helps automate some parts of the flow to make working with it a
561lot easier.")
369387b6 562 (license license:bsd-2)))
c7810bd1 563
a63094a7 564(define-public git-test-sequence
698bd297 565 (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76"))
a63094a7
EB
566 (package
567 (name "git-test-sequence")
698bd297 568 (version (string-append "20140312." (string-take commit 7)))
a63094a7
EB
569 (source (origin
570 (method git-fetch)
571 (uri (git-reference
572 ;; There are many other scripts in this directory; we
573 ;; are interested in just one for this package.
574 (url "https://github.com/dustin/bindir")
575 (commit commit)))
576 (sha256
577 (base32
578 "1dcq0y16yznbv4k9h8gg90kv1gkn8r8dbvl4m2rpfd7q5nqhn617"))))
579 (build-system trivial-build-system)
580 (arguments
581 `(#:modules ((guix build utils))
582 #:builder (begin
583 (use-modules (guix build utils))
584 (let* ((source (assoc-ref %build-inputs "source"))
585 (output (assoc-ref %outputs "out"))
586 (bindir (string-append output "/bin"))
587 (script "git-test-sequence"))
96c46210
LC
588 (install-file (string-append source "/" script)
589 bindir)
590 #t))))
a63094a7
EB
591 (home-page "http://dustin.sallings.org/2010/03/28/git-test-sequence.html")
592 (synopsis "Run a command over a sequence of commits")
593 (description
594 "git-test-sequence is similar to an automated git bisect except it’s
595linear. It will test every change between two points in the DAG. It will
596also walk each side of a merge and test those changes individually.")
369387b6 597 (license (license:x11-style "file://LICENSE")))))
a63094a7 598
378b01dc
DT
599(define-public gitolite
600 (package
601 (name "gitolite")
34ba7cd4 602 (version "3.6.6")
378b01dc
DT
603 (source (origin
604 (method url-fetch)
605 (uri (string-append
606 "https://github.com/sitaramc/gitolite/archive/v"
607 version ".tar.gz"))
608 (file-name (string-append name "-" version ".tar.gz"))
378b01dc
DT
609 (sha256
610 (base32
34ba7cd4 611 "07q33f86694s0x3k9lcmy1vzfw9appdrlmmb9j3bz4qkrxqdnwb9"))))
378b01dc
DT
612 (build-system gnu-build-system)
613 (arguments
614 '(#:tests? #f ; no tests
615 #:phases (modify-phases %standard-phases
616 (delete 'configure)
617 (delete 'build)
618 (add-before 'install 'patch-scripts
619 (lambda* (#:key inputs #:allow-other-keys)
620 (let ((perl (string-append (assoc-ref inputs "perl")
621 "/bin/perl")))
622 ;; This seems to take care of every shell script that
623 ;; invokes Perl.
624 (substitute* (find-files "." ".*")
625 ((" perl -")
626 (string-append " " perl " -"))))))
627 (replace 'install
628 (lambda* (#:key outputs #:allow-other-keys)
629 (let* ((output (assoc-ref outputs "out"))
630 (sharedir (string-append output "/share/gitolite"))
631 (bindir (string-append output "/bin")))
632 (mkdir-p sharedir)
633 (mkdir-p bindir)
634 (system* "./install" "-to" sharedir)
635 ;; Create symlinks for executable scripts in /bin.
636 (for-each (lambda (script)
637 (symlink (string-append sharedir "/" script)
638 (string-append bindir "/" script)))
639 '("gitolite" "gitolite-shell"))
640 #t))))))
641 (inputs
642 `(("perl" ,perl)))
643 ;; git and openssh are propagated because trying to patch the source via
644 ;; regexp matching is too brittle and prone to false positives.
645 (propagated-inputs
646 `(("git" ,git)
647 ("openssh" ,openssh)))
648 (home-page "http://gitolite.com")
649 (synopsis "Git access control layer")
650 (description
651 "Gitolite is an access control layer on top of Git, providing fine access
652control to Git repositories.")
369387b6 653 (license license:gpl2)))
378b01dc 654
5151c2e1
AB
655(define-public mercurial
656 (package
657 (name "mercurial")
79f9d5d5 658 (version "3.9")
5151c2e1
AB
659 (source (origin
660 (method url-fetch)
5575917d
EF
661 (uri (string-append "https://www.mercurial-scm.org/"
662 "release/mercurial-" version ".tar.gz"))
5151c2e1
AB
663 (sha256
664 (base32
79f9d5d5 665 "1g6svg7fc1kyaxq653iwsvdh8hp2lrhs2ywazfc436a4zzf2akw3"))))
5151c2e1
AB
666 (build-system python-build-system)
667 (arguments
668 `(;; Restrict to Python 2, as Python 3 would require
669 ;; the argument --c2to3.
670 #:python ,python-2
671 ;; FIXME: Disabled tests because they require the nose unit
672 ;; testing framework: https://nose.readthedocs.org/en/latest/ .
673 #:tests? #f))
5575917d 674 (home-page "https://www.mercurial-scm.org/")
5151c2e1
AB
675 (synopsis "Decentralized version control system")
676 (description
677 "Mercurial is a free, distributed source control management tool.
678It efficiently handles projects of any size
679and offers an easy and intuitive interface.")
369387b6 680 (license license:gpl2+)))
5151c2e1 681
fc1e4516
AE
682(define-public neon
683 (package
684 (name "neon")
892f92b7 685 (version "0.30.1")
fc1e4516
AE
686 (source (origin
687 (method url-fetch)
688 (uri (string-append "http://www.webdav.org/neon/neon-"
689 version ".tar.gz"))
690 (sha256
691 (base32
892f92b7 692 "1pawhk02x728xn396a1kcivy9gqm94srmgad6ymr9l0qvk02dih0"))))
fc1e4516
AE
693 (build-system gnu-build-system)
694 (native-inputs
695 `(("perl" ,perl)
696 ("pkg-config" ,pkg-config)))
697 (inputs
698 `(("libxml2" ,libxml2)
699 ("openssl" ,openssl)
700 ("zlib" ,zlib)))
701 (arguments
702 `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
703 ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
704 #:tests? #f
705 #:configure-flags '("--enable-shared"
706 ;; requires libgnutils-config, deprecated
707 ;; in gnutls 2.8.
708 ; "--with-ssl=gnutls")))
709 "--with-ssl=openssl")))
710 (home-page "http://www.webdav.org/neon/")
711 (synopsis "HTTP and WebDAV client library")
712 (description "Neon is an HTTP and WebDAV client library, with a
713C interface. Features:
714High-level wrappers for common HTTP and WebDAV operations (GET, MOVE,
715DELETE, etc.);
716low-level interface to the HTTP request/response engine, allowing the use
717of arbitrary HTTP methods, headers, etc.;
718authentication support including Basic and Digest support, along with
719GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32;
720SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
721verifying server certificates, handling client certificates, and examining
722certificate properties, smartcard-based client certificates are also
723supported via a PKCS#11 wrapper interface;
724abstract interface to parsing XML using libxml2 or expat, and wrappers for
725simplifying handling XML HTTP response bodies;
726WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
727property manipulation.")
369387b6 728 (license license:gpl2+))) ; for documentation and tests; source under lgpl2.0+
fc1e4516 729
cf3fe3b0
CR
730(define-public subversion
731 (package
732 (name "subversion")
491f2918 733 (version "1.8.17")
cf3fe3b0
CR
734 (source (origin
735 (method url-fetch)
ce84c924 736 (uri (string-append "https://archive.apache.org/dist/subversion/"
7639105b 737 "subversion-" version ".tar.bz2"))
cf3fe3b0
CR
738 (sha256
739 (base32
491f2918 740 "1450fkj1jmxyphqn6cd95z1ykwsabajm9jw4i412qpwss8w9a4fy"))))
cf3fe3b0 741 (build-system gnu-build-system)
8b2fe785 742 (arguments
7c5a1454
EF
743 '(#:phases
744 (modify-phases %standard-phases
745 (add-after 'configure 'patch-libtool-wrapper-ls
746 (lambda* (#:key inputs #:allow-other-keys)
747 ;; This substitution allows tests svnauthz_tests and svnlook_tests
748 ;; to pass. These tests execute svnauthz and svnlook through
749 ;; their libtool wrapper scripts from svn hooks, whose empty
750 ;; environments cause "ls: command not found" errors. It would be
751 ;; nice if this fix ultimately made its way into libtool.
752 (let ((coreutils (assoc-ref inputs "coreutils")))
753 (substitute* "libtool"
491f2918
EF
754 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls")))
755 #t)))
7c5a1454
EF
756 (add-after 'install 'install-perl-bindings
757 (lambda* (#:key outputs #:allow-other-keys)
758 ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
759 (let ((out (assoc-ref outputs "out")))
760 (and (zero? (system* "make" "swig-pl-lib"))
761 ;; FIXME: Test failures.
762 ;; (zero? (system* "make" "check-swig-pl"))
763 (zero? (system* "make" "install-swig-pl-lib"))
764
765 ;; Set the right installation prefix.
766 (with-directory-excursion
767 "subversion/bindings/swig/perl/native"
768 (and (zero?
769 (system* "perl" "Makefile.PL"
770 (string-append "PREFIX=" out)))
771 (zero?
772 (system* "make" "install"
773 (string-append "OTHERLDFLAGS="
774 "-Wl,-rpath="
775 out "/lib"))))))))))))
8b2fe785 776 (native-inputs
98b79d36
AE
777 `(("pkg-config" ,pkg-config)
778 ;; For the Perl bindings.
779 ("swig" ,swig)))
cf3fe3b0 780 (inputs
2b24faa2
AE
781 `(("apr" ,apr)
782 ("apr-util" ,apr-util)
46138f3e 783 ("serf" ,serf)
cf3fe3b0 784 ("perl" ,perl)
aa9e22ef 785 ("python" ,python-2) ; incompatible with Python 3 (print syntax)
cf3fe3b0
CR
786 ("sqlite" ,sqlite)
787 ("zlib" ,zlib)))
ce84c924 788 (home-page "https://subversion.apache.org/")
35b9e423 789 (synopsis "Revision control system")
cf3fe3b0 790 (description
749b90a5
LC
791 "Subversion exists to be universally recognized and adopted as a
792centralized version control system characterized by its
cf3fe3b0
CR
793reliability as a safe haven for valuable data; the simplicity of its model and
794usage; and its ability to support the needs of a wide variety of users and
795projects, from individuals to large-scale enterprise operations.")
369387b6 796 (license license:asl2.0)))
cf3fe3b0 797
1b1c335f
LC
798(define-public rcs
799 (package
800 (name "rcs")
73ebc66f 801 (version "5.9.4")
1b1c335f
LC
802 (source (origin
803 (method url-fetch)
804 (uri (string-append "mirror://gnu/rcs/rcs-"
805 version ".tar.xz"))
806 (sha256
807 (base32
73ebc66f 808 "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86"))))
1b1c335f 809 (build-system gnu-build-system)
740c24df 810 (native-inputs `(("ed" ,ed)))
1b1c335f
LC
811 (home-page "http://www.gnu.org/software/rcs/")
812 (synopsis "Per-file local revision control system")
813 (description
79c311b8
LC
814 "RCS is the original Revision Control System. It works on a
815file-by-file basis, in contrast to subsequent version control systems such as
816CVS, Subversion, and Git. This can make it suitable for system
817administration files, for example, which are often inherently local to one
818machine.")
369387b6 819 (license license:gpl3+)))
1972fed4
LC
820
821(define-public cvs
822 (package
823 (name "cvs")
824 (version "1.12.13")
825 (source (origin
826 (method url-fetch)
827 (uri (string-append
828 "http://ftp.gnu.org/non-gnu/cvs/source/feature/"
829 version "/cvs-" version ".tar.bz2"))
830 (sha256
831 (base32
832 "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq"))))
833 (build-system gnu-build-system)
834 (arguments
835 ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
7fbbd3e7
EF
836 '(#:tests? #f
837 #:configure-flags (list "--with-external-zlib")))
1972fed4
LC
838 (inputs `(("zlib" ,zlib)
839 ("nano" ,nano))) ; the default editor
840 (home-page "http://cvs.nongnu.org")
841 (synopsis "Historical centralized version control system")
842 (description
843 "CVS is a version control system, an important component of Source
844Configuration Management (SCM). Using it, you can record the history of
845sources files, and documents. It fills a similar role to the free software
846RCS, PRCS, and Aegis packages.")
369387b6 847 (license license:gpl1+)))
a4572a17 848
59ef2030
ML
849(define-public cvs-fast-export
850 (package
851 (name "cvs-fast-export")
852 (version "1.33")
853 (source (origin
854 (method url-fetch)
855 (uri (string-append "http://www.catb.org/~esr/"
856 name "/" name "-" version ".tar.gz"))
857 (sha256
858 (base32
859 "1c3s4nacbwlaaccx1fr7hf72kxxrzy49y2rdz5hhqbk8r29vm8w1"))))
860 (build-system gnu-build-system)
861 (arguments
862 `(#:phases (modify-phases %standard-phases (delete 'configure))
863 #:make-flags
864 (list "CC=gcc" (string-append "prefix?=" (assoc-ref %outputs "out")))))
865 (inputs `(("git" ,git)))
866 (native-inputs `(("asciidoc" ,asciidoc)
59ef2030
ML
867 ;; These are needed for the tests.
868 ("cvs" ,cvs)
869 ("python" ,python-2)
870 ("rcs" ,rcs)))
871 (home-page "http://www.catb.org/esr/cvs-fast-export/")
872 (synopsis "Export an RCS or CVS history as a fast-import stream")
873 (description "This program analyzes a collection of RCS files in a CVS
874repository (or outside of one) and, when possible, emits an equivalent history
875in the form of a fast-import stream. Not all possible histories can be
876rendered this way; the program tries to emit useful warnings when it can't.
877
878The program can also produce a visualization of the resulting commit directed
879acyclic graph (DAG) in the input format of @uref{http://www.graphviz.org,
880Graphviz}. The package also includes @command{cvssync}, a tool for mirroring
881masters from remote CVS hosts.")
369387b6 882 (license license:gpl2+)))
59ef2030 883
a4572a17
LC
884(define-public vc-dwim
885 (package
886 (name "vc-dwim")
f968f1a7 887 (version "1.8")
a4572a17
LC
888 (source (origin
889 (method url-fetch)
890 (uri (string-append "mirror://gnu/vc-dwim/vc-dwim-"
891 version ".tar.xz"))
892 (sha256
893 (base32
f968f1a7 894 "0d5sqafc40l878m8wjr35jxmalj4kam1m6ph60v08ng4ml5g7931"))))
a4572a17
LC
895 (build-system gnu-build-system)
896 (inputs `(("perl" ,perl)
6aaf3899 897 ("inetutils" ,inetutils))) ; for `hostname', used in the tests
b8fc3622 898 (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags'
f968f1a7 899 (home-page "https://www.gnu.org/software/vc-dwim/")
a4572a17
LC
900 (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
901 (description
a22dc0c4
LC
902 "The vc-dwim package contains two tools, \"vc-dwim\" and \"vc-chlog\".
903vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and
904using version control at the same time, for example by printing a reminder
905when a file change has been described in the ChangeLog but the file has not
79c311b8 906been added to the VC. vc-chlog scans changed files and generates
a22dc0c4 907standards-compliant ChangeLog entries based on the changes that it detects.")
369387b6 908 (license license:gpl3+)))
83a39ed7
LC
909
910(define-public diffstat
911 (package
912 (name "diffstat")
913 (version "1.58")
914 (source (origin
915 (method url-fetch)
916 (uri (string-append
917 "ftp://invisible-island.net/diffstat/diffstat-"
918 version ".tgz"))
919 (sha256
920 (base32
921 "14rpf5c05ff30f6vn6pn6pzy0k4g4is5im656ahsxff3k58i7mgs"))))
922 (build-system gnu-build-system)
923 (home-page "http://invisible-island.net/diffstat/")
924 (synopsis "Make histograms from the output of 'diff'")
925 (description
35b9e423 926 "Diffstat reads the output of 'diff' and displays a histogram of the
83a39ed7
LC
927insertions, deletions, and modifications per-file. It is useful for reviewing
928large, complex patch files.")
369387b6 929 (license (license:x11-style "file://COPYING"))))
25f76ef0 930
25f76ef0
JD
931(define-public cssc
932 (package
933 (name "cssc")
32fd2600 934 (version "1.4.0")
25f76ef0
JD
935 (source (origin
936 (method url-fetch)
937 (uri (string-append "mirror://gnu/" name "/CSSC-"
938 version ".tar.gz"))
939 (sha256
940 (base32
32fd2600 941 "15191dh8hr46cvssmv4v52gymiiyk6ca9j1bfimlqakcqab6y51h"))))
25f76ef0
JD
942 (build-system gnu-build-system)
943 (arguments
bf3c57ff
EF
944 `(#:phases
945 (modify-phases %standard-phases
946 (add-before 'check 'precheck
947 (lambda _
948 (begin
949 (substitute* "tests/common/test-common"
950 (("/bin/pwd") (which "pwd")))
951
952 (substitute* "tests/prt/all-512.sh"
953 (("/bin/sh") (which "sh")))
954
955 ;; XXX: This test has no hope of passing until there is a "nogroup"
956 ;; entry (or at least some group to which the guix builder does
957 ;; not belong) in the /etc/group file of the build environment.
958 ;; Currently we do not have such a group. Disable this test for now.
959 (substitute* "tests/Makefile"
960 (("test-delta ") ""))))))))
25f76ef0
JD
961 ;; These are needed for the tests
962 (native-inputs `(("git" ,git)
963 ("cvs" ,cvs)))
964 (home-page "http://www.gnu.org/software/cssc/")
965 (synopsis "File-based version control like SCCS")
966 (description "GNU CSSC provides a replacement for the legacy Unix source
967code control system SCCS. This allows old code still under that system to be
968accessed and migrated on modern systems.")
369387b6 969 (license license:gpl3+)))
0e534e74 970
e881752c 971;; This package can unfortunately work only in -TEST mode, since Aegis
0e534e74
JD
972;; requires that it is installed setuid root.
973(define-public aegis
974 (package
975 (name "aegis")
976 (version "4.24")
977 (source (origin
978 (method url-fetch)
de67e922
LF
979 (uri (string-append "mirror://sourceforge/aegis/aegis/" version
980 "/aegis-" version ".tar.gz"))
0e534e74
JD
981 (sha256
982 (base32
983 "18s86ssarfmc4l17gbpzybca29m5wa37cbaimdji8czlcry3mcjl"))
fc1adab1
AK
984 (patches (search-patches "aegis-perl-tempdir1.patch"
985 "aegis-perl-tempdir2.patch"
986 "aegis-test-fixup-1.patch"
987 "aegis-test-fixup-2.patch"
988 "aegis-constness-error.patch"))))
0e534e74
JD
989 (build-system gnu-build-system)
990 (inputs
991 `(("e2fsprogs" ,e2fsprogs)
992 ("curl" ,curl)
0253ab39 993 ("file" ,file)
0e534e74
JD
994 ("libxml2" ,libxml2)
995 ("zlib" ,zlib)
b94a6ca0 996 ("gettext" ,gettext-minimal)))
0e534e74
JD
997 (native-inputs
998 `(("bison" ,bison)
999 ("groff" ,groff)
1000 ("perl" ,perl)
1001 ;; Various tests require the following:
e881752c 1002 ("cvs" ,cvs)
0e534e74
JD
1003 ("flex" ,flex)
1004 ("cook" ,cook)
1005 ("subversion" ,subversion)
1006 ("rcs" ,rcs)
1007 ("ed" ,ed)))
1008 (arguments
e881752c 1009 `(#:configure-flags (list "--with-no-aegis-configured"
0e534e74
JD
1010 "--sharedstatedir=/var/com/aegis")
1011 #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
e881752c 1012 #:phases
8ef843c7
EF
1013 (modify-phases %standard-phases
1014 (add-before 'configure 'pre-conf
1015 (lambda _
1016 (substitute* (append '("configure"
1017 "etc/check-tar-gz.sh"
1018 "etc/patches.sh"
1019 "etc/test.sh"
1020 "script/aexver.in"
1021 "script/aebisect.in"
1022 "script/aeintegratq.in"
1023 "script/tkaegis.in"
1024 "script/test_funcs.in"
1025 "web/eg_oss_templ.sh"
1026 "web/webiface.html"
1027 "libaegis/getpw_cache.cc")
1028 (find-files "test" "\\.sh"))
1029 (("/bin/sh") (which "sh")))
1030 (setenv "SH" (which "sh"))))
1031 (replace 'check
1032 (lambda _
1033 (let ((home (string-append (getcwd) "/my-new-home")))
1034 ;; Some tests need to write to $HOME.
1035 (mkdir home)
1036 (setenv "HOME" home)
1037
1038 ;; This test assumes that flex has been symlinked to "lex".
1039 (substitute* "test/00/t0011a.sh"
1040 (("type lex") "type flex"))
1041
1042 ;; The author decided to call the check rule "sure".
1043 (zero? (system* "make" "sure"))))))))
0e534e74
JD
1044 (home-page "http://aegis.sourceforge.net")
1045 (synopsis "Project change supervisor")
1046 (description "Aegis is a project change supervisor, and performs some of
35b9e423 1047the Software Configuration Management needed in a CASE environment. Aegis
0e534e74
JD
1048provides a framework within which a team of developers may work on many
1049changes to a program independently, and Aegis coordinates integrating these
1050changes back into the master source of the program, with as little disruption
35b9e423 1051as possible. Resolution of contention for source files, a major headache for
0e534e74 1052any project with more than one developer, is one of Aegis's major functions.")
369387b6 1053 (license license:gpl3+)))
2459141e 1054
62063d85
ML
1055(define-public reposurgeon
1056 (package
1057 (name "reposurgeon")
1058 (version "3.37")
1059 (source (origin
1060 (method url-fetch)
1061 (uri (string-append "http://www.catb.org/~esr/" name "/"
1062 name "-" version ".tar.xz"))
1063 (sha256
1064 (base32
1065 "14asjg4xy3mhh5z0r3k7c1wv9y803j2zfq32g5q5m95sf7yzygan"))))
1066 (build-system gnu-build-system)
1067 (arguments
1068 `(#:tests? #f ;no test suite distributed
1069 #:make-flags
1070 (list (string-append "target=" (assoc-ref %outputs "out")))
1071 #:phases
1072 (modify-phases %standard-phases
1073 (delete 'configure)
1074 (add-before 'build 'fix-docbook
1075 (lambda* (#:key inputs #:allow-other-keys)
1076 (substitute* (find-files "." "\\.xml$")
1077 (("docbook/docbookx.dtd")
1078 (string-append (assoc-ref inputs "docbook-xml")
1079 "/xml/dtd/docbook/docbookx.dtd")))
1080 #t))
1081 (add-after 'install 'install-emacs-data
1082 (lambda* (#:key outputs #:allow-other-keys)
1083 (install-file "reposurgeon-mode.el"
1084 (string-append (assoc-ref outputs "out")
1085 "/share/emacs/site-lisp")))))))
1086 (inputs
1087 `(("python" ,python-wrapper)))
1088 (native-inputs
1089 `(("asciidoc" ,asciidoc)
1090 ("docbook-xml" ,docbook-xml-4.1.2)
1091 ("docbook-xsl" ,docbook-xsl)
1092 ("libxml2" ,libxml2)
1093 ("xmlto" ,xmlto)))
1094 (home-page "http://www.catb.org/~esr/reposurgeon/")
1095 (synopsis "Edit version-control repository history")
1096 (description "Reposurgeon enables risky operations that version-control
1097systems don't want to let you do, such as editing past comments and metadata
1098and removing commits. It works with any version control system that can
1099export and import Git fast-import streams, including Git, Mercurial, Fossil,
1100Bazaar, CVS, RCS, and Src. It can also read Subversion dump files directly
1101and can thus be used to script production of very high-quality conversions
1102from Subversion to any supported Distributed Version Control System (DVCS).")
1103 ;; Most files are distributed under bsd-2, except 'repocutter' which is
1104 ;; under bsd-3.
369387b6 1105 (license (list license:bsd-2 license:bsd-3))))
62063d85 1106
2459141e
1107(define-public tig
1108 (package
1109 (name "tig")
50feff81 1110 (version "2.2")
2459141e
1111 (source (origin
1112 (method url-fetch)
1113 (uri (string-append
1114 "http://jonas.nitro.dk/tig/releases/tig-"
1115 version ".tar.gz"))
1116 (sha256
1117 (base32
50feff81 1118 "0k3m894vfkgkj7xbr0j6ph91351dl6id5f0hk2ksjp5lmg9i6llg"))))
2459141e 1119 (build-system gnu-build-system)
2203e4c2
EF
1120 (native-inputs
1121 `(("asciidoc" ,asciidoc)
1122 ("xmlto" ,xmlto)))
2459141e 1123 (inputs
d0e11e8b
EF
1124 `(("ncurses" ,ncurses)
1125 ("readline" ,readline)))
2459141e 1126 (arguments
2203e4c2
EF
1127 `(#:phases
1128 (modify-phases %standard-phases
1129 (add-after 'install 'install-doc
1130 (lambda _
1131 (zero? (system* "make" "install-doc")))))
1132 #:tests? #f)) ; tests require access to /dev/tty
92d9a36e 1133 ;;`(#:test-target "test"))
2459141e
1134 (home-page "http://jonas.nitro.dk/tig/")
1135 (synopsis "Ncurses-based text user interface for Git")
1136 (description
1137 "Tig is an ncurses text user interface for Git, primarily intended as
1138a history browser. It can also stage hunks for commit, or colorize the
1139output of the 'git' command.")
369387b6 1140 (license license:gpl2+)))
df7393b9
LC
1141
1142(define-public findnewest
1143 (package
1144 (name "findnewest")
9c7e7ead 1145 (version "0.3")
df7393b9
LC
1146 (source (origin
1147 (method url-fetch)
1148 (uri (string-append
1149 "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
1150 version ".tar.gz"))
1151 (sha256
1152 (base32
9c7e7ead 1153 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
df7393b9
LC
1154 (build-system gnu-build-system)
1155 (arguments
1156 '(#:phases (modify-phases %standard-phases
1157 (add-before 'configure 'bootstrap
1158 (lambda _
1159 (zero? (system* "autoreconf" "-vfi")))))))
1160 (native-inputs `(("autoconf" ,autoconf)
1161 ("automake" ,automake)))
1162 (home-page "https://github.com/0-wiz-0/findnewest/releases")
1163 (synopsis "Print the modification time of the latest file")
1164 (description
1165 "Recursively find the newest file in a file tree and print its
1166modification time.")
369387b6 1167 (license license:bsd-2)))
e92b8599
KM
1168
1169(define-public myrepos
1170 (package
1171 (name "myrepos")
17206f72 1172 (version "1.20160123")
e92b8599
KM
1173 (source
1174 (origin
1175 (method url-fetch)
1176 (uri (string-append
1177 "https://github.com/joeyh/myrepos/archive/"
1178 version ".tar.gz"))
1179 (file-name (string-append name "-" version ".tar.gz"))
1180 (sha256
17206f72 1181 (base32 "1723cg5haplz2w9dwdzp6ds1ip33cx3awmj4wnb0h4yq171v5lqk"))))
e92b8599
KM
1182 (build-system gnu-build-system)
1183 (inputs
1184 `(("perl" ,perl)))
1185 (arguments
1186 `(#:test-target "test"
1187 #:phases (alist-delete 'configure %standard-phases)
1188 #:make-flags (list (string-append "PREFIX=" %output))))
1189 (home-page "http://myrepos.branchable.com/")
1190 (synopsis "Multiple repository management tool")
1191 (description
1192 "Myrepos provides the @code{mr} command, which maps an operation (e.g.,
1193fetching updates) over a collection of version control repositories. It
1194supports a large number of version control systems: Git, Subversion,
1195Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
369387b6 1196 (license license:gpl2+)))
e8d2168c
EF
1197
1198(define-public git-annex-remote-hubic
1199 (package
1200 (name "git-annex-remote-hubic")
1201 (version "0.3.1")
1202 (source (origin
1203 (method url-fetch)
1204 (uri (string-append
1205 "https://github.com/Schnouki/" name "/archive/v"
1206 version ".tar.gz"))
1207 (file-name (string-append name "-" version ".tar.gz"))
1208 (sha256
1209 (base32
1210 "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
1211 (build-system python-build-system)
f71d1a08 1212 (arguments `(#:python ,python-2))
e8d2168c 1213 (native-inputs
f3b98f4f 1214 `(;; for the tests
f71d1a08 1215 ("python2-six" ,python2-six)))
e8d2168c 1216 (propagated-inputs
7b6ff42a 1217 `(("python2-dateutil" ,python2-dateutil)
f71d1a08
EF
1218 ("python2-futures" ,python2-futures)
1219 ("python2-rauth" ,python2-rauth)
1220 ("python2-swiftclient" ,python2-swiftclient)))
e8d2168c
EF
1221 (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
1222 (synopsis "Use hubic as a git-annex remote")
1223 (description
1224 "This package allows you to use your hubic account as a \"special
1225repository\" with git-annex.")
369387b6 1226 (license license:gpl3+)))
f36a1eba
EB
1227
1228(define-public fossil
1229 (package
1230 (name "fossil")
7a3f9405 1231 (version "1.35")
f36a1eba
EB
1232 (source
1233 (origin
1234 (method url-fetch)
f36a1eba 1235 (uri (string-append
7a3f9405
EF
1236 "https://www.fossil-scm.org/index.html/uv/download/"
1237 "fossil-src-" version ".tar.gz"))
f36a1eba
EB
1238 (sha256
1239 (base32
7a3f9405 1240 "07ds6rhq69bhydpm9a01mgdhxf88p9b6y5hdnhn8gjc7ba92zyf1"))))
f36a1eba
EB
1241 (build-system gnu-build-system)
1242 (native-inputs
1243 `(("tcl" ,tcl) ;for configuration only
1244 ("which" ,which) ;for tests only
1245 ("ed" ,ed))) ;ditto
1246 (inputs
1247 `(("openssl" ,openssl)
1248 ("zlib" ,zlib)
1249 ("sqlite" ,sqlite)))
1250 (arguments
1251 `(#:configure-flags (list "--with-openssl=auto"
1252 "--disable-internal-sqlite")
1253 #:test-target "test"
1254 #:phases (modify-phases %standard-phases
1255 (replace 'configure
1256 (lambda* (#:key outputs (configure-flags '())
1257 #:allow-other-keys)
1258 ;; The 'configure' script is not an autoconf script and
1259 ;; chokes on unrecognized options.
1260 (zero? (apply system*
1261 "./configure"
1262 (string-append "--prefix="
1263 (assoc-ref outputs "out"))
1264 configure-flags))))
1265 (add-before 'check 'test-setup
1266 (lambda _
1267 (setenv "USER" "guix")
1268 (setenv "TZ" "UTC")
1269 ;; Fixing the th1 test would require many backports, so
1270 ;; just disable for now.
1271 (delete-file "test/th1.test")
1272 #t)))))
1273 (home-page "https://fossil-scm.org")
1274 (synopsis "Software configuration management system")
1275 (description
1276 "Fossil is a distributed source control management system which supports
1277access and administration over HTTP CGI or via a built-in HTTP server. It has
1278a built-in wiki, built-in file browsing, built-in tickets system, etc.")
369387b6 1279 (license (list license:public-domain ;src/miniz.c, src/shell.c
1280 license:bsd-2))))
1062f245 1281
1282(define-public stagit
1283 (package
1284 (name "stagit")
877c6163 1285 (version "0.5")
1062f245 1286 (source (origin
1287 (method url-fetch)
1288 (uri (string-append "http://dl.2f30.org/releases/"
1289 name "-" version ".tar.gz"))
1290 (sha256
1291 (base32
877c6163 1292 "0ym1dwzn2z23hcg53qh1m1g5pfibrfnnlp3sm3z1v4mhz0pgaj56"))))
1062f245 1293 (build-system gnu-build-system)
1294 (arguments
1295 `(#:tests? #f ; No tests
1296 #:make-flags (list "CC=gcc"
1297 (string-append "PREFIX=" %output))
1298 #:phases
1299 (modify-phases %standard-phases
1300 (delete 'configure)))) ; No configure script
1301 (inputs
1302 `(("libgit2" ,libgit2)))
1303 (home-page "http://2f30.org")
1304 (synopsis "Static git page generator")
1305 (description "Stagit creates static pages for git repositories, the results can
1306be served with a HTTP file server of your choice.")
1307 (license license:expat)))