1. Introduction and motivation OpenSolaris is moving towards a fully open development model. New tools will be used for source code management [1]. The centralized source code management tool is Subversion [2] (the selected distributed source code management tool (Mercurial) is part of a separate PSARC fasttrack). This source code management tool should be part of Solaris. Since Subversion is externally maintained open source software, the SFW consolidation is a natural choice. This fasttrack case proposes the integration of Subversion into the SFW consolidation. This case references the most recent stable release of Subversion, 1.4.0. This case requests a patch binding. 2. Discussion 2.1 Functionality Subversion is a source code management tool that aims to provide functionality similar to that of CVS [3]. It is released under an Apache/BSD-like open source license. It implements source code management using a centralized repository, which is accessed either directly via the filesystem or via a server. The server functionality is implemented by either starting up (via e.g. SSH) an SVN server process on the server machine, or by using the WebDAV extension to the Apache 2.x HTTP server. 2.2 Components The basic SVN functionality is contained within the exectuables installed in /usr/bin, 'svn' being the main one. The bulk of SVN is implemented in a number of shared libraries that contain the lower-level SVN API. The higher level components, including the commands, the higher-level language bindings, and the webdav module are implemented on top of these. It has been verified that the SVN libraries are appropriately scoped. The Apache 2.x WebDAV module is is installed in the existing usr/apache2/libexec directory. A library called Neon [4] is linked to for WebDAV [6] HTTP client functionality. This library is bundled with Subversion, and installed along with it. The Neon library (version 0.25.5) is LGPL-licensed. The HTTP server functionality is optional, and must be explicitly configured in the Apache configuration files to be activated. 2.3 Language bindings. Language bindings for perl, java and python are included. The perl and python bindings are generated by using swig [8]. 2.4 Documentation Subversion comes with brief manual pages for the main SVN commands. The main source of SVN documentation is the SVN Book, found externally [7]. These manual pages are installed in /usr/share/man/man{1,5} The included neon library has a set of section 3 manpages, describing its API. These manual pages are installed in /usr/share/man/man{1,3}. Additionally, the neon library comes with HTML documentation installed in /usr/share/doc/neon-0.25.5/html/ 3. Interfaces 3.1 Imported interfaces Apache 2.0 APR libraries PSARC/2004/676 OpenSSL (for https) PSARC/2003/500 Perl (for Perl bindings) PSARC/1999/192 Python 2.4 (for Python bindings) PSARC/2005/532 Java (for Java bindings) PSARC/2002/727 3.1 Exported interfaces Bundled files NAME STABILITY NOTES SUNWsvn Committed Package name /usr/bin/svn Committed Executable location /usr/bin/svnlook Volatile Executable location /usr/bin/svnadmin Committed Executable location /usr/bin/svnserve Committed Executable location /usr/bin/svnversion Volatile Executable location /usr/bin/svndumpfilter Volatile Executable location /usr/bin/svnsync Volatile Executable location svn commandline Committed (sub)commands and options svn add Committed svn blame (praise, annotate, ann) Committed svn cat Committed svn checkout (co) Committed svn cleanup Committed svn commit (ci) Committed svn copy (cp) Committed svn delete (del, remove, rm) Committed svn diff (di) Committed svn export Committed svn help (?, h) Committed svn import Committed svn info Committed svn list (ls) Committed svn lock Committed svn log Committed svn merge Committed svn mkdir Committed svn move (mv, rename, ren) Committed svn propdel (pdel, pd) Committed svn propedit (pedit, pe) Committed svn propget (pget, pg) Committed svn proplist (plist, pl) Committed svn propset (pset, ps) Committed svn resolved Committed svn revert Committed svn status (stat, st) Committed svn switch (sw) Committed svn unlock Committed svn update (up) Committed /etc/subversion Committed Location of system-wide config directory /etc/subversion/servers Committed Location of system-wide network config file /etc/subversion/config Committed Location of system-wide config file $HOME/.subversion Committed Location of user config directory $HOME/.subversion/servers Committed Location of user network configuration file $HOME/.subversion/config Committed Location of user config file /etc/subversion/* contents Volatile Config options $HOME/.subversion/* contents Volatile Config options [All the above configuration files/directories are optional and need not be present] /usr/lib/svn/libsvn_${NAME}-1.* Volatile SVN shlib names, each one ships as .so.0.0.0, with symlinks to .so.0 and .so client Volatile Library name delta Volatile Library name diff Volatile Library name svn_fs Volatile Library name fs_fs Volatile Library name ra Volatile Library name ra_dav Volatile Library name ra_local Volatile Library name ra_svn Volatile Library name repos Volatile Library name subr Volatile Library name wc Volatile Library name revlog Committed File formats Private wire protocol Committed Private /usr/apache2/libexec/mod_dav_svn.so Volatile Shared object /usr/apache2/libexec/mod_authz_svn.so Volatile Shared object /usr/include/svn/*.h Volatile Include Files /usr/include/svn/svn-revision.txt Volatile Config File SUNWneon Committed Package name /usr/bin/neon-config Volatile Executable location /usr/lib/pkgconfig/neon.pc Volatile Config File /usr/lib/libneon.so Volatile Symbolic Link /usr/lib/libneon.so.25 Volatile Symbolic Link /usr/lib/libneon.so.25.0.5 Volatile Shared Library /usr/include/neon/*.h Volatile Include File SUNWsvn-perl Committed Package name /usr/lib/svn/libsvn_swig_perl-1.so Volatile Symbolic Link /usr/lib/svn/libsvn_swig_perl-1.so.0 Volatile Symbolic Link /usr/lib/svn/libsvn_swig_perl-1.so.0.0.0 Volatile Shared Library /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Base.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Client.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Core.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Delta.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Fs.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Ra.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Repos.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/SVN/Wc.pm Volatile Perl Module /usr/perl5/site_perl/5.8.4/$PERL_ARCH/auto/SVN/_Core/.packlist Volatile Perl package file list /usr/perl5/site_perl/5.8.4/$PERL_ARCH/auto/SVN/_Core/_Core.bs Volatile Perl module bootstrap file /usr/perl5/site_perl/5.8.4/$PERL_ARCH/auto/SVN/_Core/_Core.so Volatile Shared Object SUNWsvn-python Committed Package name /usr/lib/svn/libsvn_swig_py-1.so Volatile Symbolic Link /usr/lib/svn/libsvn_swig_py-1.so.0 Volatile Symbolic Link /usr/lib/svn/libsvn_swig_py-1.so.0.0.0 Volatile Shared Library /usr/lib/python2.4/vendor-packages/libsvn/* Volatile Python module /usr/lib/python2.4/vendor-packages/svn/* Volatile Python module SUNWsvn-java Committed Package name /usr/lib/svn/libsvnjavahl-1.so Volatile Symbolic link /usr/lib/svn/libsvnjavahl-1.so.0 Volatile Symbolic link /usr/lib/svn/libsvnjavahl-1.so.0.0.0 Volatile Shared library /usr/share/lib/java/svn-javahl.jar Volatile JAR file 4. References [1] http://opensolaris.org/os/community/tools/scm/ [2] http://subversion.tigris.org/ [3] http://savannah.nongnu.org/projects/cvs/ [4] http://www.webdav.org/neon/ [5] http://www.apache.org/ [6] http://www.webdav.org/ [7] http://svnbook.red-bean.com/ [8] http://www.swig.org/