Subversion
On this page... (hide)
- 1. Resources
- 2. Installing Subversion
- 3. Checking out Ptolemy II
- 4. SVN vs CVS
- 5. SVN benefits to Kepler
- 6. Building SVN under Solaris
- 7. Complaints against Subversion
- 8. Conversion from CVS
- 9. Chess svn setup design issues
- 10. Chess svn set up todo list
- 11. Setting up anonymous access under Solaris
- 12. Setting up SVN Email
- 13. Setting up web access
- 13.1 Installing Apache
- 14. svn: Certificate is not issued by a trusted authority
- 15. Firewall and Proxy Problems
- 16. Keyword Substitution and end of line issues
- 17. Keyword problem: one line in auto-props masks another
- 18. Problem creating two filenames that differ only in case
- 19. Problems with Eclipse and ssh
- 20. Svnsync
- 21. Get repository folder children operation failed
- 22. svnserve Processes
- 23. svn: This client is too old to work with working copy '.'; please get a newer Subversion client
- 24. TortoiseSVN
1. Resources
2. Installing Subversion
- Windows installation:
- Cygwin - Windows command line client
- Subeclipse - Eclipse/SVN plugin
- WinCVS - Windows GUI Client
- Windows 7 users have problems with:
Tortoise SVN, try WinCVS instead.
- Windows 7 users have problems with:
- Netbeans/SVN notes - It could be that NetBeans has SVN support out of the box
- Solaris Installation
3. Checking out Ptolemy II
4. SVN vs CVS
Below is a comparison between SVN and CVS. The first two colums were taken from the The Subversion Features List
| Feature | SVN | CVS |
| Most CVS features | Subversion was originally designed to be a better CVS, so it has most of CVS's features. Generally, Subversion's interface to a particular feature is similar to CVS's, except where there's a compelling reason to do otherwise.Subversion has since expanded beyond its original goal of replacing CVS, but its history influenced its feature and interface choices; Subversion today should still feel very familiar to CVS users. | CVS has CVS's features (CVS Wins) |
| Directories are versioned. | Subversion versions directories as first-class objects, just like files.(SVN Wins) | In CVS, directories are not first-class objects |
| Copying, deleting, and renaming are versioned | Copying and deleting are versioned operations. Renaming is also a versioned operation, albeit with some quirks.(SVN wins because of renaming) | Renaming in CVS is difficult |
| Free-form versioned metadata ("properties"). | Subversion allows arbitrary metadata ("properties") to be attached to any file or directory. These properties are key/value pairs, and are versioned just like the objects they are attached to. Subversion also provides a way to attach arbitrary key/value properties to a revision (that is, to a committed changeset). These properties are not versioned, since they attach metadata to the version-space itself, but they can be changed at any time. (SVN Wins, though it is vendor lock-in) | CVS does not have this, but do we need it? Actually, it turns out that we can use these properties in Kepler to place a dependency on the ptII svn tree so that when a user checks out the kepler svn tree, they can automatically check out the ptII svn tree. This is a case of vendor lock-in, but does give SVN an advantage. |
| Atomic commits. | No part of a commit takes effect until the entire commit has succeeded. Revision numbers are per-commit, not per-file, and commit's log message is attached to its revision, not stored redundantly in all the files affected by that commit. | This is a UI issue, In Eclipse, it is possible to commit many changes at once. In 50k changes over 12 years, we have not had a problem. I could see in a very busy repository, this might help. but if the repository is that busy, then there are going to be plenty of conflict problems. |
| Branching and tagging are cheap (constant time) operations. | There is no reason for these operations to be expensive, so they aren't. Branches and tags are both implemented in terms of an underlying "copy" operation. A copy takes up a small, constant amount of space. Any copy is a tag; and if you start committing on a copy, then it's a branch as well. (This does away with CVS's "branch-point tagging", by removing the distinction that made branch-point tags necessary in the first place.) | Computers are fast, I've not noticed this as a problem. |
| Merge tracking. | Subversion 1.5 introduces merge tracking: automated assistance with managing the flow of changes between lines of development, and with the merging of branches back into their sources. The 1.5 release of merge tracking has basic support for common scenarios; we will be extending the feature in upcoming releases. | Again, Eclipse or diff help here. |
| File locking. | Subversion supports (but does not require) locking files so that users can be warned when multiple people try to edit the same file. A file can be marked as requiring a lock before being edited, in which case Subversion will present the file in read-only mode until a lock is acquired. | CVS can support file locking, but file locking is bad. |
| Symbolic links can be versioned. | Unix users can place symbolic links under version control. The links are recreated in Unix working copies, but not in win32 working copies.(SVN wins) | CVS does not create symbolic links. It would be nice if svn would create cygwin compatible links under win32. |
| Executable flag is preserved. | Subversion notices when a file is executable, and if that file is placed into version control, its executability will be preserved when it it checked out to other locations. (The mechanism Subversion uses to remember this is simply versioned properties, so executability can be manually edited when necessary, even from a client that does not acknowledge the file's executability, e.g., when having the wrong extension under Microsoft Windows). | CVS has something similar. |
| Apache network server option, with WebDAV/DeltaV protocol. | Subversion can use the HTTP-based WebDAV/DeltaV protocol for network communications, and the Apache web server to provide repository-side network service. This gives Subversion an advantage over CVS in interoperability, and allows certain features (such as authentication, wire compression) to be provided in a way that is already familiar to administrators (SVN Wins, if you are willing to have a significantly less secure and compartmentalized source server) | CVS does not have WebDAV access, so offsite developers behind firewalls have to jump through hoops. However, CVS is much more secure than SVN. |
| Standalone server option (svnserve). | Subversion offers a standalone server option using a custom protocol, since not everyone wants to run an Apache HTTPD server. The standalone server can run as an inetd service or in daemon mode, and offers the same level of authentication and authorization functionality as the HTTPD-based server. The standalone server can also be tunnelled over ssh. | CVS has pserver |
| Parseable output. | All output of the Subversion command-line client is carefully designed to be both human readable and automatically parseable; scriptability is a high priority. | CVS is similar |
| Localized messages. | Subversion uses gettext() to display translated error, informational, and help messages, based on current locale settings.(SVN Wins, but this is not that important) | CVS does not particularly have localization. |
| Interactive conflict resolution. | The Subversion command-line client (svn) offers various ways to resolve conflicting changes, include interactive resolution prompting. This mechanism is also made available via APIs, so that other clients (such as graphical clients) can offer interactive conflict resolution appropriate to their interfaces. (A slight win for SVN) | CVS indicates conflicts and expects the user to use their IDE. |
| Repository read-only mirroring. | Subversion supplies a utility, svnsync for synchronizing (via either push or pull) a read-only slave repository with a master repository. (A big win for SVN) | CVS does not have mirroring out of the box. |
| Write-through proxy over WebDAV. | Subversion 1.5 introduces a write-through proxy feature that allows slave repositories (see read-only mirroring) to handle all read operations themselves while passing write operations through to the master. This feature is only available with the Apache HTTPD (WebDAV) server option. (A win for SVN, if security is not a problem) | CVS does not have this feature. |
| Natively client/server, layered library design with clean APIs. | Subversion is designed to be client/server from the beginning; thus avoiding some of the maintenance problems which have plagued CVS. The code is structured as a set of modules with well-defined interfaces, designed to be called by other applications. | CVS is mature software with a idiosyncratic interface. This is neither an advantage nor a disadvantage. |
| Binary files handled efficiently. | Subversion is equally efficient on binary as on text files, because it uses a binary diffing algorithm to transmit and store successive revisions. (SVN wins, but size is not a huge problem these days and SVN repositories are almost 2x CVS repositories) | CVS handles binary files, but not efficiently. |
| Costs are proportional to change size, not data size. | In general, the time required for a Subversion operation is proportional to the size of the changes resulting from that operation, not to the absolute size of the project in which the changes are taking place. | CVS and SVN seem to have about the same speed over ssh. SVN over WebDAV will be slower than SVN over SSH. |
| Bindings to programming languages. | The Subversion APIs come with bindings for many programming languages, such as Python, Perl, Java, and Ruby. (Subversion itself is written in C.) | CVS is callable from the command line. I don't see this as important. |
| Changelists. | Subversion 1.5 introduces changelists, which allows a user to put modified files into named groups on the client side, and then commit by specifying a particular group. For those who work on logically separate changesets simultaneously in the same directory tree, changelists can help keep things organized. | Is this important? |
5. SVN benefits to Kepler
- WebDAV
- Access from behind firewalls works.
- LDAP access is easier than named Unix accounts
- WebDAV has finer grained access control
- Kepler found cvs2svn conversion to result in smaller modules, which is different than the ptII experience (see below).
- Easier to move and rename directories in svn and retain logs
svnsyncwill make it easier because Kepler depends on ptII.
6. Building SVN under Solaris
See http://subversion.apache.org/source-code.html
We use FSFS for the backend, not Berkeley DB. See http://mercury.nceas.ucsb.edu/kepler/pipermail/kepler-dev/2008-June/013097.html
Below are the steps to build subversion-1.7.2:
I was having various problems installing subversion-1.7.2 under Solaris so I tried autogen.sh
gtar -zxf subversion-1.7.2.tar.gz
cd subversion-1.7.2
export LD_LIBRARY_PATH=/usr/local/lib
bash get-deps.sh
bash autogen.sh
./configure --prefix=/usr/local/subversion-1.7.2 --with-ssl --with-libs=/usr/local/ssh/lib --enable-shared="yes" --enable-static="no" --disable-nls
gmake >& make.out &
export PATH=/usr/bin:${PATH}
gmake install >& install.out &
6.1 Problem: SSL negotiation failed: SSL disabled due to library version mismatch
svn: E175002: Unable to connect to a repository at URL 'https://bambi.millennium.berkeley.edu/projects/chess/ptII/trunk'
svn: E175002: OPTIONS of 'https://bambi.millennium.berkeley.edu/projects/chess/ptII/trunk': SSL negotiation failed: SSL disabled due to library version mismatch (https://bambi.millennium.berkeley.edu)
http://www.svnforum.org/threads/35175-SSL-negotiation-failed-Secure-connection-truncated suggests: "So Mozilla, RapidSVN, and TortoiseSVN were all breaking because of the SSLCipherSuite setting (both the original Apache-supplied value, and another value recommended by QualysGuard)."
When I upgraded from httpd-2.2.20 to 2.2.22, I noticed that httpd-ssl.conf changed:
---
> SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
However, it looks like the problem is that /usr/local/lib had links to older versions of the openssl libraries.
Below are the steps to build Subversion-1.6.17:
wget http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz
gtar -zxf subversion-1.6.17.tar.gz
gtar -zxf subversion-deps-1.6.17.tar.gz
cd subversion-1.6.17
export LDFLAGS="-L/usr/local/lib -R/usr/local/lib -L/usr/sfw/lib -R/usr/sfw/lib -L/usr/lib -R/usr/lib"
export LIBS="$LIBS -lintl"
export LD_FLAGS=-L/usr/local/lib
./configure --prefix=/usr/local/subversion-1.6.17 --with-ssl --with-libs=/usr/local/ssh/lib --enable-shared="yes" --enable-static="no" --disable-nls
cd serf
./configure --with-ssl --with-libs=/usr/local/ssh/lib
cd ..
gmake
export PATH=/usr/bin:${PATH}
gmake install
See http://bill.sirinek.com/?p=83
attempted multiple inclusion of file
Undefined first referenced
symbol in file
libintl_dgettext main.o (symbol belongs to implicit
dependency /usr/local/lib/libintl.so.8)
ld: fatal: Symbol referencing errors. No output written to .libs/svnadmin
collect2: ld returned 1 exit status
Note that during the install step, I got:
build/install.sh -c -m 755 libaprutil-1.la /usr/local/subversion-1.6.12/lib
libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apr/lib
gmake[1]: *** [install] Error 1
gmake[1]: Leaving directory `/export/home1/root/tools/subversion-1.6.12/apr-util'
gmake: *** [external-install] Error 1
However, I already have /usr/local/apr/lib installed, so I don't think this is an issue.
We need --with-ssl so that we avoid svnsync: SSL is not supported.
I tried --disable-nls so as to avoid
httpd: Syntax error on line 430 of /usr/local/apache-2.2.16/conf/httpd.conf:
Cannot load /usr/local/apache-2.2.16/modules/mod_dav_svn.so into server:
ld.so.1: httpd: fatal: relocation error: file /usr/local/subversion-1.6.12/lib/libsvn_repos-1.so.0:
symbol libintl_dgettext: referenced symbol not found
but that did not work
The link was failing in subversion-1.6.12:
symbol in file
BIO_set_flags ./.libs/libserf-0.a(ssl_buckets.o)
BIO_clear_flags ./.libs/libserf-0.a(ssl_buckets.o)
SSL_CTX_set_client_cert_cb ./.libs/libserf-0.a(ssl_buckets.o)
BIO_test_flags ./.libs/libserf-0.a(ssl_buckets.o)
One fix is to edit Makefile:
Another fix is to run ./configure --with-ssl --with-libs=/usr/local/ssh/lib in the serf directory.
Another fix is to add -L/usr/local/lib to the link lines before -lssl -lcrypto:
gcc -static -o test/serf_get libserf-0.la test/serf_get.lo \
/export/home1/root/tools/subversion-1.6.12/apr-util/libaprutil-1.la \
-lexpat /export/home1/root/tools/subversion-1.6.12/apr/libapr-1.la -luuid \
-lsendfile -lrt -lsocket -lnsl -lpthread -lm -lz -L/usr/local/lib -lssl -lcrypto
The real fix is to use export LDFLAGS=-L/usr/local/lib before running ./configure.
Updating OpenSSL from 0.9.8.g to 0.9.8.o:
--prefix=/usr/local/openssl-0.9.8o \
--openssldir=/usr/local/openssl-0.9.8o \
-fPIC shared
The link was failing in subversion-1.4.5:
symbol in file
libintl_bind_textdomain_codeset /export/home1/root/tools/subversion-1.4.5/subversion/libsvn_subr/.libs/libsvn_subr-1.so
libintl_bindtextdomain /export/home1/root/tools/subversion-1.4.5/subversion/libsvn_subr/.libs/libsvn_subr-1.so
libintl_dgettext blame-cmd.o
ld: fatal: Symbol referencing errors. No output written to .libs/svn
collect2: ld returned 1 exit status
The fix was to edit Makefile and add the following to SVN_APR_LIBS:
and set LIBS:
7. Complaints against Subversion
- Is svn that much better than cvs? http://subversion.tigris.org says "Subversion is meant to be a better CVS, so it has most of CVS's features". Typical arguments used for svn over cvs:
- Merging in svn is better than in cvs. How many people actually use branches?
- It is easier to move files in svn than in cvs. This has some merit, but is it worth the effort?
- If svn is a better CVS, then why is the
svn statuscommand different thancvs status. - It turns out that
svn infoprovides some of the info ofcvs status, but how do I determine if keyword substitution is occurring? Under cvs, thecvs statuscommand says-kb. What about svn? - Building the client requires way too many other packages. How can svn possibly stay secure if it depends on so many packages?
- Subversion can optionally use Apache for access. Enabling a web server on a machine that does not already have one makes the machine less secure.
- There is no decent svn Unix style man page. This is deliberate, see Bug 1508. This is not good. I want to know exactly what commands will work with a specific installation of SVN, not what the latest documentation for the latest version is.
- On the server, svn is a disk hog.
- A gzipped tar file of the Ptolemy II cvs tree is 372.9 MB.
- A gzipped tar file of the same tree after running the conversion from cvs to svn is 570MB.
- On the client, svn is a disk hog.
- Under Linux, the checked out ptII cvs repository is 333Mb.
- Under Windows, the checked out ptII ssh repository is 726Mb
332880 ptII
-bash-3.1$ du -sk trunk
725648 trunk
-bash-3.1$
- Some discussion about the problem:
- SVN Docs: Revisions
- Why rewrite the Subversion working copy? 4/08 discussion
- Some discussion about the problem:
- Problems with Eclipse clients Subversive and Subclipse.
A user wrote: "I found both Subversive and Subclipse painful; I had to perform significant repairs externally using TortoiseSVN. I even managed to get Subversive to delete a 10MB directory tree by mistake!"
"Both Subversive and Subclipse are very dangerous for CVS users. In CVS, folders do not have significant state so you can do what you like when you like. In SVN you MUST commit folder state immediately after committing file state. For instance if you add something to svn:ignore, you must commit the folder, otherwise you risk having an outgoing conflict between svn:ignore outgoing and child folder state incoming. Do not attempt to fix such a conflict with either of Subclipse or Subversive; you just dig a deeper hole. Use TortoiseSVN to get back to all green arrows."
"Unfortunately neither subclipse nor subversion have GUI state for folder state comparison so you get no clue as to why folders are in a mess. The GUI is generally inadequate in distinguishing between folder as content and folder as container of children."
- Another drawback with svn is that the modtimes of the files are not
preserved. When I do a cvs checkout, the modtimes of the files are preserved. This makes it much easier to see what has recently changed.
Here's the svn tree:
-rw-r--r-- 1 cxh labstaff 18596 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/KernelException.java
-rw-r--r-- 1 cxh labstaff 9137 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/KernelRuntimeException.java
-rw-r--r-- 1 cxh labstaff 5858 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/InvalidStateException.java
-rw-r--r-- 1 cxh labstaff 3646 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/InternalErrorException.java
-rw-r--r-- 1 cxh labstaff 5121 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/IllegalActionException.java
-rw-r--r-- 1 cxh labstaff 4937 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/NameDuplicationException.java
-rw-r--r-- 1 cxh labstaff 2660 Jun 12 13:10 /home/eecs/cxh/ptII/ptolemy/kernel/util/NoSuchItemException.java
Here's the cvs tree:
-rw-r--r-- 1 cxh labstaff 5125 Jul 8 2005 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/IllegalActionException.java
-rw-r--r-- 1 cxh labstaff 3650 Jul 8 2005 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/InternalErrorException.java
-rw-r--r-- 1 cxh labstaff 4941 Jul 8 2005 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/NameDuplicationException.java
-rw-r--r-- 1 cxh labstaff 2664 Jul 8 2005 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/NoSuchItemException.java
-rw-r--r-- 1 cxh labstaff 18600 Dec 6 2007 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/KernelException.java
-rw-r--r-- 1 cxh labstaff 9141 Dec 6 2007 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/KernelRuntimeException.java
-rw-r--r-- 1 cxh labstaff 5862 Jun 6 08:13 /home/eecs/cxh/src/ptII.cvs/ptolemy/kernel/util/InvalidStateException.java
bash-3.00$
Being able to quickly see which Java file was last updated in the cvs tree is a serious win.
Also, the ptII tree includes derived files that are generated by Autoconf, JavaCC and Antlr. If the commit times are not preserved, then the source file might have a mod time later than the derived file which means that either the tool must be run or else the build system must touch the derived file. This is gross. Why not just preserve the commit time?
Why doesn't svn preserve mod times?
- Ian Brown mentioned that TortoiseSVN has an option that does this:
Set filedates to the "last commit time"This option tells TortoiseSVN to set the filedates to the last commit time when doing a checkout or an update. Otherwise TortoiseSVN will use the current date. If you are developing software it is generally best to use the current date because build systems normally look at the datestamps to decide which files need compiling. If you use "last commit time" and revert to an older file revision, your project may not compile as you expect it to.- Re: [Issue 1445] checkout/export must set last-commit-timestamps - 2004 post that discusses the problem.
- SVN Book, Chapter 7, Advanced Topics - covers setting
use-commit-timesuse-commit-timescan be set in the Subversionconfigfile. The tricky part is finding that file. For me, under Cygwin, the file was$HOME/.subversion/config. Other places to look arec:/Documents and Settings/cxh/Application Data/Subversion/config. Make this change:### Set use-commit-times to make checkout/update/switch/revert
### put last-committed timestamps on every file touched.
use-commit-times = yes
- svn2cl is slow. This is not a svn problem, but a problem with
xsltproc. Runningsvn2clon a the ptII tree takes 43 minutes. Running gnuify-changelog.pl takes 84 seconds. However,gnuify-changelog.pldoes not include the names of the files that were committed.
Still, I miss cvs2cl, which had nice features like clumping non-atomic cvs commits into one block of commits.
It is a drawback in svn log that the output is not similar to cvs log.
The developer of svn2cl said:
- Conversion from CVS lost a few files.
- Conversion from CVS requires
--default-eol=native. Instead, it should just convert files they are in the tree. Why do I have to specify a native default?
8. Conversion from CVS
- ONLamp.com -- Converting from CVS to Subversion with cvs2svn (2005)
- cvs2svn - download and instructions
8.1 CVS to SVN conversion procedure
- Download and install
cvs2svn - Copy the ptII repository for testing.
cvs2svnwill not work remotely see the How can I convert a CVS repository to which I only have remote access?. On the cvs repository machine (source), I copied/user/cvs/CVSROOTand/users/cvs/ptIIcd /home
gtar -zcf ptII.tar.gz --exclude=commitlogs cvs/CVSROOT cvs/ptII - On a fast machine other than the CVS repository, run the command
cd /tmp
mkdir cxh
cd cxh
scp source:/home/ptII.tar.gz .
tar -zxf ptII.tar.gz
svnadmin create /tmp/cxh/repos
cd cvs2svn-2.1.1
./cvs2svn --default-eol=native --fallback-encoding=utf_8 -s /tmp/cxh/repos/ptII /tmp/cxh/cvs/ptII - Then try out the repository
cd /tmp/cxh
mkdir tmp
cd tmp
svn checkout file:///tmp/cxh/repos/ptII/trunk
8.2 Problems
- Why do is
--default-eol=nativenot the default? My repository CVS repository is fine with regard to the binary mode, yet the tool ignores this? That is like having cp ignore null characters in files because they might cause a NullPointerException. Sheesh. - Problems with a file being in the Attic. This is a sign of corruption, see the cvs2svn faq. I just removed that attic file
- Problems with encoding. Some of the files in
ptII/ptolemy/domains/wireless/demo/CooperativeTerminals/Attic/have the character\222. The fix is to use--fallback-encoding=utf_8. The command to restart is
./cvs2svn --pass CleanMetadataPass --dry-run -s /tmp/cxh/repos/ptII /tmp/cxh/cvs/ptI
- vergil/graph/EditorDropTarget.java was still in svn, though it had been removed from cvs.
svn delete graph
svn commit -m "Removed vergil/graph from svn, cvs2svn failed" graph
ptII/vendors/jhdl/ptjhdllib/JHDL.jardid not get
added
8.3 Under Eclipse, a Cygwin ssh window flashes
With the default subeclipse installation I get a Cygwin ssh window flashing.
describes a fix which is to tell Subclipse to use SVNKit
- HowTo: Configure SVN+SSH with Subclipse on Windows describes using Tortoisesvn and setting the
SVN_SSHvariable to
The backslashes are important However, with this method, I have to type in my passwd everytime or otherwise setup Tortoisesvn to do the right thing
8.4 Using Subversion with a different ssh user name
The svn --username command line option does not work with ssh. To use ssh with a different username, edit or create ~/.ssh/config with
User yourlog
where yourlog is the login on the remote server. (A tip of the hat to Chad Humphries, see Using a different username with SVN+SSH)
An alternative is to use your remote login in the URL, for example:
To illustrate that --username does not work with, ssh I was able to set up svn to use a debugging ssh server as follows:
- On the svn server, start up
sshdin debug mode on a non-standard port:/usr/lib/ssh/sshd -d -p 29934 - On the svn client, set
SVN_SSH@ to use the same port:export SVN_SSH="ssh -p 29934"@@ - On the svn client, try to connect as a user other than
yourlogby su-ing or sudo-ing to another account (I chose apache) and running:
(:source) svn co --username yourlog svn+ssh://source.eecs.berkeley.edu/chess/ptII/trunk ptII (:sourceend:)
Sadly, the --username argument has no effect on ssh, the output on the svn server will say something like:
Failed keyboard-interactive for <invalid username> from 128.32.48.120 port 55524 ssh2
If I restart sshd on the server with /usr/lib/ssh/sshd -d -p 29934 and then run
then the output on the svn server will say:
8.5 Subclipse vs Subversion
Two Eclipse plugins: Subclipse and Subversion Subclipse
- + Hosted on tigris.org, which is where Subversion is hosted.
- - Team -> Share Project does not allow multiple projects to be added to svn
- + Hosted at the Eclipse site.
- + Team -> Share Project does allow multiple projects to be added to svn
9. Chess svn setup design issues
- Use
svnserveinstead of Apache. See http://svnbook.red-bean.com/en/1.4/svn.serverconfig.choosing.html#svn.serverconfig.choosing.svn-sshsource.eecsdoes not currently run Apache for security reasons- We have ssh accounts already on
source.eecs
- Note that setting up anonymous svn access requires only one repository, per machine, unlike what we do with cvs. See One svnserve, multiple repositories
10. Chess svn set up todo list
- Document set up of user directories with
svnserve - Nightly builds
11. Setting up anonymous access under Solaris
- Using Subversion, NetBeans IDE, and Sun Java System Web Server With Java ME describes creating
/etc/init.d/svnserve, our version looks like
#
# SVNSERVE - manage the SVN server.
# From http://java.sun.com/developer/technicalArticles/javame/add_ons/
# See http://chess.eecs.berkeley.edu/ptolemy/wiki/Ptolemy/Subversion
#
case "$1" in
'start')
if [ -x /usr/local/bin/svnserve ]; then
/usr/local/bin/svnserve -d -r /export/home/svn
fi
;;
'stop')
if /usr/bin/pgrep svnserve >/dev/null 2>&1; then
pkill svnserve
fi
;;
'restart')
/etc/init.d/svnserve stop
/etc/init.d/svnserve start
;;
esac
exit 0
- We then create a link
ln ../init.d/svnserve S98svnserve
- Set up the firewall.
- Edit
/etc/ipf/ipf.conf
pass in quick on bge0 proto tcp from any to 128.32.48.234 port = 3690 flags S keep state group 100
pass in quick on bge0 proto udp from any to 128.32.48.234 port = 3690 flags S keep state group 100
- Update the firewall:
ipf -Fa /etc/ipf/ipf.conf
- Test the setup:
12. Setting up SVN Email
See How do I get email about each ptII SVN check in?
This is not well documented, so here goes.
The post-commit script is run after a commit. This script must be in the hooks/ directory of the repository on the server.
- Go to the
hooks/directory and copypost-commit.tmplcd /home/svn/chess/ptIIprivi/hooks
cp post-commit.tmpl post-commit
chmod a+x post-commit - Edit
post-commitso that it looks like:On the CHESS server, the address would be workgroup-cvs at chess.#!/bin/sh
# See post-commit.tmpl
REPOS="$1"
REV="$2"
/export/home/svn/chess/local/commit-email.pl -h source.eecs.berkeley.edu "$REPOS" "$REV" devels@yourdomain - Copy
commit-email.plfrom the subversion sources:cp /export/home1/root/tools/subversion-1.4.5/tools/hook-scripts/commit-email.pl .
12.1 Setting up email for people with non-EECS addresses.
By default, source.eecs assumes everyone has an EECS.Berkeley.EDU address. If this is not the case, then as root on source:
- Edit
/etc/mail/sendmail.cfand add the user account to theC{E}rootline - Edit
/etc/mail/aliasesand add an alias for the user account to the outside email address - Run
newaliases - Restart sendmail with
/usr/bin/pkill -HUP -x -u 0 sendmail - Check the alias with
expn username
quit
12.2 Email problem
/export/home/svn/chess/ptIIprivi/hooks/commit-email.pl: use of either `-h' or `--from' is mandatory when sending email using direct SMTP.
subversion: not sending emails any more suggests editing commit-email.pl and changing
$smtp_server = "127.0.0.1";
to
#$smtp_server = "127.0.0.1";
13. Setting up web access
13.1 Installing Apache
- Download Apache
- Configure Apache. The
INSTALLdoc from the subversion sources says:The options I used were:At the top of the httpd-2.0 tree:
$ ./buildconf
$ ./configure --enable-dav --enable-so --enable-maintainer-mode
The first arg says to build mod_dav.
The second arg says to enable shared module support which is needed
for a typical compile of mod_dav_svn (see below).
The third arg says to include debugging information. If you
built Subversion with --enable-maintainer-mode, then you should
do the same for Apache; there can be problems if one was
compiled with debugging and the other without.
Note: if you have multiple db versions installed on your system,
Apache might link to a different one than Subversion, causing
failures when accessing the repository through Apache. To prevent
this from happening, you have to tell Apache which db version to
use and where to find db. Add --with-dbm=db4 and
--with-berkeley-db=/usr/local/BerkeleyDB.4.2 to the configure
line. Make sure this is the same db as the one Subversion uses.
This note assumes you have installed Berkeley DB 4.2.52
at its default locations. For more info about the db requirement,
see section I.5.
You may also want to include other modules in your build. Add
--enable-ssl to turn on SSL support, and --enable-deflate to turn on
compression support, for example. Consult the Apache documentation
for more details../configure --prefix=/usr/local/apache-2.2.16 --datadir=/home/www
--enable-so --enable-ssl --enable-rewrite --with-ssl=/usr/local/ssl \
--disable-ipv6 --with-included-apr --enable-dav - Set the path so that
/usr/bin/lnis in the path before/usr/ucb/ln, then make and install apache:export PATH=/usr/bin:${PATH}
make >& make.out
make install >& install.out - Set up the startup scripts
cd /etc/rc3.d
ln -s ../init.d/apachectl S30apachectl
ln -s ../init.d/apachectl K30apachectl
cd ../rc0.d
ln -s ../init.d/apachectl K30apachectl
cd ../rc1.d
ln -s ../init.d/apachectl K30apachectl - Start up apache:
/etc/init.d/apachectl start
- Verify that there is a web page at http://source.eecs.berkeley.edu
- Edit
/usr/local/apache/conf/httpd.conf:# Subversion
LoadModule dav_svn_module modules/mod_dav_svn.so
<Location /svn/chess>
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
# Subversion
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn/chess/ealpapers>
DAV svn
SVNPath /home/svn/chess/ealpapers
#SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache/local/svn-chess-passwd
Require valid-user
# For any operations other than these, require an authenticated user.
#<LimitExcept>
# Require valid-user
#</LimitExcept>
# User svn
# Group svn
</Location>
<Location /svn/chess/ptII>
DAV svn
SVNPath /home/svn/chess/ptII
#SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache/local/svn-chess-passwd
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# User svn
# Group svn
</Location>
<Location /svn/chess/triq>
DAV svn
SVNPath /home/svn/chess/triq
#SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache/local/svn-chess-passwd
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# User svn
# Group svn
</Location>
<Location /svn/kepler>
DAV svn
SVNPath /export/home2/svn/kepler
#SVNParentPath /export/home2/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache/local/svn-chess-passwd
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# User svn
# Group svn
</Location>
<Location /svn/chess/ojdcheck>
DAV svn
SVNPath /home/svn/chess/ojdcheck
#SVNParentPath /export/home2/svn
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache/local/svn-chess-passwd
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# User svn
# Group svn
</Location>
14. svn: Certificate is not issued by a trusted authority
The problem is that running svn sometimes not recognize authority.
TortoiseSVN does not have this problem.
(Update: Windows 7 users have problems with: Tortoise SVN, try WinCVS instead.)
Versions of svn compiled using OpenSSH under Mac OS X and Solaris do have this problem.
The error is:
Error validating server certificate for 'https://source.eecs.berkeley.edu:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: source.eecs.berkeley.edu
- Valid: from Tue, 15 Jul 2008 08:00:00 GMT until Fri, 16 Jul 2010 07:59:59 GMT
- Issuer: Terms of use at https://www.verisign.com/rpa (c)05, VeriSign Trust Network, VeriSign, Inc., US
- Fingerprint: da:ff:45:c9:df:6f:b5:73:ec:9c:f8:a7:cc:93:08:84:22:a8:78:3d
(R)eject, accept (t)emporarily or accept (p)ermanently?
We could just blindly permanently accept the certificate, but this is really wrong since it is bad security hygiene. Finding the cause of the problem and possible solutions is of interest. Below are two workarounds, see also Ptolemy Bugzilla:139 Convert the Ptolemy II repository from CVS to SVN
Going to https://source.eecs.berkeley.edu/svn/chess/ptII/trunk in a web browser such as Firefox and examining the certificate does not indicate an error.
14.1 Editing ~/.subversion/servers
Kevin Miller's Blog Subversion and Certificate Authorities discusses editing
~/.subversion/servers and also a couple of patches to svn-1.5.
See also Making SVN trust a new root CA certificate
To modify ~/.subversion/servers, download a copy of the missing Certificate Authority (CA) file as follows
- In Firefox, go to https://source.eecs.berkeley.edu
- Click on the lock in the bottom right
- In the Page Info window, select the Security Tab and then select View Certificate
- Select Details and then select the top level CA, which will be something like
Builtin Object Token VeriSign Class 3 Public Primary CA - Export the file as an X.509 PEM file
- Use that file in ~/.subversion/servers for the ssl-authority-files value, for example:
ssl-authority-files=/Users/cxh/tmp/BuiltinObjectToken:VerisignClass3PublicPrimaryCertificationAuthority
However, the problem here is that we are downloading the CA file from the website we are trying to verify. Another workaround is to download the root CAs from Verisign. The file we are interested in is PCA3ss_v4.509.
To view the contents of the CA file:
Then adjust ~/.subversion/servers:
and do the checkout. At least here, we have the authority file downloaded from Verisign, so we can be fairly certain that svn repository has a legitimate certificate.
14.2 Fixing OpenSSL
It turns out that the problem is that svn is using OpenSSL. The OpenSSL FAQ question How can I set up a bundle of commercial root CA certificates? says
However, an updated version of that script can be found at http://www.opensource.apple.com/darwinsource/Current/apache_mod_ssl-690/mod_ssl/pkg.sslcfg/ca-bundle.pl To run this, download ca-bundle.pl and do
Running:
will return 0, which is correct.
See also http://svn.haxx.se/dev/archive-2006-06/0547.shtml - a note about this problem in the svn devel log, which points out http://curl.haxx.se/docs/caextract.html which includes cacert.pem.
Here's how to set up openssl on the Mac so that it does not prompt for accepting the certificate:
- Download the root CAs from Verisign. The file we are interested in is
PCA3ss_v4.509.openssl x509 -inform DER -in PCA3ss_v4.509 -out PCA3ss_v4.pem -outform PEM - To view the contents of the CA file:
openssl x509 -text -in PCA3ss_v4.pem
- Become root with:
and copysudo -
PCA3ss_v4.pem:For details, see Chris Adams' Installing Custom Certificate Authorities for OpenSSLcp PCA3ss_v4.pem /System/Library/OpenSSL/certs - Run the
c_rehashcommand from OpenSSL:c_rehash /System/Library/OpenSSL/certs/
The certificate authority will be present and svn users should not be prompted to accept the certificate from source.eecs. Also, the
should return
It would be nice if we could import all the Commercial CAs in one fell swoop.
15. Firewall and Proxy Problems
If you get:
RA layer request failed
svn: OPTIONS of 'https://source.eecs.berkeley.edu/svn/chess': Could not resolve hostname `source.eecs.berkeley.edu': The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for.
Or if the Apache error_log says Error writing base64 data: Connection reset by peer [500, #131] (the see http://svn.haxx.se/users/archive-2007-09/0388.shtml)
Then the problem is likely with a corporate firewall.
The first thing to try is to point your web browser at the SVN url. For example, try opening https://source.eecs.berkeley.edu/svn/chess/ptII/trunk, you should get a listing of the files at that location. If you do, then the problem is that the SVN client needs to have its proxy set, see the Subversion FAQ for details.
Under TortoiseSVN, you could try setting the TortoiseSVN proxy to match the proxy of your web browser. If you have a proxy autoconfiguration URL, then try entering the URL into your browser and analyzing the code to determine the name of your proxy machine.
Another thing to try is to edit the \Documents and Settings\user\Application Data\Subversion\servers file and add
http-proxy-port = <proxyport>
(Many Thanks to Thomas Mandl and Thomas Huining Feng for the above)
Another possibility is discussed at http://groups.google.com/group/pyjamas-dev/browse_thread/thread/682bc1991c2326b6
16. Keyword Substitution and end of line issues
To enable keyword substition, such as $Id$ being changed to $Id: bif4.txt 7 2009-03-05 01:13:48Z cxh $, you need to set up ~/.subversion/config so that each file extension has the appropriate settings. See http://chess.eecs.berkeley.edu/ptexternal/nightly/doc/coding/eclipse.htm#Subversive
for details which involve adding ~/ptII/doc/coding/svn-config-auto-props.txt to ~/.subversion/config
Why is it necessary to add have a pattern for every file? The answer is that Subversion decides that everything is a binary file and that it is safer to check things in and not modify them. However, there should be a repository wide way to set up config instead of requiring each user to do so.
Another limitation is that the enable-auto-props=yes line must be before the [auto-props] line. This is really lame. It is a natural mistake to have enable-auto-props=yes after [auto-props]. Instead, auto-props should be enabled if [auto-props]] is uncommented.
To test this out, if you have read/write permission to the source.eecs.berkeley.edu SVN repositories, try:
A svntest/README.txt
Checked out revision 7.
bash-3.2$ cd svntest
bash-3.2$ echo '$Id$' > testfile.txt
bash-3.2$ svn add testfile.txt
A testfile.txt
bash-3.2$ svn commit -m "A test for svn keywords: testfile.txt " testfile.txt
Adding testfile.txt
Transmitting file data .
Committed revision 8.
bash-3.2$ cat testfile.txt
$Id: testfile.txt 8 2009-03-05 01:27:44Z cxh $
bash-3.2$ svn proplist testfile.txt
Properties on 'testfile.txt':
svn:keywords
svn:eol-style
Note that testfile.txt had $Id$ properly substituted. If it had only $Id$ and not $Id: testfile.txt 8 2009-03-05 01:27:44Z cxh $
then keywords were not being substituted and that ~/.subversion/config had a problem.
16.1 Checking Keyword Substitution
To check keyword substitution on a file:
Properties on 'README.txt':
svn:keywords
svn:eol-style
bash-3.2$ svn propget svn:keywords README.txt
Author Date Id Revision
bash-3.2$ svn propget svn:eol-style README.txt
native
See ptII/doc/coding/releasemgt.htm for information about
how to use ptII/adm/bin/svnpropcheck.
16.2 Fixing Keyword Substitution
To set the keywords:
svn propset svn:eol-style native filename
17. Keyword problem: one line in auto-props masks another
http://subversion.tigris.org/issues/show_bug.cgi?id=2036 describes a four year old bug where the ~/.subversion/config file has problems with lines masking each other. For example, if ~/.subversion/config has:
Makefile = svn:eol-style=native;svn:keywords=Author Date Id Revision
then if the user creates a makefile, it will have keywords set, but if the user creates a Makefile it will not have the keywords set. If course, this only matters on real file systems such as Mac OS X or Unix. Windows users have the oddly antiquated case insensitive, case preserving file system.
18. Problem creating two filenames that differ only in case
Under MacOS with svn-1.4.4:
bash-3.2$ echo '$Id$' > Makefile
bash-3.2$ svn add makefile Makefile
A makefile
A Makefile
bash-3.2$ svn commit -m "config has makefile first" makefile Makefile
Adding Makefile
Adding makefile
svn: Commit failed (details follow):
svn: Can't copy '/Users/cxh/src/svntest/.svn/props/makefile.svn-work'
to '/Users/cxh/src/svntest/.svn/tmp/props/makefile.svn-work.tmp': No such file or directory
However, the same command works under Solaris with svn-1.4.5
19. Problems with Eclipse and ssh
The problem was that if a user had an incorrect password, then the ssh server would block ssh connections:
>>> Sun_SSH_1.1, SSH protocols 1.5/2.0, OpenSSL 0x0090704f
>>> debug1: Reading configuration data /etc/ssh/ssh_config
>>> debug1: Rhosts Authentication disabled, originating port will not be
>>> trusted.
>>> debug1: ssh_connect: needpriv 0
>>> debug1: Connecting to source.eecs.berkeley.edu [128.32.48.XX] port 22.
>>> debug1: Connection established.
>>> debug1: identity file /home/eecs/cxh/.ssh/identity type -1
>>> debug1: identity file /home/eecs/cxh/.ssh/id_rsa type 1
>>> debug1: identity file /home/eecs/cxh/.ssh/id_dsa type -1
>>> ssh_exchange_identification: Connection closed by remote host
>>> debug1: Calling cleanup 0x341a0(0x0)
>>> cxh@carson 38%
netstat on source's console shows that soda1am.Equip has a bunch of TIME_WAIT connections on sshd. soda1am.Equip is the machine through which the connections from AirBears arrive.
Looking around on the net finds http://archive.netbsd.se/?ml=openssh-unix-dev&a=2007-10&t=5430083 which suggested editing /etc/ssh/sshd_config and changing MaxStartups.
However, the real question is: Why does this occur?
It turns out one of our Eclipse users was using either Subclipse or Subversive to connect via ssh. They had the wrong password, so there were many bogus connections.
The account that was causing the problem was using Eclipse on the Mac with these versions of Subversive: (:source) Subversive SVN Connectors 2.1.0 Subversive SVN Team Provider (Inclubation) 0.7.3 SVNKit 1.2.2 Implementation (Optional) 0.7.3 (:sourceend:)
I edited /etc/ssh/sshd_config:
# start:rate:full see sshd(1) for more information.
# The default is 10 unauthenticated clients.
#MaxStartups 10:30:60
# cxh: Updated to 20 to avoid
# "ssh_exchange_identification: Connection closed by remote host" messages
MaxStartups 20:30:60
# Default is 600 seconds. 0 means no time limit.
#LoginGraceTime 600
# cxh: changed to 60 seconds to avoid lock out
LoginGraceTime 60
# Maximum number of retries for authentication
# Default is 6. Default (if unset) for MaxAuthTriesLog is MaxAuthTries / 2
#MaxAuthTries 5
# cxh: changed to three tries
MaxAuthTries 3
MaxAuthTriesLog 0
20. Svnsync
We use svnsync on source to get a copy of the Kepler tree. The svnsync Unix user has a script called /export/home2/svn/synckepler
/usr/local/etc/rotate_log -L /export/home2/svn -n 20 svnsync.out
/usr/local/bin/svnsync sync file:///export/home2/svn/kepler 2>&1 > svnsync.out
The script is run from a cron job every 10 minutes.
20.1 svnsync: Couldn't get lock on destination repos after 10 attempts
If svnsync fails with svnsync: Couldn't get lock on destination repos after 10 attempts, then run
/usr/local/bin/svn propdel svn:sync-lock --revprop -r 0 file:///export/home2/svn/kepler
See http://malsserver.blogspot.com/2008/12/failed-to-get-lock-on-destination-repos.html
21. Get repository folder children operation failed
After upgrading the svn server to 1.7.2 on source, Eclipse Indigo SR1 (M20110909-1335) with "SVNKit 1.3.5 Implementation (Optional) 2.2.2.I20110819-1700 org.polarion.eclipse.team.svn.connector.svnkit16.feature.group Polarion Software" was failing when the URL was svn+ssh://source.eecs.berkeley.edu/chess/ptII.
The problem is that clicking on trunk results in <An error occurred whil accessing the repository entry >. The stack trace is
at org.polarion.team.svn.connector.svnkit.SVNKitConnector.handleClientException(SVNKitConnector.java:1415)
at org.polarion.team.svn.connector.svnkit.SVNKitConnector.list(SVNKitConnector.java:1264)
at org.eclipse.team.svn.core.extension.factory.ThreadNameModifier.list(ThreadNameModifier.java:278)
at org.eclipse.team.svn.core.utility.SVNUtility.list(SVNUtility.java:335)
at org.eclipse.team.svn.core.svnstorage.SVNRepositoryContainer.getChildren(SVNRepositoryContainer.java:79)
at org.eclipse.team.svn.core.operation.remote.GetRemoteFolderChildrenOperation.runImpl(GetRemoteFolderChildrenOperation.java:75)
at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
at org.eclipse.team.svn.core.operation.CompositeOperation.runImpl(CompositeOperation.java:95)
at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
at org.eclipse.team.svn.ui.utility.DefaultCancellableOperationWrapper.run(DefaultCancellableOperationWrapper.java:55)
at org.eclipse.team.svn.ui.utility.ScheduledOperationWrapper.run(ScheduledOperationWrapper.java:37)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: org.tigris.subversion.javahl.ClientException: svn: URL 'svn+ssh://source.eecs.berkeley.edu/chess/ptII/trunk' non-existent in that revision
at org.tigris.subversion.javahl.JavaHLObjectFactory.throwException(JavaHLObjectFactory.java:779)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.throwException(SVNClientImpl.java:1924)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.list(SVNClientImpl.java:365)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.list(SVNClientImpl.java:337)
at org.polarion.team.svn.connector.svnkit.SVNKitConnector.list(SVNKitConnector.java:1253)
... 14 more
Caused by: org.tmatesoft.svn.core.SVNException: svn: URL 'svn+ssh://source.eecs.berkeley.edu/chess/ptII/trunk' non-existent in that revision
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
at org.tmatesoft.svn.core.wc.SVNLogClient.doList(SVNLogClient.java:1334)
at org.tmatesoft.svn.core.wc.SVNLogClient.doList(SVNLogClient.java:1217)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.list(SVNClientImpl.java:350)
... 16 more
22. svnserve Processes
It turns out that there were lots of svnserve processes on source.eecs.berkeley.edu. Details may be found at http://svn.haxx.se/tsvnusers/archive-2007-09/0056.shtml and http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2407949
My solution was to write a script that killed those processes. However, this script was not super-reliable as it was still possible to run out of swap between times the script ran.
# If there are more than 100 svnserve processes, then kill them.
#
process=svnserve
max=100
mailto=root
# For testing
#process=http
#max=2
#mailto=cxh
processes=`/usr/ucb/ps -auxgww | grep $process | wc -l`
if [ "$processes" -gt $max ]; then
maillog=/tmp/killsvnserv.$$
count=$processes
echo "Starting with $count $process $processes" > $maillog
netstat >> $maillog
while [ "$count" -gt $max ];
do
pkill -o svnserve >> $maillog
#echo $count >> $maillog
count=`expr $count - 1`
done
/etc/rc2.d/S98svnserve start >> $maillog
/usr/ucb/ps -auxgwww | grep $process >> $maillog
/usr/ucb/Mail -s "Source.eecs had $processes $process processes" $mailto < $maillog
fi
Unfortunately, this script is not super-reliable in that snv: connections will sometimes start to fail because rerunning S98svnserve fails.
The cause was Kepler users with IntelliJ were setting up svn in such a way that IntelliJ made many connections to the server.
Sean Riddle writes:
Sean also pointed out that http://youtrack.jetbrains.net/issue/IDEA-56714 describes the issue.
23. svn: This client is too old to work with working copy '.'; please get a newer Subversion client
If you use Subversion with Eclipse and install a Subversion plugin that is newer than the command line svn command, then when you run svn, you will get svn: This client is too old to work with working copy '.'; please get a newer Subversion client. The solution is to update the version of svn on your machine.
Subversion downloads may be found at http://subversion.tigris.org/project_packages.html
23.1 Mac svn details
I have an updated version of svn installed at /opt/subversion/bin/svn.
My ~/.MacOSX/environment.plist file includes that version in the path with:
"DYLD_LIBRARY_PATH" = "/Users/cxh/ptII/vendors/misc/dbxml-2.5.16/install/lib";
"PATH" = "/Users/cxh/ptII/vendors/misc/dbxml-2.5.16/install/bin:/Users/cxh/bin:/Users/cxh/ptII/bin:/usr/local/apache-maven/bin:/opt/subversion/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/texbin:/usr/local/texlive/2007/bin";
}
You can edit environment.plist with either a text editor or with
/Developer/Application/Utilities/Property List Editor.app
23.2 Eclipse: svn: Compression of svndiff data failed
Eclipse was failing with: (:source:) Checkout operation for 'svn+ssh://source.eecs.berkeley.edu/chess/ptII/trunk' failed. svn: Compression of svndiff data failed (:source:)
It could be that SVNkit needs to be updated.
- Go to the SVN Eclipse instructions at: http://www.eclipse.org/subversive/downloads.php
- Get the Polarion update URL from http://www.polarion.com/products/svn/subversive/download.php?utm_source=eclipse.org&utm_medium=link&utm_campaign=subversive As of 9/10, for Helios, it was: http://community.polarion.com/projects/subversive/download/eclipse/2.0/helios-site/ Other versions of Eclipse should use the appropriate update site
- In Eclipse, do Help | Update Software and then
Addthe http://community.polarion.com/projects/subversive/download/eclipse/2.0/helios-site/ URL - Select the SVNkit appropriate for your version of Java. To check your version of Java, run
svn --version. See http://www.polarion.com/products/svn/subversive/connector_discovery.php?utm_source=eclipse.org&utm_medium=link&utm_campaign=subversive for details. - Complete the installation.
24. TortoiseSVN
Summary: Windows 7 users have problems with Tortoise SVN, try http://cvsgui.sourceforge.net/ WinCVS instead.
Details: In Windows 7, Microsoft changed how some registry entries are handled. TortoiseSVN was using these entries so that in the Windows Explorer file browser, users could right click on a file or directory and perform SVN operations. Apparently, there are a limited number of images that can be used. See http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not-showing-up-under-windows-7