You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Bo Berglund <bo...@gmail.com> on 2017/11/13 17:16:34 UTC

Moving CVS to SVN - multiple repositories with different permissions

Planning to move from CVS to SVN, but I am not sure how to handle the
transfer....
1) We have used CVSNT since 2001, but we have not used any specific
CVSNT additions that I know of. THe CVSNT version is 2.5.03.2382

2) The server handles 6 different repositories organized as
subdirectories below E:\CVSREPOS

3) The permissions are different for these repositories and are
handled through Windows file system access permissions via AD groups

4) Some projects (especially in the PC repository) are defined in the
CVSROOT/modules file as a combination of files/folders from different
physical trees.

5) The repositories total 32787 files with a combined size of 7.9 GB.


Now I wonder how I should go about migrating to SVN? What I have read
indicates that the cvs2svn script does not use the information within
the CVSROOT admin directory of each repository, so I guess I have to
re-create something similar in SVN after the files have been
converted?

Does SVN have a concept like the modules file such that one can create
virtual modules for checkout where some files/folders are shared
between projects (common code)?

Can I use Windows Server 2016 as the server for the SVN repository(s)?


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 6 Dec 2017 21:12:25 +0000, Andreas Tscharner
<An...@wenzel-metromec.ch> wrote:

>Hello Bo,
>
>I have tried to create a package of cvsnt, but I get too many errors and I am not used how to create Debian packages these days.
>What I have: I have a Debian package of cvsnt version 2.5.04.3236 and version 2.5.03.2382. These are old packages so they probably don't work any more, but you could try installing them on your Ubuntu. Is there some place where I could put them? Or should I mail them (1.3MiB)
>
>Best regards - Andreas
>P.S. An entry in /etc/apt/sources.list.d/ would only work if the packages were in some repository

Replied to Andreas in private since it is really off topic here
discussing how to build cvsnt on Ubuntu16, even though the purpose is
to use it to convert the CVSNT repository to svn...


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Andreas Tscharner <An...@wenzel-metromec.ch>.
Hello Bo,

I have tried to create a package of cvsnt, but I get too many errors and I am not used how to create Debian packages these days.
What I have: I have a Debian package of cvsnt version 2.5.04.3236 and version 2.5.03.2382. These are old packages so they probably don't work any more, but you could try installing them on your Ubuntu. Is there some place where I could put them? Or should I mail them (1.3MiB)

Best regards - Andreas
P.S. An entry in /etc/apt/sources.list.d/ would only work if the packages were in some repository
________________________________________
Von: Bo Berglund [bo.berglund@gmail.com]
Gesendet: Mittwoch, 6. Dezember 2017 21:03
An: users@subversion.apache.org
Betreff: Re: Moving CVS to SVN - multiple repositories with different permissions

On Wed, 6 Dec 2017 14:40:20 +0000, Andreas Tscharner
<An...@wenzel-metromec.ch> wrote:

>I maintained cvsnt for Debian for a while, but when they started with
>EVS and shut down the public source access, I stopped.

Then you might know which item(s) in the /etc/apt/sources.list I
should change in order to get hold of the cvsnt version for
installation on Ubuntu Server 16.04.3?

I tried to just copy the executable cvsnt from Ubuntu10 to Ubuntu16,
but it won't run. I have no idea why except if there is some hidden
lock somewhere in U16 to prohibit running such code....
So I guess a proper install would solve the problem but then I need
the package for example via apt-get from an old-releases source...

I did not have ssh installed in my old Ubuntu10 and it would not
install until I changed all URL:s in the list file to point to
old-releases, but then I got ssh installed so I could use PuTTY
instead of the VMWare console.
Maybe it works to get old stuff into new servers as well?
It is just a temporary fix while converting to Subversion.


--
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 6 Dec 2017 14:40:20 +0000, Andreas Tscharner
<An...@wenzel-metromec.ch> wrote:

>I maintained cvsnt for Debian for a while, but when they started with 
>EVS and shut down the public source access, I stopped.

Then you might know which item(s) in the /etc/apt/sources.list I
should change in order to get hold of the cvsnt version for
installation on Ubuntu Server 16.04.3?

I tried to just copy the executable cvsnt from Ubuntu10 to Ubuntu16,
but it won't run. I have no idea why except if there is some hidden
lock somewhere in U16 to prohibit running such code....
So I guess a proper install would solve the problem but then I need
the package for example via apt-get from an old-releases source...

I did not have ssh installed in my old Ubuntu10 and it would not
install until I changed all URL:s in the list file to point to
old-releases, but then I got ssh installed so I could use PuTTY
instead of the VMWare console.
Maybe it works to get old stuff into new servers as well?
It is just a temporary fix while converting to Subversion.


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Thu, 7 Dec 2017 23:05:23 +0100, Branko ?ibej <br...@apache.org>
wrote:

