summaryrefslogtreecommitdiff
blob: 0aa9ef37b8ed8849ac944998a8bfd010558ac486 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
---
GLEP: 36
Title: Subversion/CVS for Gentoo Hosted Projects
Author: Aaron Walker <ka0ttic@gentoo.org>
Type: Standards Track
Status: Moribund
Version: 1
Created: 2004-11-11
Last-Modified: 2017-11-12
Post-History: 2005-03-13, 2005-03-21
Content-Type: text/x-rst
---

Status
======

Marked as Moribund by decision of the Gentoo Council on 2017-11-12.

Abstract
========

Allow maintainers of Gentoo hosted projects to choose between Subversion/CVS.

Motivation
==========

By offering a choice of version control systems, developers who want or need
certain features, can choose which one suits them or their project the best.

In addition, there are quite a few projects that should be Gentoo hosted, but
are hosted elsewhere due to the fact that Subversion is not currently offered.
Examples include the app-vim/gentoo-syntax package ([1]_), and
app-shells/gentoo-bashcomp ([2]_).

Subversion has many advantages over CVS, including changesets, directory 
versioning, atomic commits, versioned metadata, and more efficient branching
and tagging ([3]_).  Despite these advantages, many developers feel that
Subversion is not yet ready for the main tree due to scaling issues.

Specification
=============

The following steps describe, in detail, the process of setting up the
Subversion svnserve daemon (over SSH) and creating new repositories.

One repository should be created per project.  Reasons for this include easier
control over who has access, performance (checking out one big repository
takes many times longer), ease-of-use (branching and merging are more difficult
with one big repository), and meaningful revision numbers (since Subversion
uses repository-global revision numbers, revision numbers for project A will
increase on every commit even if no changes are made to project A).

For preexisting CVS repositories, instructions on converting ([4]_) are
already available in addition to the cvs2svn documentation itself ([5]_).

1.  Install dev-util/subversion::

    $ emerge subversion

2.  Write wrapper script for svnserve::


     $ $EDITOR /usr/local/bin/svnserve-ssh && chmod +x \
     > /usr/local/bin/svnserve-ssh

     #!/bin/sh
     umask 002
     exec /usr/bin/svnserve "$@"

3.  Modify the svnserve rc script::

     $ cp /etc/init.d/svnserve /etc/init.d/svnserve-ssh
     $ sed -i 's:/usr/bin/svnserve:/usr/local/bin/svnserve-ssh:' \
     > /etc/init.d/svnserve-ssh

4.  Edit svnserve rc config::

    $ ln -s /etc/init.d/svnserve /etc/init.d/svnserve-ssh
    $ $EDITOR /etc/init.d/svnserve

    SVNSERVE_OPTS="--root=/var/svnroot"
    SVNSERVE_USER="svn"
    SVNSERVE_GROUP="svn"

5.  Add svn group and user::

    $ groupadd svn
    $ useradd svn -d /var/svnroot -s /bin/false -g svn

6.  Create the directory that will hold the repositories::

    $ mkdir -p /var/svnroot/conf

7.  To create new repositories, simply run::

    $ svnadmin create --fs-type fsfs /var/svnroot/<repos>

8.  Make sure newly created/converted repositories have correct permissions.  Of course, Infra might want to do this differently::

    $ chown -Rf svn:users /var/svnroot/<repos>
    $ chmod -Rf 775 /var/svnroot/<repos>

9.  Start it up::

    $ /etc/init.d/svnserve-ssh start
    $ rc-update add svnserve-ssh default

Backwards Compatibility
=======================

Offering a choice between Subversion and CVS should in no way cause any
backwards compatibility issues.  Those developers who prefer to use CVS can
continue to do so without any ill effects.

References
==========

.. [1] app-vim/gentoo-syntax
       http://developer.berlios.de/projects/gentoo-syntax/
.. [2] app-shells/gentoo-bashcomp
       http://developer.berlios.de/projects/gentoo-bashcomp/
.. [3] Version Control with Subversion
       http://svnbook.red-bean.com/en/1.0/ch01s03.html
.. [4] Migration of Gentoo Repositories from CVS to Subversion
       http://dev.gentoo.org/~trapni/CVS2SVN.MIGRATION
.. [5] cvs2svn Documentation
       http://cvs2svn.tigris.org/cvs2svn.html

Copyright
=========

This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
Unported License.  To view a copy of this license, visit
https://creativecommons.org/licenses/by-sa/3.0/.