cgal/Developers_manual/doc_tex/Developers_manual/svn.tex

173 lines
6.7 KiB
TeX

% =============================================================================
% The CGAL Developers' Manual
% Chapter: SVN Server
% -----------------------------------------------------------------------------
% file : svn.tex
% authors: Mariette Yvinec, Sylvain Pion <Sylvain.Pion@sophia.inria.fr>
% -----------------------------------------------------------------------------
% $Id$
% $Date$
% =============================================================================
\chapter{SVN Server\label{chap:svn}}
\ccChapterRelease{Chapter Version: 3.0}
\ccChapterAuthor{Sylvain Pion ({\tt Sylvain.Pion@sophia.inria.fr})}
\index{SVN server|(}
SVN (Subversion) is a popular version control
system that keeps track of the complete history of changes for a set of
source files. SVN is of great help when several people work on the
same project.
You can find the SVN manual at \path|http://svnbook.red-bean.com|.
Lots of documentation, including tutorials, can easily be found on the net.
The InriaGForge site \path|http://gforge.inria.fr| hosts a SVN server for \cgal.
The complete documentation to access the \cgal\ project on InriaGForge
is at \path|http://www.cgal.org/Members/svn_cgal/|.
In a nutshell:
\section{Structure of the repository\label{sec:svn_structure}}
\index{SVN server!directory structure}
\ccIndexSubitem{directory structure}{for SVN server}
The \cgal\ repository, which is backed up daily,
\index{SVN server!backup}
is organized in the following way:
\begin{itemize}
\item There is one folder under \texttt{/svn/cgal/trunk/} per \cgal\ package.
\item Such a folder has the same structure as the current \cgal\ packages
(Chapter~\ref{chap:directory_structure}).
As a general rule, try to not put under SVN control any files
that are automatically generated.
Note that you can put some files under SVN control that you don't
want to be included in releases (\textit{e.g.}, literate programming
web files).
You can do that by adding their names in a \texttt{dont\_submit} file
\index{SVN server!dont_submit file@\texttt{dont\_submit} file}
(at the top of the module), using the syntax explained in the
\texttt{tar} manual (see the \texttt{--exclude-from}
option in the doc at \path|http://www.gnu.org/manual/tar/|).
The following files are always excluded from submissions:
\texttt{TODO}, \texttt{todo}, \texttt{TODO.txt}, \texttt{todo.txt},
\texttt{TO\_DO}, \texttt{Doxyfile} and \texttt{*.dxy}.
\end{itemize}
The repository tree has the following structure:
\begin{verbatim}
/svn/cgal
|
+---- trunk/
| |
| +--- Convex_hull_2/
| | |
| | |-- TODO
| | |
| | +-- package_info/Convex_hull_2/
| | | |
| | | |-- maintainer
| | | |
| | | |-- description.txt
| | |
| | +-- include/CGAL/
| | |
| | +-- src/
| | |
| | +-- doc_tex/
| | |
| | +-- examples/Convex_hull_2/
| | |
| | +-- demo/Convex_hull_2/
| | |
| | +-- test/Convex_hull_2/
| | |
| | +-- ...
| |
| +--- Number_types/
| |
| +--- Cartesian_kernel/
| |
| +--- ...
|
+---- branches/
| |
| +--- CGAL-1-1-patches/
| |
| +--- ...
|
+---- tags/
|
+--- CGAL-1-0/
|
+--- ...
\end{verbatim}
\section{Access to the repository\label{sec:svn_access}}
\index{SVN server!access|(}
Here are the access rules:
\begin{itemize}
\item Everybody who has a login and is part of the \cgal\ project on InriaGForge
has read/write access to the \cgal\ repository via SVN. There is also
read-only access for members via the web at
\path|https://gforge.inria.fr/plugins/scmsvn/viewcvs.php/?root=cgal|.
\item Each package has a set (which can be only one person) of people having
write access to the corresponding folder. It's up to the maintainer of
the package to decide who is given write access, and how you should
coordinate. \\
This rule is not currently enforced by SVN (each \cgal\ developer has
write access to the whole repository from SVN's point of view).
\cgal\ developers must voluntary enforce this rule.
\item Currently, there is no anonymous read-only access via SVN. Only the
read/write access for members via SVN over SSH is available.
\end{itemize}
\index{SVN server!access|)}
\section{How to use it\label{sec:svn_how_to}}
\begin{itemize}
\item
The first step is to register to InriaGForge at \path|http://gforge.inria.fr|.
\item
Step 2 is to create a pair of public/private SSH 2 keys,
and to upload the public one to InriaGForge.
\item
To be added to \cgal\ project, send your login name to
\ccAnchor{mailto:Sylvain.Pion@sophia.inria.fr}
{\texttt{Sylvain.Pion@sophia.inria.fr}} or
\ccAnchor{mailto:Laurent.Saboret@sophia.inria.fr}
{\texttt{Laurent.Saboret@sophia.inria.fr}}.
\item
If your SSH key contains a passphrase, you have to enter it
in \texttt{ssh-agent}. Type: \\
\texttt{ssh-add} \\
and enter the passphrase corresponding to your key.
\item
At this point, it's handy to store the repository URL in a shell variable: \\
\texttt{export svncgal=svn+ssh://scm.gforge.inria.fr/svn/cgal}
\item
To get the list of existing modules: \\
\texttt{svn ls \$svncgal/trunk}
\item
To check out a module, say \ccc{Convex\_hull\_2}: \\
\texttt{svn co \$svncgal/trunk/Convex\_hull\_2}
\item
Once you have checked out a module, you don't need to specify the
\texttt{\$svncgal} URL anymore for the usual commands like \texttt{svn commit}...
\item
You may check out all packages by: \\
\texttt{svn co \$svncgal/trunk}
\end{itemize}
After each commit, an automatic mail is sent to the
\texttt{cgal-commits@lists.gforge.inria.fr} mailing-list which records
the log message as well as the URLs to the corresponding diffs within
the ViewCVS interface. Maintainers and developpers can subscribe
to it in order to check what gets commited to their packages.
\index{SVN server|)}