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