>I really, really recommend you try do do the conversion on the VM you
>found. If it's using an IPv6 network address, well then, change the
>address. It's not rocket science.
>
Right you are,
this is what I ended up with after trying to build cvsnt from sources
on both Ubuntu 16.04.3 and an RPi3 with Raspbian Jessie. Both failed
in the make step, I was able to get some stuff cleared away but
finally gave up.

The Ubuntu10 box lacked SSH so I could not connect with PuTTY and
sftp, but I managed to install SSH in a roundabout way and the sftp
also started working.
So now I am using this old Ubuntu10 box for my conversions.

See my new thread about the cvs2svn symbol conversion errors.

-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Branko Čibej <br...@apache.org>.
On 06.12.2017 18:17, Bo Berglund wrote:
> On Wed, 06 Dec 2017 15:49:40 +0100, Bo Berglund
> <bo...@gmail.com> wrote:
>
>> Is there some way to move an installed package from an Ubuntu machine
>> to another more recent machine?
>> Then I could get cvs(nt) on Linux operational on my new Ubuntu 16.04.3
>> machine.
>> This would make the conversion using cvs2svn possible with an
>> executable that understands the cvsnt stuff.
> I tried the following:
> 1) Located the cvs program on the UBUNTU10 machine, it turned out to
> be symlinked to:
>   /usr/bin/cvsnt
> 2) I tar:ed the cvsnt file and sent it by ftp to my website
> 3) On the new server I used ftp to get the tar file back
> 4) Then I untared it to my home dir
> 5) Finally I tried to check if it would run:
> ~$ ls -l
> total 1352
> -rwxr-xr-x 1 bosse bosse 943676 Jan 17  2010 cvsnt
> -rw-rw-r-- 1 bosse bosse 431550 Dec  6 07:45 cvsnt.tar.gz
> ~$ ./cvsnt
> -bash: ./cvsnt: No such file or directory
> ~$ cvsnt
> cvsnt: command not found

It probably needs a bunch of shared libraries that it doesn't find on
your machine:

Try:

$ ldd ./cvsnt

and see what's missing. Even if you install the missing libraries,
there's a good chance nothing will work as expected, since ABI
compatibility is probably not guaranteed.

I really, really recommend you try do do the conversion on the VM you
found. If it's using an IPv6 network address, well then, change the
address. It's not rocket science.

-- Brane


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 06 Dec 2017 15:49:40 +0100, Bo Berglund
<bo...@gmail.com> wrote:

>Is there some way to move an installed package from an Ubuntu machine
>to another more recent machine?
>Then I could get cvs(nt) on Linux operational on my new Ubuntu 16.04.3
>machine.
>This would make the conversion using cvs2svn possible with an
>executable that understands the cvsnt stuff.

I tried the following:
1) Located the cvs program on the UBUNTU10 machine, it turned out to
be symlinked to:
  /usr/bin/cvsnt
2) I tar:ed the cvsnt file and sent it by ftp to my website
3) On the new server I used ftp to get the tar file back
4) Then I untared it to my home dir
5) Finally I tried to check if it would run:
~$ ls -l
total 1352
-rwxr-xr-x 1 bosse bosse 943676 Jan 17  2010 cvsnt
-rw-rw-r-- 1 bosse bosse 431550 Dec  6 07:45 cvsnt.tar.gz
~$ ./cvsnt
-bash: ./cvsnt: No such file or directory
~$ cvsnt
cvsnt: command not found

This seems to me to be some kind of Linux command problem. I am used
to the Debian derivative Raspbian and there one could definitively use
these calls to run a program which was set to be executable.

What am I missing here?
Why does it say that there is no such file?
Is Ubuntu Server 16.04.3 LTE so much different?

-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 06 Dec 2017 15:02:18 +0100, Bo Berglund
<bo...@gmail.com> wrote:

