Use symbolic links for cvs root to simplify server consolidation

cvssymlink

We're consolidating two old cvs servers onto one new box.

I had hoped the following:
changing the dns entries for oldserver1 and oldserver2 (as well as some user account maintenance) would make the move transparent to cvs users.

Problem:
I'm having problems due to the different cvs roots on each old server.

Background
The old servers had the following cvs repository directories:

  • old server1 cvs root: /cvshome
  • old server2 cvs root: /usr/local/cvs

On the distribution we're using the default repository directory is /var/cvs. I opted to stick with this, i.e:

  • new server cvs root: /var/cvs

Goal
I'd like minimal disruption on existing checked-out-projects, i.e. not having to find/replace all 'Root' files on each hard drive in the company.

To clarify, CVSROOT and CVS/Root entries for old server1 look like this:

pserver:username@oldserver1:/cvshome

Attempts
I tried this:
create a symbolic link on new server

/cvshome points to /var/cvs
ln -s /var/cvs /cvshome

However, when I try an update (i.e. from a workstation that pointed to old server 1), I get this error:

/cvshome : no such repository

Summary
Can I use links to 'alias' a cvs repository?

OR do I need to 'bite the bullet' and change all 'Root' files on all hard drives?

thanks,
bill

Best Answer

On Linux, when you give a command the path to a symlink which points to a directory, it makes a difference whether you append a slash or not:

$ ls -l /cvsroot

would list the inode of the symlink, while

$ ls -l /cvsroot/

would list the contents of the directory the symlink points to. This behaviour is different from the one you would see if cvsroot was an actual directory.

I'm not sure whether that's your problem, but try appending a slash. If it helps, you should be able to do checkouts, updates etc. of everything below the repository root.

Related Topic