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 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
13 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
15 ;;; This file is part of GNU Guix.
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.
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.
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/>.
30 (define-module (gnu packages version-control)
31 #:use-module ((guix licenses) #:prefix license:)
32 #:use-module (guix utils)
33 #:use-module (guix packages)
34 #:use-module (guix download)
35 #:use-module (guix git-download)
36 #:use-module (guix build-system cmake)
37 #:use-module (guix build-system gnu)
38 #:use-module (guix build-system python)
39 #:use-module (guix build-system trivial)
40 #:use-module (gnu packages apr)
41 #:use-module (gnu packages autotools)
42 #:use-module (gnu packages documentation)
43 #:use-module (gnu packages base)
44 #:use-module (gnu packages bison)
45 #:use-module (gnu packages cook)
46 #:use-module (gnu packages curl)
47 #:use-module (gnu packages docbook)
48 #:use-module (gnu packages ed)
49 #:use-module (gnu packages file)
50 #:use-module (gnu packages flex)
51 #:use-module (gnu packages gettext)
52 #:use-module (gnu packages groff)
53 #:use-module (gnu packages linux)
54 #:use-module (gnu packages nano)
55 #:use-module (gnu packages ncurses)
56 #:use-module (gnu packages ssh)
57 #:use-module (gnu packages web)
58 #:use-module (gnu packages openstack)
59 #:use-module (gnu packages perl)
60 #:use-module (gnu packages pkg-config)
61 #:use-module (gnu packages python)
62 #:use-module (gnu packages databases)
63 #:use-module (gnu packages admin)
64 #:use-module (gnu packages xml)
65 #:use-module (gnu packages emacs)
66 #:use-module (gnu packages compression)
67 #:use-module (gnu packages swig)
68 #:use-module (gnu packages tcl)
69 #:use-module (gnu packages tls)
70 #:use-module (gnu packages)
71 #:use-module (ice-9 match)
72 #:use-module (srfi srfi-1))
81 (uri (string-append "https://launchpad.net/bzr/"
82 (version-major+minor version) "/" version
83 "/+download/bzr-" version ".tar.gz"))
86 "1cysix5k3wa6y7jjck3ckq3abls4gvz570s0v0hxv805nwki4i8d"))))
87 (build-system python-build-system)
89 ;; Note: 'tools/packaging/lp-upload-release' and 'tools/weavemerge.sh'
91 `(("gettext" ,gnu-gettext)))
93 `(#:tests? #f ; no test target
94 #:python ,python-2 ; Python 3 apparently not yet supported, see
95 ; https://answers.launchpad.net/bzr/+question/229048
97 (modify-phases %standard-phases
98 (add-after 'unpack 'fix-mandir
100 (substitute* "setup.py"
101 (("man/man1") "share/man/man1"))
103 (home-page "https://gnu.org/software/bazaar")
104 (synopsis "Version control system supporting both distributed and centralized workflows")
106 "GNU Bazaar is a version control system that allows you to record
107 changes to project files over time. It supports both a distributed workflow
108 as well as the classic centralized workflow.")
109 (license license:gpl2+)))
117 (uri (string-append "mirror://kernel.org/software/scm/git/git-"
121 "0qzs681a64k3shh5p0rg41l1z16fbk5sj0xga45k34hp1hsp654z"))))
122 (build-system gnu-build-system)
124 `(("native-perl" ,perl)
125 ("gettext" ,gnu-gettext)
130 "mirror://kernel.org/software/scm/git/git-manpages-"
134 "0kabsmjfbvq4y1vlwq0yl2y4033a90rnwsq01d7np3cvy55fiq0l"))))))
140 ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL
144 ("subversion" ,subversion)
146 ;; For 'git-send-email'
147 ("perl-authen-sasl" ,perl-authen-sasl)
148 ("perl-net-smtp-ssl" ,perl-net-smtp-ssl)
149 ("perl-io-socket-ssl" ,perl-io-socket-ssl)
151 ;; For 'git gui', 'gitk', and 'git citool'.
154 (outputs '("out" ; the core
155 "send-email" ; for git-send-email
157 "gui")) ; gitk, git gui
159 `(#:make-flags `("V=1" ;more verbose compilation
161 ;; By default 'make install' creates hard links for
162 ;; things in 'libexec/git-core', which leads to huge
163 ;; nars; see <http://bugs.gnu.org/21949>.
164 "NO_INSTALL_HARDLINKS=indeed")
166 #:tests? #f ; FIXME: Many tests are failing
168 ;; The explicit --with-tcltk forces the build system to hardcode the
169 ;; absolute file name to 'wish'.
170 #:configure-flags (list (string-append "--with-tcltk="
171 (assoc-ref %build-inputs "tk")
172 "/bin/wish8.6")) ; XXX
174 #:modules ((srfi srfi-1)
175 ,@%gnu-build-system-modules)
177 (modify-phases %standard-phases
178 (add-after 'configure 'patch-makefile-shebangs
180 (substitute* "Makefile"
181 (("/bin/sh") (which "sh"))
182 (("/usr/bin/perl") (which "perl"))
183 (("/usr/bin/python") (which "python")))))
184 (add-after 'configure 'add-PM.stamp
186 ;; Add the "PM.stamp" to avoid "no rule to make target".
187 (call-with-output-file "perl/PM.stamp" (const #t))
189 (add-after 'install 'install-shell-completion
190 (lambda* (#:key outputs #:allow-other-keys)
191 (let* ((out (assoc-ref outputs "out"))
192 (completions (string-append out "/etc/bash_completion.d")))
193 ;; TODO: Install the tcsh and zsh completions in the right place.
194 (mkdir-p completions)
195 (copy-file "contrib/completion/git-completion.bash"
196 (string-append completions "/git"))
198 (add-after 'install 'split
199 (lambda* (#:key inputs outputs #:allow-other-keys)
200 ;; Split the binaries to the various outputs.
201 (let* ((out (assoc-ref outputs "out"))
202 (se (assoc-ref outputs "send-email"))
203 (svn (assoc-ref outputs "svn"))
204 (gui (assoc-ref outputs "gui"))
205 (gitk (string-append out "/bin/gitk"))
206 (gitk* (string-append gui "/bin/gitk"))
207 (git-gui (string-append out "/libexec/git-core/git-gui"))
208 (git-gui* (string-append gui "/libexec/git-core/git-gui"))
209 (git-cit (string-append out "/libexec/git-core/git-citool"))
210 (git-cit* (string-append gui "/libexec/git-core/git-citool"))
211 (git-se (string-append out "/libexec/git-core/git-send-email"))
212 (git-se* (string-append se "/libexec/git-core/git-send-email"))
213 (git-svn (string-append out "/libexec/git-core/git-svn"))
214 (git-svn* (string-append svn "/libexec/git-core/git-svn"))
215 (git-sm (string-append out
216 "/libexec/git-core/git-submodule")))
217 (mkdir-p (string-append gui "/bin"))
218 (mkdir-p (string-append gui "/libexec/git-core"))
219 (mkdir-p (string-append se "/libexec/git-core"))
220 (mkdir-p (string-append svn "/libexec/git-core"))
222 (for-each (lambda (old new)
226 (list gitk git-gui git-cit git-se git-svn)
227 (list gitk* git-gui* git-cit* git-se* git-svn*))
229 ;; Tell 'git-svn' where Subversion is.
230 (wrap-program git-svn*
232 (,(string-append (assoc-ref inputs "subversion")
234 `("PERL5LIB" ":" prefix
235 (,(string-append (assoc-ref inputs "subversion")
236 "/lib/perl5/site_perl")))
238 ;; XXX: The .so for SVN/Core.pm lacks a RUNPATH, so
239 ;; help it find 'libsvn_client-1.so'.
240 `("LD_LIBRARY_PATH" ":" prefix
241 (,(string-append (assoc-ref inputs "subversion")
244 ;; Tell 'git-send-email' where perl modules are.
245 (wrap-program git-se*
246 `("PERL5LIB" ":" prefix
247 ,(map (lambda (o) (string-append o "/lib/perl5/site_perl"))
249 ,@(transitive-input-references
255 "perl-io-socket-ssl")))))))
257 ;; Tell 'git-submodule' where Perl is.
260 (,(string-append (assoc-ref inputs "perl")
263 ;; Tell 'git' to look for core programs in the user's profile.
264 ;; This allows user to install other outputs of this package and
265 ;; have them transparently taken into account. There's a
266 ;; 'GIT_EXEC_PATH' environment variable, but it's supposed to
267 ;; specify a single directory, not a search path.
268 (wrap-program (string-append out "/bin/git")
270 ("$HOME/.guix-profile/libexec/git-core"))))))
271 (add-after 'split 'install-man-pages
272 (lambda* (#:key inputs outputs #:allow-other-keys)
273 (let* ((out (assoc-ref outputs "out"))
274 (man (string-append out "/share/man"))
275 (manpages (assoc-ref inputs "git-manpages")))
277 (with-directory-excursion man
278 (zero? (system* "tar" "xvf" manpages)))))))))
281 ;; For HTTPS access, Git needs a single-file certificate bundle, specified
282 ;; with $GIT_SSL_CAINFO.
283 ;; FIXME: This variable designates a single file; it is not a search path.
284 (list (search-path-specification
285 (variable "GIT_SSL_CAINFO")
287 (files '("etc/ssl/certs/ca-certificates.crt")))))
289 (synopsis "Distributed version control system")
291 "Git is a free distributed version control system designed to handle
292 everything from small to very large projects with speed and efficiency.")
293 (license license:gpl2)
294 (home-page "http://git-scm.com/")))
296 (define-public libgit2
302 (uri (string-append "https://github.com/libgit2/libgit2/"
303 "archive/v" version ".tar.gz"))
304 (file-name (string-append name "-" version ".tar.gz"))
307 "1ppyfwxc276d2p2pwbzlmvs2bkgng425rl8k2rf9nsq66jxqq6b0"))))
308 (build-system cmake-build-system)
311 (modify-phases %standard-phases
312 (add-after 'unpack 'fix-hardcoded-paths
314 (substitute* "tests/repo/init.c"
315 (("#!/bin/sh") (string-append "#!" (which "sh"))))
316 (substitute* "tests/clar/fs.h"
317 (("/bin/cp") (which "cp"))
318 (("/bin/rm") (which "rm")))
320 ;; Run checks more verbosely.
322 (lambda _ (zero? (system* "./libgit2_clar" "-v" "-Q")))))))
324 `(("libssh2" ,libssh2)
326 ("python" ,python-wrapper)
327 ("openssl" ,openssl)))
329 `(("pkg-config" ,pkg-config)))
330 (home-page "http://libgit2.github.com/")
331 (synopsis "Library providing Git core methods")
333 "Libgit2 is a portable, pure C implementation of the Git core methods
334 provided as a re-entrant linkable library with a solid API, allowing you to
335 write native speed custom Git applications in any language with bindings.")
336 ;; GPLv2 with linking exception
337 (license license:gpl2)))
346 "https://git.zx2c4.com/cgit/snapshot/cgit-"
350 "0kbh835p7dl4h88qv55fyfh1za09cgnqh63rii325w9215hm95x8"))))
351 (build-system gnu-build-system)
353 '(#:tests? #f ; XXX: fail to build the in-source git.
355 #:make-flags '("CC=gcc" "SHELL_PATH=sh")
357 (modify-phases %standard-phases
358 (add-after 'unpack 'unpack-git
359 (lambda* (#:key inputs #:allow-other-keys)
360 ;; Unpack the source of git into the 'git' directory.
362 "tar" "--strip-components=1" "-C" "git" "-xf"
363 (assoc-ref inputs "git:src")))))
364 (delete 'configure) ; no configure script
365 (add-after 'build 'build-man
366 (lambda* (#:key make-flags #:allow-other-keys)
367 (zero? (apply system* `("make" ,@make-flags "doc-man")))))
369 (lambda* (#:key make-flags outputs #:allow-other-keys)
370 (let ((out (assoc-ref outputs "out")))
371 (and (zero? (apply system*
372 `("make" ,@make-flags
373 ,(string-append "prefix=" out)
375 "CGIT_SCRIPT_PATH=" out "/share/cgit")
376 "install" "install-man")))
377 ;; Move the platform-dependent 'cgit.cgi' into lib
378 ;; to get it stripped.
379 (rename-file (string-append out "/share/cgit/cgit.cgi")
380 (string-append out "/lib/cgit/cgit.cgi"))
383 ;; For building manpage.
384 `(("asciidoc" ,asciidoc)
385 ("docbook-xml" ,docbook-xml)
386 ("docbook-xsl" ,docbook-xsl)
388 ("xsltprot" ,libxslt)))
390 `(("git:src" ,(package-source git))
393 (home-page "https://git.zx2c4.com/cgit/")
394 (synopsis "Web frontend for git repositories")
396 "CGit is an attempt to create a fast web interface for the Git SCM, using
397 a built-in cache to decrease server I/O pressure.")
398 (license license:gpl2)))
400 (define-public shflags
406 (uri (string-append "https://github.com/kward/shflags/archive/v"
410 "0zxw12haylaq60a335xlqcs4afw2zrgwqymmpw0m21r51w6irdmr"))))
411 (build-system trivial-build-system)
412 (native-inputs `(("tar" ,tar)
415 `(#:modules ((guix build utils))
417 (use-modules (guix build utils))
418 (let* ((source (assoc-ref %build-inputs "source"))
419 (tar (assoc-ref %build-inputs "tar"))
420 (gzip (assoc-ref %build-inputs "gzip"))
421 (output (assoc-ref %outputs "out"))
422 (srcdir (string-append output "/src")))
424 (setenv "PATH" (string-append gzip "/bin"))
425 (system* (string-append tar "/bin/tar") "xzf"
427 (chdir ,(string-append name "-" version))
429 (copy-file "src/shflags"
430 (string-append srcdir "/shflags"))
432 (home-page "https://github.com/kward/shflags")
433 (synopsis "Command-line flags library for shell scripts")
435 "Shell Flags (shFlags) is a library written to greatly simplify the
436 handling of command-line flags in Bourne based Unix shell scripts (bash, dash,
437 ksh, sh, zsh). Most shell scripts use getopt for flags processing, but the
438 different versions of getopt on various OSes make writing portable shell
439 scripts difficult. shFlags instead provides an API that doesn't change across
440 shell and OS versions so the script writer can be confident that the script
442 (license license:lgpl2.1)))
444 (define-public git-flow
447 ;; This version has not be officially released yet, so we build it
448 ;; directly from the git repository.
449 (version "0.4.2-pre")
453 (url "https://github.com/nvie/gitflow/")
454 (commit "15aab26490facf285acef56cb5d61025eacb3a69")))
457 "01fs97q76fdfnvmrh2cyjhywcs3pykf1dg58sy0frflnsdzs6prx"))))
458 (build-system gnu-build-system)
459 (inputs `(("shflags" ,shflags)))
461 '(#:tests? #f ; no tests
462 #:make-flags (list (string-append "prefix="
463 (assoc-ref %outputs "out")))
465 (modify-phases %standard-phases
466 (add-after 'unpack 'reset-shFlags-link
467 (lambda* (#:key inputs #:allow-other-keys)
468 ;; The link points to a file in the shFlags submodule.
469 ;; Redirect it to point to our system shFlags.
470 (let ((shflags (assoc-ref inputs "shflags")))
472 (delete-file "gitflow-shFlags")
473 (symlink (string-append shflags "/src/shflags")
474 "gitflow-shFlags")))))
477 (home-page "http://nvie.com/posts/a-successful-git-branching-model/")
478 (synopsis "Git extensions for Vincent Driessen's branching model")
480 "Vincent Driessen's branching model is a git branching and release
481 management strategy that helps developers keep track of features, hotfixes,
482 and releases in bigger software projects. The git-flow library of git
483 subcommands helps automate some parts of the flow to make working with it a
485 (license license:bsd-2)))
487 (define-public git-test-sequence
488 (let ((commit "48e5a2f5a13a5f30452647237e23362b459b9c76"))
490 (name "git-test-sequence")
491 (version (string-append "20140312." (string-take commit 7)))
495 ;; There are many other scripts in this directory; we
496 ;; are interested in just one for this package.
497 (url "https://github.com/dustin/bindir")
501 "1dcq0y16yznbv4k9h8gg90kv1gkn8r8dbvl4m2rpfd7q5nqhn617"))))
502 (build-system trivial-build-system)
504 `(#:modules ((guix build utils))
506 (use-modules (guix build utils))
507 (let* ((source (assoc-ref %build-inputs "source"))
508 (output (assoc-ref %outputs "out"))
509 (bindir (string-append output "/bin"))
510 (script "git-test-sequence"))
511 (install-file (string-append source "/" script)
514 (home-page "http://dustin.sallings.org/2010/03/28/git-test-sequence.html")
515 (synopsis "Run a command over a sequence of commits")
517 "git-test-sequence is similar to an automated git bisect except it’s
518 linear. It will test every change between two points in the DAG. It will
519 also walk each side of a merge and test those changes individually.")
520 (license (license:x11-style "file://LICENSE")))))
522 (define-public gitolite
529 "https://github.com/sitaramc/gitolite/archive/v"
531 (file-name (string-append name "-" version ".tar.gz"))
534 "0xpqg04gyr4dhdhxx5lbk61lwwd5ml32530bigg2qy663icngwqm"))))
535 (build-system gnu-build-system)
537 '(#:tests? #f ; no tests
538 #:phases (modify-phases %standard-phases
541 (add-before 'install 'patch-scripts
542 (lambda* (#:key inputs #:allow-other-keys)
543 (let ((perl (string-append (assoc-ref inputs "perl")
545 ;; This seems to take care of every shell script that
547 (substitute* (find-files "." ".*")
549 (string-append " " perl " -"))))))
551 (lambda* (#:key outputs #:allow-other-keys)
552 (let* ((output (assoc-ref outputs "out"))
553 (sharedir (string-append output "/share/gitolite"))
554 (bindir (string-append output "/bin")))
557 (system* "./install" "-to" sharedir)
558 ;; Create symlinks for executable scripts in /bin.
559 (for-each (lambda (script)
560 (symlink (string-append sharedir "/" script)
561 (string-append bindir "/" script)))
562 '("gitolite" "gitolite-shell"))
566 ;; git and openssh are propagated because trying to patch the source via
567 ;; regexp matching is too brittle and prone to false positives.
570 ("openssh" ,openssh)))
571 (home-page "http://gitolite.com")
572 (synopsis "Git access control layer")
574 "Gitolite is an access control layer on top of Git, providing fine access
575 control to Git repositories.")
576 (license license:gpl2)))
578 (define-public mercurial
584 (uri (string-append "https://www.mercurial-scm.org/"
585 "release/mercurial-" version ".tar.gz"))
588 "1g6svg7fc1kyaxq653iwsvdh8hp2lrhs2ywazfc436a4zzf2akw3"))))
589 (build-system python-build-system)
591 `(;; Restrict to Python 2, as Python 3 would require
592 ;; the argument --c2to3.
594 ;; FIXME: Disabled tests because they require the nose unit
595 ;; testing framework: https://nose.readthedocs.org/en/latest/ .
597 (home-page "https://www.mercurial-scm.org/")
598 (synopsis "Decentralized version control system")
600 "Mercurial is a free, distributed source control management tool.
601 It efficiently handles projects of any size
602 and offers an easy and intuitive interface.")
603 (license license:gpl2+)))
611 (uri (string-append "http://www.webdav.org/neon/neon-"
615 "1pawhk02x728xn396a1kcivy9gqm94srmgad6ymr9l0qvk02dih0"))))
616 (build-system gnu-build-system)
619 ("pkg-config" ,pkg-config)))
621 `(("libxml2" ,libxml2)
625 `(;; FIXME: Add tests once reverse address lookup is fixed in glibc, see
626 ;; https://sourceware.org/bugzilla/show_bug.cgi?id=16475
628 #:configure-flags '("--enable-shared"
629 ;; requires libgnutils-config, deprecated
631 ; "--with-ssl=gnutls")))
632 "--with-ssl=openssl")))
633 (home-page "http://www.webdav.org/neon/")
634 (synopsis "HTTP and WebDAV client library")
635 (description "Neon is an HTTP and WebDAV client library, with a
636 C interface. Features:
637 High-level wrappers for common HTTP and WebDAV operations (GET, MOVE,
639 low-level interface to the HTTP request/response engine, allowing the use
640 of arbitrary HTTP methods, headers, etc.;
641 authentication support including Basic and Digest support, along with
642 GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32;
643 SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
644 verifying server certificates, handling client certificates, and examining
645 certificate properties, smartcard-based client certificates are also
646 supported via a PKCS#11 wrapper interface;
647 abstract interface to parsing XML using libxml2 or expat, and wrappers for
648 simplifying handling XML HTTP response bodies;
649 WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
650 property manipulation.")
651 (license license:gpl2+))) ; for documentation and tests; source under lgpl2.0+
653 (define-public subversion
659 (uri (string-append "https://archive.apache.org/dist/subversion/"
660 "subversion-" version ".tar.bz2"))
663 "0imkxn25n6sbcgfldrx4z29npjprb1lxjm5fb89q4297161nx3zi"))))
664 (build-system gnu-build-system)
667 (modify-phases %standard-phases
668 (add-after 'configure 'patch-libtool-wrapper-ls
669 (lambda* (#:key inputs #:allow-other-keys)
670 ;; This substitution allows tests svnauthz_tests and svnlook_tests
671 ;; to pass. These tests execute svnauthz and svnlook through
672 ;; their libtool wrapper scripts from svn hooks, whose empty
673 ;; environments cause "ls: command not found" errors. It would be
674 ;; nice if this fix ultimately made its way into libtool.
675 (let ((coreutils (assoc-ref inputs "coreutils")))
676 (substitute* "libtool"
677 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls"))))))
678 (add-after 'install 'install-perl-bindings
679 (lambda* (#:key outputs #:allow-other-keys)
680 ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
681 (let ((out (assoc-ref outputs "out")))
682 (and (zero? (system* "make" "swig-pl-lib"))
683 ;; FIXME: Test failures.
684 ;; (zero? (system* "make" "check-swig-pl"))
685 (zero? (system* "make" "install-swig-pl-lib"))
687 ;; Set the right installation prefix.
688 (with-directory-excursion
689 "subversion/bindings/swig/perl/native"
691 (system* "perl" "Makefile.PL"
692 (string-append "PREFIX=" out)))
694 (system* "make" "install"
695 (string-append "OTHERLDFLAGS="
697 out "/lib"))))))))))))
699 `(("pkg-config" ,pkg-config)
700 ;; For the Perl bindings.
704 ("apr-util" ,apr-util)
707 ("python" ,python-2) ; incompatible with Python 3 (print syntax)
710 (home-page "https://subversion.apache.org/")
711 (synopsis "Revision control system")
713 "Subversion exists to be universally recognized and adopted as a
714 centralized version control system characterized by its
715 reliability as a safe haven for valuable data; the simplicity of its model and
716 usage; and its ability to support the needs of a wide variety of users and
717 projects, from individuals to large-scale enterprise operations.")
718 (license license:asl2.0)))
726 (uri (string-append "mirror://gnu/rcs/rcs-"
730 "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86"))))
731 (build-system gnu-build-system)
732 (native-inputs `(("ed" ,ed)))
733 (home-page "http://www.gnu.org/software/rcs/")
734 (synopsis "Per-file local revision control system")
736 "RCS is the original Revision Control System. It works on a
737 file-by-file basis, in contrast to subsequent version control systems such as
738 CVS, Subversion, and Git. This can make it suitable for system
739 administration files, for example, which are often inherently local to one
741 (license license:gpl3+)))
750 "http://ftp.gnu.org/non-gnu/cvs/source/feature/"
751 version "/cvs-" version ".tar.bz2"))
754 "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq"))))
755 (build-system gnu-build-system)
757 ;; XXX: The test suite looks flawed, and the package is obsolete anyway.
759 #:configure-flags (list "--with-external-zlib")))
760 (inputs `(("zlib" ,zlib)
761 ("nano" ,nano))) ; the default editor
762 (home-page "http://cvs.nongnu.org")
763 (synopsis "Historical centralized version control system")
765 "CVS is a version control system, an important component of Source
766 Configuration Management (SCM). Using it, you can record the history of
767 sources files, and documents. It fills a similar role to the free software
768 RCS, PRCS, and Aegis packages.")
769 (license license:gpl1+)))
771 (define-public cvs-fast-export
773 (name "cvs-fast-export")
777 (uri (string-append "http://www.catb.org/~esr/"
778 name "/" name "-" version ".tar.gz"))
781 "1c3s4nacbwlaaccx1fr7hf72kxxrzy49y2rdz5hhqbk8r29vm8w1"))))
782 (build-system gnu-build-system)
784 `(#:phases (modify-phases %standard-phases (delete 'configure))
786 (list "CC=gcc" (string-append "prefix?=" (assoc-ref %outputs "out")))))
787 (inputs `(("git" ,git)))
788 (native-inputs `(("asciidoc" ,asciidoc)
789 ("docbook-xml" ,docbook-xml)
790 ("docbook-xsl" ,docbook-xsl)
792 ("xsltproc" ,libxslt)
793 ;; These are needed for the tests.
797 (home-page "http://www.catb.org/esr/cvs-fast-export/")
798 (synopsis "Export an RCS or CVS history as a fast-import stream")
799 (description "This program analyzes a collection of RCS files in a CVS
800 repository (or outside of one) and, when possible, emits an equivalent history
801 in the form of a fast-import stream. Not all possible histories can be
802 rendered this way; the program tries to emit useful warnings when it can't.
804 The program can also produce a visualization of the resulting commit directed
805 acyclic graph (DAG) in the input format of @uref{http://www.graphviz.org,
806 Graphviz}. The package also includes @command{cvssync}, a tool for mirroring
807 masters from remote CVS hosts.")
808 (license license:gpl2+)))
810 (define-public vc-dwim
816 (uri (string-append "mirror://gnu/vc-dwim/vc-dwim-"
820 "094pjwshvazlgagc254in2xvrp93vhcj0kb5ms17qs7sch99x9z2"))))
821 (build-system gnu-build-system)
822 (inputs `(("perl" ,perl)
823 ("inetutils" ,inetutils))) ; for `hostname', used in the tests
824 (native-inputs `(("emacs" ,emacs-minimal))) ; for `ctags'
825 (home-page "http://www.gnu.org/software/vc-dwim/")
826 (synopsis "Version-control-agnostic ChangeLog diff and commit tool")
828 "The vc-dwim package contains two tools, \"vc-dwim\" and \"vc-chlog\".
829 vc-dwim is a tool that simplifies the task of maintaining a ChangeLog and
830 using version control at the same time, for example by printing a reminder
831 when a file change has been described in the ChangeLog but the file has not
832 been added to the VC. vc-chlog scans changed files and generates
833 standards-compliant ChangeLog entries based on the changes that it detects.")
834 (license license:gpl3+)))
836 (define-public diffstat
843 "ftp://invisible-island.net/diffstat/diffstat-"
847 "14rpf5c05ff30f6vn6pn6pzy0k4g4is5im656ahsxff3k58i7mgs"))))
848 (build-system gnu-build-system)
849 (home-page "http://invisible-island.net/diffstat/")
850 (synopsis "Make histograms from the output of 'diff'")
852 "Diffstat reads the output of 'diff' and displays a histogram of the
853 insertions, deletions, and modifications per-file. It is useful for reviewing
854 large, complex patch files.")
855 (license (license:x11-style "file://COPYING"))))
863 (uri (string-append "mirror://gnu/" name "/CSSC-"
867 "0bkw6fjh20ppvn54smv05461lm1vcwvn02avx941c4acafmkl1cm"))
868 (patches (search-patches "cssc-gets-undeclared.patch"
869 "cssc-missing-include.patch"))))
870 (build-system gnu-build-system)
873 (modify-phases %standard-phases
874 (add-before 'check 'precheck
877 (substitute* "tests/common/test-common"
878 (("/bin/pwd") (which "pwd")))
880 (substitute* "tests/prt/all-512.sh"
881 (("/bin/sh") (which "sh")))
883 ;; XXX: This test has no hope of passing until there is a "nogroup"
884 ;; entry (or at least some group to which the guix builder does
885 ;; not belong) in the /etc/group file of the build environment.
886 ;; Currently we do not have such a group. Disable this test for now.
887 (substitute* "tests/Makefile"
888 (("test-delta ") ""))))))))
889 ;; These are needed for the tests
890 (native-inputs `(("git" ,git)
892 (home-page "http://www.gnu.org/software/cssc/")
893 (synopsis "File-based version control like SCCS")
894 (description "GNU CSSC provides a replacement for the legacy Unix source
895 code control system SCCS. This allows old code still under that system to be
896 accessed and migrated on modern systems.")
897 (license license:gpl3+)))
899 ;; This package can unfortunately work only in -TEST mode, since Aegis
900 ;; requires that it is installed setuid root.
907 (uri (string-append "mirror://sourceforge/aegis/aegis/" version
908 "/aegis-" version ".tar.gz"))
911 "18s86ssarfmc4l17gbpzybca29m5wa37cbaimdji8czlcry3mcjl"))
912 (patches (search-patches "aegis-perl-tempdir1.patch"
913 "aegis-perl-tempdir2.patch"
914 "aegis-test-fixup-1.patch"
915 "aegis-test-fixup-2.patch"
916 "aegis-constness-error.patch"))))
917 (build-system gnu-build-system)
919 `(("e2fsprogs" ,e2fsprogs)
924 ("gettext" ,gnu-gettext)))
929 ;; Various tests require the following:
933 ("subversion" ,subversion)
937 `(#:configure-flags (list "--with-no-aegis-configured"
938 "--sharedstatedir=/var/com/aegis")
939 #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
941 (modify-phases %standard-phases
942 (add-before 'configure 'pre-conf
944 (substitute* (append '("configure"
945 "etc/check-tar-gz.sh"
950 "script/aeintegratq.in"
952 "script/test_funcs.in"
953 "web/eg_oss_templ.sh"
955 "libaegis/getpw_cache.cc")
956 (find-files "test" "\\.sh"))
957 (("/bin/sh") (which "sh")))
958 (setenv "SH" (which "sh"))))
961 (let ((home (string-append (getcwd) "/my-new-home")))
962 ;; Some tests need to write to $HOME.
966 ;; This test assumes that flex has been symlinked to "lex".
967 (substitute* "test/00/t0011a.sh"
968 (("type lex") "type flex"))
970 ;; The author decided to call the check rule "sure".
971 (zero? (system* "make" "sure"))))))))
972 (home-page "http://aegis.sourceforge.net")
973 (synopsis "Project change supervisor")
974 (description "Aegis is a project change supervisor, and performs some of
975 the Software Configuration Management needed in a CASE environment. Aegis
976 provides a framework within which a team of developers may work on many
977 changes to a program independently, and Aegis coordinates integrating these
978 changes back into the master source of the program, with as little disruption
979 as possible. Resolution of contention for source files, a major headache for
980 any project with more than one developer, is one of Aegis's major functions.")
981 (license license:gpl3+)))
983 (define-public reposurgeon
989 (uri (string-append "http://www.catb.org/~esr/" name "/"
990 name "-" version ".tar.xz"))
993 "14asjg4xy3mhh5z0r3k7c1wv9y803j2zfq32g5q5m95sf7yzygan"))))
994 (build-system gnu-build-system)
996 `(#:tests? #f ;no test suite distributed
998 (list (string-append "target=" (assoc-ref %outputs "out")))
1000 (modify-phases %standard-phases
1002 (add-before 'build 'fix-docbook
1003 (lambda* (#:key inputs #:allow-other-keys)
1004 (substitute* (find-files "." "\\.xml$")
1005 (("docbook/docbookx.dtd")
1006 (string-append (assoc-ref inputs "docbook-xml")
1007 "/xml/dtd/docbook/docbookx.dtd")))
1009 (add-after 'install 'install-emacs-data
1010 (lambda* (#:key outputs #:allow-other-keys)
1011 (install-file "reposurgeon-mode.el"
1012 (string-append (assoc-ref outputs "out")
1013 "/share/emacs/site-lisp")))))))
1015 `(("python" ,python-wrapper)))
1017 `(("asciidoc" ,asciidoc)
1018 ("docbook-xml" ,docbook-xml-4.1.2)
1019 ("docbook-xsl" ,docbook-xsl)
1020 ("libxml2" ,libxml2)
1022 (home-page "http://www.catb.org/~esr/reposurgeon/")
1023 (synopsis "Edit version-control repository history")
1024 (description "Reposurgeon enables risky operations that version-control
1025 systems don't want to let you do, such as editing past comments and metadata
1026 and removing commits. It works with any version control system that can
1027 export and import Git fast-import streams, including Git, Mercurial, Fossil,
1028 Bazaar, CVS, RCS, and Src. It can also read Subversion dump files directly
1029 and can thus be used to script production of very high-quality conversions
1030 from Subversion to any supported Distributed Version Control System (DVCS).")
1031 ;; Most files are distributed under bsd-2, except 'repocutter' which is
1033 (license (list license:bsd-2 license:bsd-3))))
1042 "http://jonas.nitro.dk/tig/releases/tig-"
1046 "0bw5wivswwh7vx897q8xc2cqgkqhdzk8gh6fnav2kf34sngigiah"))))
1047 (build-system gnu-build-system)
1049 `(("ncurses" ,ncurses)))
1051 `(#:tests? #f)) ; tests require access to /dev/tty
1052 ;;`(#:test-target "test"))
1053 (home-page "http://jonas.nitro.dk/tig/")
1054 (synopsis "Ncurses-based text user interface for Git")
1056 "Tig is an ncurses text user interface for Git, primarily intended as
1057 a history browser. It can also stage hunks for commit, or colorize the
1058 output of the 'git' command.")
1059 (license license:gpl2+)))
1061 (define-public findnewest
1068 "https://github.com/0-wiz-0/findnewest/archive/findnewest-"
1072 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
1073 (build-system gnu-build-system)
1075 '(#:phases (modify-phases %standard-phases
1076 (add-before 'configure 'bootstrap
1078 (zero? (system* "autoreconf" "-vfi")))))))
1079 (native-inputs `(("autoconf" ,autoconf)
1080 ("automake" ,automake)))
1081 (home-page "https://github.com/0-wiz-0/findnewest/releases")
1082 (synopsis "Print the modification time of the latest file")
1084 "Recursively find the newest file in a file tree and print its
1085 modification time.")
1086 (license license:bsd-2)))
1088 (define-public myrepos
1091 (version "1.20160123")
1096 "https://github.com/joeyh/myrepos/archive/"
1098 (file-name (string-append name "-" version ".tar.gz"))
1100 (base32 "1723cg5haplz2w9dwdzp6ds1ip33cx3awmj4wnb0h4yq171v5lqk"))))
1101 (build-system gnu-build-system)
1105 `(#:test-target "test"
1106 #:phases (alist-delete 'configure %standard-phases)
1107 #:make-flags (list (string-append "PREFIX=" %output))))
1108 (home-page "http://myrepos.branchable.com/")
1109 (synopsis "Multiple repository management tool")
1111 "Myrepos provides the @code{mr} command, which maps an operation (e.g.,
1112 fetching updates) over a collection of version control repositories. It
1113 supports a large number of version control systems: Git, Subversion,
1114 Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
1115 (license license:gpl2+)))
1117 (define-public git-annex-remote-hubic
1119 (name "git-annex-remote-hubic")
1124 "https://github.com/Schnouki/" name "/archive/v"
1126 (file-name (string-append name "-" version ".tar.gz"))
1129 "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
1130 (build-system python-build-system)
1131 (arguments `(#:python ,python-2))
1133 `(("python2-setuptools" ,python2-setuptools)
1135 ("python2-six" ,python2-six)))
1137 `(("python2-dateutil" ,python2-dateutil-2)
1138 ("python2-futures" ,python2-futures)
1139 ("python2-rauth" ,python2-rauth)
1140 ("python2-swiftclient" ,python2-swiftclient)))
1141 (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
1142 (synopsis "Use hubic as a git-annex remote")
1144 "This package allows you to use your hubic account as a \"special
1145 repository\" with git-annex.")
1146 (license license:gpl3+)))
1148 (define-public fossil
1156 "https://www.fossil-scm.org/index.html/uv/download/"
1157 "fossil-src-" version ".tar.gz"))
1160 "07ds6rhq69bhydpm9a01mgdhxf88p9b6y5hdnhn8gjc7ba92zyf1"))))
1161 (build-system gnu-build-system)
1163 `(("tcl" ,tcl) ;for configuration only
1164 ("which" ,which) ;for tests only
1167 `(("openssl" ,openssl)
1169 ("sqlite" ,sqlite)))
1171 `(#:configure-flags (list "--with-openssl=auto"
1172 "--disable-internal-sqlite")
1173 #:test-target "test"
1174 #:phases (modify-phases %standard-phases
1176 (lambda* (#:key outputs (configure-flags '())
1178 ;; The 'configure' script is not an autoconf script and
1179 ;; chokes on unrecognized options.
1180 (zero? (apply system*
1182 (string-append "--prefix="
1183 (assoc-ref outputs "out"))
1185 (add-before 'check 'test-setup
1187 (setenv "USER" "guix")
1189 ;; Fixing the th1 test would require many backports, so
1190 ;; just disable for now.
1191 (delete-file "test/th1.test")
1193 (home-page "https://fossil-scm.org")
1194 (synopsis "Software configuration management system")
1196 "Fossil is a distributed source control management system which supports
1197 access and administration over HTTP CGI or via a built-in HTTP server. It has
1198 a built-in wiki, built-in file browsing, built-in tickets system, etc.")
1199 (license (list license:public-domain ;src/miniz.c, src/shell.c
1202 (define-public stagit
1208 (uri (string-append "http://dl.2f30.org/releases/"
1209 name "-" version ".tar.gz"))
1212 "0z5r06wqrfnsz24ci4hjqbd62svclvhkgzaq9npsyjcp6jnf7izc"))))
1213 (build-system gnu-build-system)
1215 `(#:tests? #f ; No tests
1216 #:make-flags (list "CC=gcc"
1217 (string-append "PREFIX=" %output))
1219 (modify-phases %standard-phases
1220 (delete 'configure)))) ; No configure script
1222 `(("libgit2" ,libgit2)))
1223 (home-page "http://2f30.org")
1224 (synopsis "Static git page generator")
1225 (description "Stagit creates static pages for git repositories, the results can
1226 be served with a HTTP file server of your choice.")
1227 (license license:expat)))