>I know that some years back I was able to "apt-get install cvs" on a
>Linux box (could have been on a RaspberryPi or else a VMWare virtual
>machine running Mint or the like.
>And that cvs would be the backported cvsnt version!
>
...
>
>But it seems like it is not possible anymore to get the cvs from the
>cvsnt project into a Linux box...
>

I managed to find an old virtual machine (VMWare) with Ubuntu10 from
2010, which I fired up.
On this machine cvs *was* installed and cvs --version reports:

Concurrent Versions System (CVSNT) 2.5.04 (Zen) Build 3236 ()
(client/server)
CVSNT 2.5.04 (Jan 18 2010) Copyright (c) 2008 March Hare Software Ltd.
see http://www.march-hare.com/cvspro


Python on this machine is version 2.6.5.

Is there some way to move an installed package from an Ubuntu machine
to another more recent machine?
Then I could get cvs(nt) on Linux operational on my new Ubuntu 16.04.3
machine.
This would make the conversion using cvs2svn possible with an
executable that understands the cvsnt stuff.

Or else I could possibly use the old Ubuntu10 machine....

OOPS!
This machine seems to use an IPv6 address rather than IPv4, which is
used on everything else on my LAN..

Sigh.


-- 
Bo Berglund
Developer in Sweden


RE: Moving CVS to SVN - multiple repositories with different permissions

Posted by Andreas Tscharner <An...@wenzel-metromec.ch>.
> From: Bo Berglund [mailto:bo.berglund@gmail.com]

[snip]
> I know that some years back I was able to "apt-get install cvs" on a
> Linux box (could have been on a RaspberryPi or else a VMWare virtual
> machine running Mint or the like.
> And that cvs would be the backported cvsnt version!

I maintained cvsnt for Debian for a while, but when they started with EVS and shut down the public source access, I stopped.
> 
> Since we are using a cvs.exe binary from 2006 on our server I realized
> that it would be great to be able to get that onto my new Ubuntu
> Server and have it parse the repository (CVSNT always kept the format
> line-ending-wise anyway, so the repository files are compatible.
> 
> But it seems like it is not possible anymore to get the cvs from the
> cvsnt project into a Linux box...
> 
> Or is there some way to do it?

I may have some old sources somewhere (at my box at home), but I don't know whether they compile or (if they do) run at all... on the other hand: it was plain C code...
I'll look it up tonight when I get home.
> 
> I belive we have used some cvsnt specific constructs, like setting
> -kbx on some binary files requiring exclusive editing etc.

Don't forget the mergepoints which were set automatically...

Best regards
	Andreas
-- 
Andreas Tscharner               andreas.tscharner@wenzel-metromec.ch
--------------------------------------------------------------------
Gordon's Law:
If you think you have the solution, the question was poorly phrased. 


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 6 Dec 2017 13:26:53 +0000, Andreas Tscharner
<An...@wenzel-metromec.ch> wrote:

>I remember when we (I) had to do the same migration:
>I used a Linux laptop and the Linux cvsnt binary and did all on a Linux box, because Python was a PITA on Windows back then.
>
I know that some years back I was able to "apt-get install cvs" on a
Linux box (could have been on a RaspberryPi or else a VMWare virtual
machine running Mint or the like.
And that cvs would be the backported cvsnt version!

Since we are using a cvs.exe binary from 2006 on our server I realized
that it would be great to be able to get that onto my new Ubuntu
Server and have it parse the repository (CVSNT always kept the format
line-ending-wise anyway, so the repository files are compatible.

But it seems like it is not possible anymore to get the cvs from the
cvsnt project into a Linux box...

Or is there some way to do it?

I belive we have used some cvsnt specific constructs, like setting
-kbx on some binary files requiring exclusive editing etc.

-- 
Bo Berglund
Developer in Sweden


RE: Moving CVS to SVN - multiple repositories with different permissions

Posted by Andreas Tscharner <An...@wenzel-metromec.ch>.
[snip]
> >>I thought I could do that on my Windows 7 X64 PC by using a copy of
> >>the actual repository files and using cvs2svn as the tool.
> >>I already have ActiveState Python 2.7.1 installed.
> 
> Stop *right there*. I'm afraid you're going to hurt yourself.
> 
> I very strongly encourage you not to install cvs and subversion and
> Python as a set of separate components and pray that they work well
> together. Instead, install CygWin, select cvs2svn and cvs and
> subversion as installed components, and avoid potential conflicts
> between tools that are not necessarily tested in concert with each
> other. If you need to use the CVSNT version of cvs.exe, so be it. But
> avoid adding possible version confusion with Subversion and Python and
> cvs2svn.

I remember when we (I) had to do the same migration:
I used a Linux laptop and the Linux cvsnt binary and did all on a Linux box, because Python was a PITA on Windows back then.

Best regards
	Andreas
-- 
Andreas Tscharner               andreas.tscharner@wenzel-metromec.ch
--------------------------------------------------------------------
Gordon's Law:
If you think you have the solution, the question was poorly phrased. 


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Nico Kadel-Garcia <nk...@gmail.com>.
First thing: I'm staring at
http://cvs2svn.stage.tigris.org/cvs2svn.html, and it says right htere:

* CVSNT repositories

* cvs2svn does not support conversion of CVSNT repositories. Some
people have indicated success with such conversions, while others have
had problems. In other words, such conversions, even if apparently
successful, should be checked carefully before use. See the FAQ for
more information.

I admit I'd not been working from CVSNT when I did these. You may wind
up with bigger problems.

Also, the documentation at
http://cvs2svn.stage.tigris.org/cvs2svn.html is *really good* and
covers just what you're asking about layout.

On Wed, Dec 6, 2017 at 4:51 AM, Bo Berglund <bo...@gmail.com> wrote:
> On Wed, 15 Nov 2017 12:21:51 -0500, Bo Berglund
> <bo...@gmail.com> wrote:
>
>>CVS(NT) migration
>>-----------------
>>I thought I could do that on my Windows 7 X64 PC by using a copy of
>>the actual repository files and using cvs2svn as the tool.
>>I already have ActiveState Python 2.7.1 installed.

Stop *right there*. I'm afraid you're going to hurt yourself.

I very strongly encourage you not to install cvs and subversion and
Python as a set of separate components and pray that they work well
together. Instead, install CygWin, select cvs2svn and cvs and
subversion as installed components, and avoid potential conflicts
between tools that are not necessarily tested in concert with each
other. If you need to use the CVSNT version of cvs.exe, so be it. But
avoid adding possible version confusion with Subversion and Python and
cvs2svn.

>>So I would create one dump file per CVS repository and then later
>>import those into the SVN server.
>>
>>Now I have read up a lot on the svn help pages and found that I need
>>to use the config file option for cvs2svn in order to specify all the
>>different modules in the CVS repositories I need to convert.
>>It also seems like in order to include the authors of all the
>>revisions of the files I really need the option file so I can map the
>>CVS users to the svn users. And I also need the --use-cvs option.

Why do you need to convert the users? I mean, you *can*.

>>But unfortunately that brought me to a full stop becuase when I looked
>>inside the config file example it turned out that the command line
>>options I had imagined would be listed really are not there, the
>>config file uses completely different options it looks like (or at
>>least different syntax for the same options)...
>>
>
> I am still looking for a good way to handle this, but now I'm also
> exploring to use an Ubuntu Server 16.04.3LTS box as the final server.
>
> Unfortunately I cannot use cvs2svn on the Ubuntu box since I must use
> the CVSNT cvs.exe file (Windows) as the repository file parser...

Why? CVS is a well defined format. I fail to see why the /usr/bin/cvs
on the Ubuntu box couldn't parse the repository. Can't you bring a
direct, file system copy of the repository over and at least to a test
run? I agree it could require different optoins.

If you're really stuck on that part: can you install CygWin and pla
with the "cvs2svn" available there?

> The total size of the repository is:
> 8447 Mbytes in 32815 files
>
> Some of the files (mostly Windows exe binary files) are huge since
> they contain a lot of revisions. The biggset such is 487 Mbytes.
> All in all there are 136 exe files totalling 2.5 GB in size.
>
> My CVS(NT) system is divided up into several separate CVS repositories
> dealing with separate types of projects which needed separate user
> permissions. So I could in principle run a conversion of each such
> repository individually.

*That* could be a really, really good idea.

> What can I expect in terms of conversion time to the dump files?

Brother, "it depends". When you've got bulky binary files, lots of
them.... I couldn't give you a hard estimate. A couple of days on an
old box?

I'd definitely pick workable lumps of the project and do those one at a time.

> And is there any sample configuration file for cvs2svn that shows the
> proper settings for a case like mine (going from CVSNT on Windows)?
> The config file format really confuses me a lot.
>
>
> --
> Bo Berglund
> Developer in Sweden
>

Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 15 Nov 2017 12:21:51 -0500, Bo Berglund
<bo...@gmail.com> wrote:

>CVS(NT) migration
>-----------------
>I thought I could do that on my Windows 7 X64 PC by using a copy of
>the actual repository files and using cvs2svn as the tool.
>I already have ActiveState Python 2.7.1 installed.
>So I would create one dump file per CVS repository and then later
>import those into the SVN server.
>
>Now I have read up a lot on the svn help pages and found that I need
>to use the config file option for cvs2svn in order to specify all the
>different modules in the CVS repositories I need to convert.
>It also seems like in order to include the authors of all the
>revisions of the files I really need the option file so I can map the
>CVS users to the svn users. And I also need the --use-cvs option.
>
>But unfortunately that brought me to a full stop becuase when I looked
>inside the config file example it turned out that the command line
>options I had imagined would be listed really are not there, the
>config file uses completely different options it looks like (or at
>least different syntax for the same options)...
>

I am still looking for a good way to handle this, but now I'm also
exploring to use an Ubuntu Server 16.04.3LTS box as the final server.

Unfortunately I cannot use cvs2svn on the Ubuntu box since I must use
the CVSNT cvs.exe file (Windows) as the repository file parser...

The total size of the repository is:
8447 Mbytes in 32815 files

Some of the files (mostly Windows exe binary files) are huge since
they contain a lot of revisions. The biggset such is 487 Mbytes.
All in all there are 136 exe files totalling 2.5 GB in size.

My CVS(NT) system is divided up into several separate CVS repositories
dealing with separate types of projects which needed separate user
permissions. So I could in principle run a conversion of each such
repository individually.

What can I expect in terms of conversion time to the dump files?

And is there any sample configuration file for cvs2svn that shows the
proper settings for a case like mine (going from CVSNT on Windows)?
The config file format really confuses me a lot.


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Wed, 15 Nov 2017 08:55:27 -0500, Nico Kadel-Garcia
<nk...@gmail.com> wrote:

>I think you're going to hurt yourself if you try to assemble cvs2svn
>from scratch with individual components, installed separately and
>built into a Windows environment. I *urge* you to save yourself a lot
>of work and use 64-bit CygWin in a Windows environment, which can
>contain up-to-date python, up-to-date command line Subversion tools
>and a server, and a more reliably consistent scripting environment.
>
>
>> Oh! That brings up yet another point:
>> On Windows Server 2016 it seems like Microsoft has included their web
>> server (IIS), but I think that Apache is needed for SVN.
>> How can one deal with that?
>> Or is SVN a server all by itself?
>
>You've a set of options, very well documented in the "Red Book" at
>http://svnbook.red-bean.com/. Apache, or httpd as version 2.x is
>called, with mod_svn, is a common approach and well supported. Apache
>can run alongside IIS, or IIS ignored, as long as they do not run on
>the same network ports. There is also "svnserve", the built-in server,
>though it's not perhaps as flexible as httpd nor built into port 443
>firewalls as commonly HTTPS is commonly supported. And there is also
>"svn+ssh", which allows an SSH daemon with tuned credentials to allow
>"svnserve" local access. I personally find svn+ssh more secure for
>various reasons, especially because the Subversion command line tool
>stores httpd credentials in plain text in a user's home directory, by
>default, but folks on this list have previously expressed their
>irritation at me for bringing that up.

I guess that VisualSVN server installation can deal with that?
It will be a server side issue anyway, not really affecting he CVS
data migration.
I googled svn port and found that it uses 3690, so that would not
interfere with http port 80, I guess.

>I'd encourage you to use the simplest, most integrated tools you can
>find for the server, and spend your development time on activating
>time on reliable backup, and your user education time on getting users
>accustomed to the new workflow.

Well, what I had in mind was this:
Server installation
-------------------
I would use VisualSVN since that seems to be a complete package (not
so many alternatives around for Windows really).
This would be done on the new Windows 2016 server.

CVS(NT) migration
-----------------
I thought I could do that on my Windows 7 X64 PC by using a copy of
the actual repository files and using cvs2svn as the tool.
I already have ActiveState Python 2.7.1 installed.
So I would create one dump file per CVS repository and then later
import those into the SVN server.

Now I have read up a lot on the svn help pages and found that I need
to use the config file option for cvs2svn in order to specify all the
different modules in the CVS repositories I need to convert.
It also seems like in order to include the authors of all the
revisions of the files I really need the option file so I can map the
CVS users to the svn users. And I also need the --use-cvs option.

But unfortunately that brought me to a full stop becuase when I looked
inside the config file example it turned out that the command line
options I had imagined would be listed really are not there, the
config file uses completely different options it looks like (or at
least different syntax for the same options)...



-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Nico Kadel-Garcia <nk...@gmail.com>.
On Tue, Nov 14, 2017 at 10:07 AM, Bo Berglund <bo...@gmail.com> wrote:
> Thanks!
>
> Next issue is about Python:
> I have used Python in conjunction with WinCVS before (never programmed
> Python myself) and I did so by installing from the ActiveState Python
> distribution.
> Now I see that ActiveState only offers the x64 version of the
> installer, whereas python.org has both.
>
> Can cvs2svn use either one (32 or 64 bit)?
> And is any of them to be preferred (ActiveState or Python.org, 32 or
> 64 bit)?
>
> Furthermore the cvs2svn docs say:
> Requirements:
> ....
> - Python 2, version 2.4 or later. See http://www.python.org/. (cvs2svn
> does not work with Python 3.x.)
> - A compatible database library, usually gdbm, and the corresponding
> Python bindings. Neither dumbdbm nor standard dbm is sufficient.
>
> Is there any way to find out if the needed database library is
> included or not? And if not how does one go about getting it?

I think you're going to hurt yourself if you try to assemble cvs2svn
from scratch with individual components, installed separately and
built into a Windows environment. I *urge* you to save yourself a lot
of work and use 64-bit CygWin in a Windows environment, which can
contain up-to-date python, up-to-date command line Subversion tools
and a server, and a more reliably consistent scripting environment.

> I have to install all tools on a "clean" Windows 2016 server x64
> machine for the conversion.

See above.

> Oh! That brings up yet another point:
> On Windows Server 2016 it seems like Microsoft has included their web
> server (IIS), but I think that Apache is needed for SVN.
> How can one deal with that?
> Or is SVN a server all by itself?

You've a set of options, very well documented in the "Red Book" at
http://svnbook.red-bean.com/. Apache, or httpd as version 2.x is
called, with mod_svn, is a common approach and well supported. Apache
can run alongside IIS, or IIS ignored, as long as they do not run on
the same network ports. There is also "svnserve", the built-in server,
though it's not perhaps as flexible as httpd nor built into port 443
firewalls as commonly HTTPS is commonly supported. And there is also
"svn+ssh", which allows an SSH daemon with tuned credentials to allow
"svnserve" local access. I personally find svn+ssh more secure for
various reasons, especially because the Subversion command line tool
stores httpd credentials in plain text in a user's home directory, by
default, but folks on this list have previously expressed their
irritation at me for bringing that up.

I'd encourage you to use the simplest, most integrated tools you can
find for the server, and spend your development time on activating
time on reliable backup, and your user education time on getting users
accustomed to the new workflow.

Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
Thanks!

Next issue is about Python:
I have used Python in conjunction with WinCVS before (never programmed
Python myself) and I did so by installing from the ActiveState Python
distribution.
Now I see that ActiveState only offers the x64 version of the
installer, whereas python.org has both.

Can cvs2svn use either one (32 or 64 bit)?
And is any of them to be preferred (ActiveState or Python.org, 32 or
64 bit)?

Furthermore the cvs2svn docs say:
Requirements:
....
- Python 2, version 2.4 or later. See http://www.python.org/. (cvs2svn
does not work with Python 3.x.)
- A compatible database library, usually gdbm, and the corresponding
Python bindings. Neither dumbdbm nor standard dbm is sufficient.

Is there any way to find out if the needed database library is
included or not? And if not how does one go about getting it?

I have to install all tools on a "clean" Windows 2016 server x64
machine for the conversion.

Oh! That brings up yet another point:
On Windows Server 2016 it seems like Microsoft has included their web
server (IIS), but I think that Apache is needed for SVN.
How can one deal with that?
Or is SVN a server all by itself?


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Stefan Sperling <st...@elego.de>.
On Tue, Nov 14, 2017 at 08:16:21AM -0500, Bo Berglund wrote:
> On Mon, 13 Nov 2017 18:54:51 -0500, Bo Berglund
> <bo...@gmail.com> wrote:
> 
> >But now I have to deal with 6 different CVSROOT directories too...
> >Is cvs2svn using the CVSROOT directory during conversion or can they
> >be removed from the source so as not confusing the operation?
> >Or do I need to use the cvsnt cvs.exe during conversion and does that
> >in such a case need these admin files in CVSROOT?
> 
> I found a post on the net stating that CVSROOT directory *is*
> necessary but that cvs2svn does not use any info therein during
> conversion.
> See:
> http://tigris-scm.10930.n7.nabble.com/Is-CVSROOT-dir-mandatory-when-using-cvs2svn-td57397.html
> 
> However, I believe that I need to use the flag --use-cvs in order to
> parse the CVSNT repository properly and this might mean that cvs
> itself will use CVSROOT for something.
> And then I have the problem of stuffing projects from the 6 different
> repositories into SVN: Which CVSROOT should be used during conversion?
> Or can all of them be there at the same time?

In this case, an initial cvs2svn conversion which creates 6 distinct
SVN repositories might be easier.

Note that you could later on merge these repositories with SVN tooling:
http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

> CVSNT specific stuff:
> ---------------------
> I realized that I have used one CVSNT specific item and this is the
> keyword -kbx, which means that some binary files have been marked as
> binary with the exclusive editing flag. Typically this involves
> Microsoft Office documents and PDF:s, which we did not want any two
> persons simultaneously editing since they could not be merged.

The SVN feature corresponding to this is the svn:needs-lock property.
See http://svnbook.red-bean.com/nightly/en/svn.advanced.locking.html
 
> Can cvs2svn deal with the -kbx keyword, for example by treating it as
> -kb?
> Or will these files be in any way corrupted by the conversion?

Subversion does not need any special options for binaries.
Keywords in files have to be explicitly configured on a per-file basis:
http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.keywords.html
File content is never modified by default -- what goes in comes back out.
So I expect this problem will turn out to be irrelevant.

Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Mon, 13 Nov 2017 18:54:51 -0500, Bo Berglund
<bo...@gmail.com> wrote:

>But now I have to deal with 6 different CVSROOT directories too...
>Is cvs2svn using the CVSROOT directory during conversion or can they
>be removed from the source so as not confusing the operation?
>Or do I need to use the cvsnt cvs.exe during conversion and does that
>in such a case need these admin files in CVSROOT?

I found a post on the net stating that CVSROOT directory *is*
necessary but that cvs2svn does not use any info therein during
conversion.
See:
http://tigris-scm.10930.n7.nabble.com/Is-CVSROOT-dir-mandatory-when-using-cvs2svn-td57397.html

However, I believe that I need to use the flag --use-cvs in order to
parse the CVSNT repository properly and this might mean that cvs
itself will use CVSROOT for something.
And then I have the problem of stuffing projects from the 6 different
repositories into SVN: Which CVSROOT should be used during conversion?
Or can all of them be there at the same time?

CVSNT specific stuff:
---------------------
I realized that I have used one CVSNT specific item and this is the
keyword -kbx, which means that some binary files have been marked as
binary with the exclusive editing flag. Typically this involves
Microsoft Office documents and PDF:s, which we did not want any two
persons simultaneously editing since they could not be merged.

Can cvs2svn deal with the -kbx keyword, for example by treating it as
-kb?
Or will these files be in any way corrupted by the conversion?


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Mon, 13 Nov 2017 23:10:45 +0100, Stefan Sperling <st...@elego.de>
wrote:
>If your 6 projects could ever be expected to merge code from one another,
>it makes sense to put them all in a single SVN repository because merge
>tracking occurs on a per-repository basis (because SVN is not a distributed
>version control system). Also, if you wish to use 'file externals' between
>projects, they will have to be in the same repository (this is an unfortunate
>implementation quirk).
>

OK, I will probably just make one SVN repository and make the current
repositories top level directories in that repo.
Then I can make the path-dependent permissions as described earlier.

But now I have to deal with 6 different CVSROOT directories too...
Is cvs2svn using the CVSROOT directory during conversion or can they
be removed from the source so as not confusing the operation?
Or do I need to use the cvsnt cvs.exe during conversion and does that
in such a case need these admin files in CVSROOT?

I will make a copy of the active repo for use during conversion of
course so I can take out the CVSROOT directories if they are not used.


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Stefan Sperling <st...@elego.de>.
On Mon, Nov 13, 2017 at 02:11:08PM -0500, Bo Berglund wrote:
> On Mon, 13 Nov 2017 19:03:07 +0100, Stefan Sperling <st...@elego.de>
> wrote:
> 
> >
> >Subversion stores access permissions in a special configuration file
> >on the server, so you'll have to re-create users, groups, and their
> >access rights in the SVN server's configuration:
> >http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html
> >
> 
> Thanks I will look into that more closely.
> One question, though, that might be a terminology misunderstanding on
> my part:
> In CVS a repository is the container for a lot of different "modules",
> which are top level directories below the root of the repository (or
> else defined in CVSROOT/modules).
> 
> When reading your link above I found I became hesitant as to what SVN
> means by "repository", it does not look like it is a 1-1 compared to
> CVS...
> 
> I have as I said 6 CVS repositories served by CVSNT in order to
> isolate files that are to be kept separate. For example the hardware
> designers use repo HW for their firmware developments, Windows
> application developers use repository PC and marketing uses Marketing
> for their documents etc.
> So in essence I have 6 different repositories in CVS language.
> How does this map into SVN?
> The SVN path-based authorization seems to be dealing with repositories
> (modules?) within the repository (singular), all below the SVN root...
> 
> Did I misunderstand the way SVN works?

SVN is more flexible than CVS in this regard. Because directories, rather
than just files, are versioned, subdirectories of a repository can act as
a home for an entire project and thus become a 'module' in CVS terms.
See for instance the Apache Software Foundation's SVN repository, where
each top-level directory corresponds to an apache.org project:
https://svn.apache.org/viewvc

Such a designation of a 'project directory' or 'module' is simply a
convention put in place by users. SVN by itself won't treat any directories
special in any way (this goes further; for instance, project branches and
tags are also modeled as directories).

So you could migrate all 6 CVS repositories into one SVN repository with
one top-level directory per project, or you could create 6 distinct SVN
repositories. cvs2svn supports either approach.
See http://cvs2svn.tigris.org/faq.html#oneatatime

If your 6 projects could ever be expected to merge code from one another,
it makes sense to put them all in a single SVN repository because merge
tracking occurs on a per-repository basis (because SVN is not a distributed
version control system). Also, if you wish to use 'file externals' between
projects, they will have to be in the same repository (this is an unfortunate
implementation quirk).

On the other hand, there is an administrative concern which does not concern
end users: Backup and restore should occur on a per-repository basis.
So if you split projects across repositories there will be less overall
impact in case one of them has to be restored from backup for some unfortunate
reason (such events are very rare, but should not be ruled out in a risk
assessment). But if your CVS repositories aren't very large yet, then this
should not be a concern.

Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Bo Berglund <bo...@gmail.com>.
On Mon, 13 Nov 2017 19:03:07 +0100, Stefan Sperling <st...@elego.de>
wrote:

>
>Subversion stores access permissions in a special configuration file
>on the server, so you'll have to re-create users, groups, and their
>access rights in the SVN server's configuration:
>http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html
>

Thanks I will look into that more closely.
One question, though, that might be a terminology misunderstanding on
my part:
In CVS a repository is the container for a lot of different "modules",
which are top level directories below the root of the repository (or
else defined in CVSROOT/modules).

When reading your link above I found I became hesitant as to what SVN
means by "repository", it does not look like it is a 1-1 compared to
CVS...

I have as I said 6 CVS repositories served by CVSNT in order to
isolate files that are to be kept separate. For example the hardware
designers use repo HW for their firmware developments, Windows
application developers use repository PC and marketing uses Marketing
for their documents etc.
So in essence I have 6 different repositories in CVS language.
How does this map into SVN?
The SVN path-based authorization seems to be dealing with repositories
(modules?) within the repository (singular), all below the SVN root...

Did I misunderstand the way SVN works?


-- 
Bo Berglund
Developer in Sweden


Re: Moving CVS to SVN - multiple repositories with different permissions

Posted by Stefan Sperling <st...@elego.de>.
On Mon, Nov 13, 2017 at 12:16:34PM -0500, Bo Berglund wrote:
> Planning to move from CVS to SVN, but I am not sure how to handle the
> transfer....
> 1) We have used CVSNT since 2001, but we have not used any specific
> CVSNT additions that I know of. THe CVSNT version is 2.5.03.2382
> 
> 2) The server handles 6 different repositories organized as
> subdirectories below E:\CVSREPOS
> 
> 3) The permissions are different for these repositories and are
> handled through Windows file system access permissions via AD groups
> 
> 4) Some projects (especially in the PC repository) are defined in the
> CVSROOT/modules file as a combination of files/folders from different
> physical trees.
> 
> 5) The repositories total 32787 files with a combined size of 7.9 GB.
> 
> 
> Now I wonder how I should go about migrating to SVN? What I have read
> indicates that the cvs2svn script does not use the information within
> the CVSROOT admin directory of each repository, so I guess I have to
> re-create something similar in SVN after the files have been
> converted?

