vcs:cvs2svnconversion
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
vcs:cvs2svnconversion [2008/10/19 23:15] – meta stuff and reorg comments gwynne | vcs:cvs2svnconversion [2019/08/26 16:54] (current) – gwynne | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Complete ====== | ||
+ | |||
+ | The SVN migration was completed in July 2009. This document has been retained for historical purposes. | ||
+ | |||
+ | |||
====== CVS to SVN Migration Path ====== | ====== CVS to SVN Migration Path ====== | ||
Line 32: | Line 37: | ||
I have the CVS repository stored in a directory called " | I have the CVS repository stored in a directory called " | ||
<code bash> | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | + | ./cvs2svn --svnrepos=./ |
+ | --dry-run --no-cross-branch-commits | ||
+ | --username=svnconvert | ||
+ | --cvs-revnums --use-cvs | ||
+ | --tempdir=/ | ||
</ | </ | ||
Line 99: | Line 108: | ||
</ | </ | ||
- | ===== Pass 4 ===== | + | ===== Passes |
Pass 4 worked on the first try: | Pass 4 worked on the first try: | ||
+ | |||
+ | Pass 5 was also a clean sweep: | ||
+ | |||
+ | Pass 6 was just a beautiful thing, went by without a hitch. Not that I expected any of these " | ||
+ | |||
+ | Pass 7 worked without problems too, though it was a much slower pass than the last three. I finally started to feel like I was making progress. Pass 7 done, means pass 8 is up! Halfway there! | ||
+ | |||
+ | Pass 8 took something along the lines of an hour to run, but it finally finished without errors... I hope the other phases aren't similarly insane with their timing. I'm considering taking the --quiet flag back out, and I think I will for pass 9. It's nice to know // | ||
+ | |||
< | < | ||
----- pass 4 (FilterSymbolsPass) ----- | ----- pass 4 (FilterSymbolsPass) ----- | ||
Filtering out excluded symbols and summarizing items... | Filtering out excluded symbols and summarizing items... | ||
Done | Done | ||
- | </ | ||
- | |||
- | When pass 4 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 5 ===== | ||
- | |||
- | Pass 5 was also a clean sweep: | ||
- | < | ||
---- pass 5 (SortRevisionSummaryPass) ----- | ---- pass 5 (SortRevisionSummaryPass) ----- | ||
Sorting CVS revision summaries... | Sorting CVS revision summaries... | ||
Line 122: | Line 129: | ||
</ | </ | ||
- | When pass 5 succeeded, my commandline was: | + | When passes |
- | <code bash> | + | |
- | ./cvs2svn --svnrepos=./ | + | |
- | </ | + | |
- | + | ||
- | ===== Pass 6 ===== | + | |
- | + | ||
- | Pass 6 was just a beautiful thing, went by without a hitch. Not that I expected any of these " | + | |
- | + | ||
- | When pass 6 succeeded, my commandline was: | + | |
- | <code bash> | + | |
- | ./cvs2svn --svnrepos=./ | + | |
- | </ | + | |
- | + | ||
- | ===== Pass 7 ===== | + | |
- | + | ||
- | Pass 7 worked without problems too, though it was a much slower pass than the last three. I finally started to feel like I was making progress. Pass 7 done, means pass 8 is up! Halfway there! | + | |
- | + | ||
- | When pass 7 succeeded, my commandline was: | + | |
- | <code bash> | + | |
- | ./cvs2svn --svnrepos=./ | + | |
- | </ | + | |
- | + | ||
- | ===== Pass 8 ===== | + | |
- | + | ||
- | Pass 8 took something along the lines of an hour to run, but it finally finished without errors... I hope the other phases aren't similarly insane with their timing. I'm considering taking the --quiet flag back out, and I think I will for pass 9. It's nice to know // | + | |
- | + | ||
- | When pass 8 succeeded, my commandline was: | + | |
<code bash> | <code bash> | ||
./cvs2svn --svnrepos=./ | ./cvs2svn --svnrepos=./ | ||
Line 196: | Line 176: | ||
</ | </ | ||
- | ===== Pass 10 ===== | + | ===== Passes |
+ | |||
+ | 10: Pass 10 was what my Warcraft friends would call " | ||
+ | |||
+ | 11: Well, pass 11 was faster than 8 and 9, if not as fast as 10... | ||
+ | |||
+ | 12: Another one bites the dust! | ||
+ | |||
+ | 13: Pass 13 certainly was interesting. Generating all the SVN commits... | ||
+ | |||
+ | 14: Nice short easy one. | ||
+ | |||
+ | 15: 15 down, 1 to go! | ||
+ | |||
+ | 16: Pop the champagne cork! | ||
- | Pass 10 was what my Warcraft friends would call " | ||
< | < | ||
----- pass 10 (BreakSymbolChangesetCyclesPass) ----- | ----- pass 10 (BreakSymbolChangesetCyclesPass) ----- | ||
Line 204: | Line 197: | ||
Done | Done | ||
Time for pass10 (BreakSymbolChangesetCyclesPass): | Time for pass10 (BreakSymbolChangesetCyclesPass): | ||
- | </ | ||
- | |||
- | When pass 10 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 11 ===== | ||
- | |||
- | Well, pass 11 was faster than 8 and 9, if not as fast as 10... | ||
- | < | ||
----- pass 11 (BreakAllChangesetCyclesPass) ----- | ----- pass 11 (BreakAllChangesetCyclesPass) ----- | ||
Breaking CVSSymbol dependency loops... | Breaking CVSSymbol dependency loops... | ||
Done | Done | ||
Time for pass11 (BreakAllChangesetCyclesPass): | Time for pass11 (BreakAllChangesetCyclesPass): | ||
- | </ | ||
- | |||
- | When pass 11 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 12 ===== | ||
- | |||
- | Another one bites the dust! | ||
- | < | ||
----- pass 12 (TopologicalSortPass) ----- | ----- pass 12 (TopologicalSortPass) ----- | ||
Generating CVSRevisions in commit order... | Generating CVSRevisions in commit order... | ||
Done | Done | ||
Time for pass12 (TopologicalSortPass): | Time for pass12 (TopologicalSortPass): | ||
- | </ | ||
- | |||
- | When pass 12 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 13 ===== | ||
- | |||
- | Pass 13 certainly was interesting. Generating all the SVN commits... | ||
- | < | ||
... | ... | ||
Creating Subversion r192256 (commit) | Creating Subversion r192256 (commit) | ||
Done | Done | ||
Time for pass13 (CreateRevsPass): | Time for pass13 (CreateRevsPass): | ||
- | </ | ||
- | |||
- | So 192,256 commits in the CVS repository, including tagging and branching. That's a pretty impressive total over 12 years, don't you think? | ||
- | |||
- | When pass 13 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 14 ===== | ||
- | |||
- | Nice short easy one. | ||
- | < | ||
----- pass 14 (SortSymbolsPass) ----- | ----- pass 14 (SortSymbolsPass) ----- | ||
Sorting symbolic name source revisions... | Sorting symbolic name source revisions... | ||
Done | Done | ||
Time for pass14 (SortSymbolsPass): | Time for pass14 (SortSymbolsPass): | ||
- | </ | ||
- | |||
- | When pass 14 succeeded, my commandline was: | ||
- | <code bash> | ||
- | ./cvs2svn --svnrepos=./ | ||
- | </ | ||
- | |||
- | ===== Pass 15 ===== | ||
- | |||
- | 15 down, 1 to go! | ||
- | < | ||
----- pass 15 (IndexSymbolsPass) ----- | ----- pass 15 (IndexSymbolsPass) ----- | ||
Determining offsets for all symbolic names... | Determining offsets for all symbolic names... | ||
Done. | Done. | ||
Time for pass15 (IndexSymbolsPass): | Time for pass15 (IndexSymbolsPass): | ||
- | </ | + | ----- pass 16 (OutputPass) |
- | + | ||
- | When pass 15 succeeded, my commandline was: | + | |
- | <code bash> | + | |
- | ./ | + | |
- | </ | + | |
- | + | ||
- | ===== Pass 16 ===== | + | |
- | + | ||
- | Pop the champagne cork! | + | |
- | < | + | |
Starting Subversion r192256 / 192256 | Starting Subversion r192256 / 192256 | ||
Done. | Done. | ||
Line 463: | Line 389: | ||
</ | </ | ||
- | Whew. That was going to make for a //very// long options file where it was very easy to make copypasta errors. I needed to add a little Python code. How does one do foreach (array(// | + | Whew. That was going to make for a //very// long options file where it was very easy to make copypasta errors. I needed to add a little Python code. How does one do foreach (array(// |
We came up with this rather handy little bit of code: | We came up with this rather handy little bit of code: | ||
Line 995: | Line 921: | ||
Next step: Decide on a repository structure. Ooops... lots of differing opinions on that. | Next step: Decide on a repository structure. Ooops... lots of differing opinions on that. | ||
+ | |||
+ | Well, this was getting complicated. It was time to step back and automate some of the process. So I popped open a new PHP file and came up with automation for the svn create, cvs2svn, and svn rm commands already discussed. Then I went back and added some nice command-line-y-ness to it using PEAR's Console_CommandLine (a VERY nice package, kudos to its author(s)!). The script can be viewed at [[http:// | ||
+ | |||
+ | That done, I looked back at the reorganization mess. It looked like there would in fact be a few separate repositories for things like PEAR and GTK. I needed advice on this one, so I went to the mailing list. They wanted to know, "why separate repositories?" | ||
+ | |||
+ | So I rewrote the conversion script completely to support this premise, and contacted various people to find out what to do with the " | ||
+ | |||
+ | ===== Hook scripts ===== | ||
+ | |||
+ | At a glance it might seem that would be the end of it. But unfortunately, | ||
+ | * Access Control Lists - replaced by the SVN authz database | ||
+ | * commitinfo.pl - I couldn' | ||
+ | * cvswrappers - Replaced by SVN's autoprops | ||
+ | * loginfo.pl - Sends the e-mails to various mailing lists when commits happen | ||
+ | * modules - Replaced by svn: | ||
+ | * readers - Replaced by SVN's authz database | ||
===== Available for the curious ===== | ===== Available for the curious ===== | ||
Line 1002: | Line 944: | ||
</ | </ | ||
- | This will check out all the projects in the repository; it's suggested to specify a particular module like < | + | This will check out all the projects in the repository; it's suggested to specify a particular module like [[http:// |
vcs/cvs2svnconversion.1224458129.txt.gz · Last modified: 2017/09/22 13:28 (external edit)