cvs2svn worked fine for me during a CVSNT->SVN migration some years ago.

Subversion stores access permissions in a special configuration file
on the server, so you'll have to re-create users, groups, and their
access rights in the SVN server's configuration:
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html

Generally, I would recommend scripting the entire data migration process such
that it is repeatable. Then you can iterate the conversion process and allow
users to test the new system well before it goes live. Keep iterating until
you get a result that is acceptable for production use, then switch.

> Does SVN have a concept like the modules file such that one can create
> virtual modules for checkout where some files/folders are shared
> between projects (common code)?

You could use externals for this purpose:
http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html

These can be configured post-migration in SVN, and/or inside SVN as a
post-processing step during scripted data migration. Externals basically
configure a 'repository URL' to 'local directory' mapping which the
SVN client follows when it performs a 'checkout' or 'update'.

As noted in the SVN book chapter I linked above, externals should
always use 'relative' URLs rather than absolute URLs, where possible.
Relative URLs are resilient to potential future changes of most URL
components, such as the SVN server's hostname.

I would discourage use of externals to handle complicated dependency chains.
Externals are good enough if the dependency relationships are of a simple
variety. But if you find yourself using more than a handful of externals,
you're probably better off using a dependency management tool that works
above the version control system (e.g. in the build system).

> Can I use Windows Server 2016 as the server for the SVN repository(s)?

Yes. See http://subversion.apache.org/packages.html#windows for a
couple of options.