Migration from CVS to SVN: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
m (Category:Historic)
 
(144 intermediate revisions by 4 users not shown)
Line 1: Line 1:
'''''NOTE 2008: The migration has be done - this page is archived for historical reasons'''''
This page contains notes related to GRASS code migration (planned) from CVS to SVN.
This page contains notes related to GRASS code migration (planned) from CVS to SVN.


== Basic ==
== Meta ==


* The SVN command line interface is just like CVS, many tasks are identical- just change the program name from cvs to svn.
* [[SVN_hosting|Where to host the SVN repository?]]
: '''''October 2007: It has been decided to open the SVN at OSGeo'''''


== Gotchas ==
== Basic ==
 
* cvs2svn is known to break binary files (images) which were not imported into the CVS with the -kb flag. Luckily Glynn fixed most of these some months ago.


* Files using keyword substitution, such as $Date$ in the description.html files, will have to have support for that enabled manually, once per file (or write a find routine with | xargs svn ...).
* The SVN command line interface is just like CVS, many tasks are identical - just change the program name from cvs to svn.
$ svn propset svn:keywords "Date" filename.txt
$ svn commit
 
* how to maintain timestamps of files? We want to keep the last modification date, not the date of local download


== GRASS CVS repository structure ==
== GRASS CVS repository structure ==


  /grass
  /grass-cvs
|
  +---/grass
  +---/grass
|
  +---/grass51
  +---/grass51
|
  +---/grass6
  +---/grass6
|
  +---/grass_doc
  +---/grass_doc
|
  +---/libgrass
  +---/libgrass
|
  +---/newsletter
  +---/newsletter
|
  +---/programgrass50
  +---/programgrass50
|
  +---/web
  +---/web


== Testing SVN repository ==
== GRASS OSGeo SVN repository structure ==


* grass/grass should be renamed to grass/grass5
See [[Talk:Migration_from_CVS_to_SVN|Discussion page]] for details.


Migrate all directories or only actively used (grass, grass6, newsletter, web)?
  /grass-svn
 
  |
=== Proposed structure ===
  +---/grass
 
  |    |
  /grass
  |    +---/trunk (grass6 CVS HEAD)
+---/grass5
  |    |
    +---/branches
  |    +---/branches
    +---/tags
  |    |    |
    +---/trunk
  |    |    +---/releasebranch_5_x (note: 5_5 based on grass5 CVS HEAD)
  +---/grass6
  |    |    |
    +---/braches
  |    |    +---/releasebranch_6_x
    +---/tags
  |    |
    +---/trunk
  |    +---/tags
+---/newsletter
  |
    +---/branches (???)
  |---/grass-addons
    +---/tags
  |
    +---/trunk
  +---/grass-web
  +---/web
  |    |
 
  |    +---/trunk
=== Copy of GRASS CVS repository ===
 
rsync -r --times --links --bwlimit=200 rsync://rsync.intevation.de/grass grass-cvs
 
→ cca 600 MB!
 
=== Creating SVN repository ===
 
==== Only grass5 ====
 
  cvs2svn --use-cvs --no-default-eol \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
  -s grass5svn grass-cvs/grass
 
→ '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grass5svn grass5svn]'''
 
Question: exclude selected branches (which one?)
 
==== Only grass6 ====
 
cvs2svn --use-cvs --no-default-eol \
-s grass6svn grass-cvs/grass6
...
Error summary:
ERROR: A CVS repository cannot contain both grass-cvs/grass6/display/d.erase/main.c,v and grass-cvs/grass6/display/d.erase/Attic/main.c,v
ERROR: A CVS repository cannot contain both grass-cvs/grass6/general/g.mapsets/main_inter.c,v and grass-cvs/grass6/general/g.mapsets/Attic/main_inter.c,v
ERROR: A CVS repository cannot contain both grass-cvs/grass6/include/gproj_api.h,v and grass-cvs/grass6/include/Attic/gproj_api.h,v
ERROR: A CVS repository cannot contain both grass-cvs/grass6/visualization/nviz/src/getCat.c,v and grass-cvs/grass6/visualization/nviz/src/Attic/getCat.c,v
Exited due to fatal error(s).
ERROR: A CVS repository cannot contain both grass-cvs/grass6/visualization/nviz/src/tmp,v and grass-cvs/grass6/visualization/nviz/src/Attic/tmp,v
 
Solution:
 
* [http://cvs2svn.tigris.org/faq.html#atticprob cvs2svn FAQ]
 
Question: Remove Attic files (?)
 
  rm -f grass-cvs/grass6/display/d.erase/Attic/main.c,v
  rm -f grass-cvs/grass6/general/g.mapsets/Attic/main_inter.c,v
rm -f grass-cvs/grass6/include/Attic/gproj_api.h,v
  rm -f grass-cvs/grass6/visualization/nviz/src/Attic/getCat.c,v
  rm -f grass-cvs/grass6/visualization/nviz/src/Attic/tmp,v
 
Restart
 
cvs2svn --use-cvs --no-default-eol \
-s grass6svn grass-cvs/grass6
...
----- pass 2 (CollateSymbolsPass) -----
ERROR: It is not clear how the following symbols should be converted.
Use --force-tag, --force-branch and/or --exclude to resolve the ambiguity.
    'releasebranch_6_2' is a tag in 2 files, a branch in 5259 files and has commits in 1513 files
 
Restart
 
cvs2svn --use-cvs --no-default-eol \
--force-branch=releasebranch_6_2 \
-s grass6svn grass-cvs/grass6
 
Exclude all [http://grass.itc.it/devel/cvstags.php undocumented] braches
 
cvs2svn --use-cvs --no-default-eol --force-branch=releasebranch_6_2 \
--exclude="grass" \
--exclude="grassreleasebranch_5_0_0" \
--exclude="markus" \
--exclude="releasebranch_14_august_2001_5_0_0" \
--exclude="releasebranch_26_april_2002_5_0_0" \
--exclude="releasebranch_5_4" \
--exclude="unlabeled.*" \
-s grass6svn1 grass-cvs/grass6
...
----- pass 2 (CollateSymbolsPass) -----
Checking for blocked exclusions...
ERROR: The branch 'markus' cannot be excluded because the following symbols depend on it:
    'start'
    'releasebranch_11_april_2001_5_0_0'
ERROR: The branch 'grass' cannot be excluded because the following symbols depend on it:
...
 
cvs2svn --use-cvs --no-default-eol --force-branch=releasebranch_6_2  \
--exclude="grass" \
--exclude="grassreleasebranch_5_0_0" \
--exclude="markus" \
--exclude="releasebranch_14_august_2001_5_0_0" \
--exclude="releasebranch_26_april_2002_5_0_0" \
--exclude="releasebranch_5_4" \
--exclude="unlabeled.*" \
--exclude="devices_cleanup_20000420" \
--exclude="post_compare_glynn_head_2002_11_27" \
--exclude="post_compare_glynn_release_2002_11_27" \
--exclude="post_merge_head_2002_01_22" \
--exclude="post_sync_2002_01_22" \
--exclude="pre-curses-fix" \
--exclude="pre_merge_head_2002_01_22" \
--exclude="pre_merge_release_2002_01_22" \
--exclude="pre_sync_2001_10_31" \
--exclude="pre_sync_2002_01_17" \
--exclude="release_03_11_2003_grass5_0_3" \
--exclude="release_05_11_2004_grass5_4_0" \
--exclude="release_10_04_2003_grass5_0_2" \
--exclude="release_13_may_2002_grass5_0_0_pre4" \
--exclude="release_13_september_2001_grass5_0_0_pre2" \
--exclude="release_15_05_2004_grass5_3_0" \
--exclude="release_16_january_2002_grass5_0_0_pre3" \
--exclude="release_17_06_2004_grass5_7_0" \
--exclude="release_25_06_2002_grass5_0_0_pre5" \
--exclude="release_28_01_2003_grass5_0_1" \
--exclude="release_30_08_2002_grass5_0_0" \
--exclude="releasebranch_11_april_2001_5_0_0" \
--exclude="releasebranch_11_april_2001_5_0_0_DEAD" \
--exclude="releasebranch_500" \
--exclude="releasebranch_5_0_0" \
--exclude="release_grass500pre1_20_may_2001" \
--exclude="release_grass5beta10_7_december_2000" \
--exclude="release_grass5beta11_4_february_2001" \
--exclude="release_grass5beta11pre1_21_january_2001" \
--exclude="release_grass5beta11pre2_28_january_2001" \
--exclude="release_grass5beta6_16_feb_2000" \
--exclude="release_grass5beta7_20_april_2000" \
--exclude="release_grass5beta8_26_july_2000" \
--exclude="release_grass5beta9_6_december_2000" \
--exclude="start" \
--exclude="testbranch_5_0_0stable" \
--exclude="unlabeled-1.1.1.1.4" \
--exclude="unlabeled-1.1.1.1.6" \
--exclude="color_changes_20010502" \
-s grass6svn grass-cvs/grass6
 
Add other switches (e.g. <tt>--encoding</tt>) ??
 
  cvs2svn --use-cvs --no-default-eol --force-branch=releasebranch_6_2  \
--exclude="grass" \
--exclude="grassreleasebranch_5_0_0" \
--exclude="markus" \
--exclude="releasebranch_14_august_2001_5_0_0" \
--exclude="releasebranch_26_april_2002_5_0_0" \
--exclude="releasebranch_5_4" \
--exclude="unlabeled.*" \
--exclude="devices_cleanup_20000420" \
--exclude="post_compare_glynn_head_2002_11_27" \
--exclude="post_compare_glynn_release_2002_11_27" \
--exclude="post_merge_head_2002_01_22" \
--exclude="post_sync_2002_01_22" \
--exclude="pre-curses-fix" \
--exclude="pre_merge_head_2002_01_22" \
  --exclude="pre_merge_release_2002_01_22" \
--exclude="pre_sync_2001_10_31" \
--exclude="pre_sync_2002_01_17" \
--exclude="release_03_11_2003_grass5_0_3" \
--exclude="release_05_11_2004_grass5_4_0" \
--exclude="release_10_04_2003_grass5_0_2" \
--exclude="release_13_may_2002_grass5_0_0_pre4" \
--exclude="release_13_september_2001_grass5_0_0_pre2" \
--exclude="release_15_05_2004_grass5_3_0" \
--exclude="release_16_january_2002_grass5_0_0_pre3" \
--exclude="release_17_06_2004_grass5_7_0" \
--exclude="release_25_06_2002_grass5_0_0_pre5" \
--exclude="release_28_01_2003_grass5_0_1" \
--exclude="release_30_08_2002_grass5_0_0" \
--exclude="releasebranch_11_april_2001_5_0_0" \
--exclude="releasebranch_11_april_2001_5_0_0_DEAD" \
--exclude="releasebranch_500" \
--exclude="releasebranch_5_0_0" \
--exclude="release_grass500pre1_20_may_2001" \
--exclude="release_grass5beta10_7_december_2000" \
--exclude="release_grass5beta11_4_february_2001" \
--exclude="release_grass5beta11pre1_21_january_2001" \
--exclude="release_grass5beta11pre2_28_january_2001" \
--exclude="release_grass5beta6_16_feb_2000" \
--exclude="release_grass5beta7_20_april_2000" \
--exclude="release_grass5beta8_26_july_2000" \
--exclude="release_grass5beta9_6_december_2000" \
--exclude="start" \
--exclude="testbranch_5_0_0stable" \
--exclude="unlabeled-1.1.1.1.4" \
--exclude="unlabeled-1.1.1.1.6" \
--exclude="color_changes_20010502" \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grass6svn grass-cvs/grass6
 
&rarr; '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grass6svn grass6svn]'''
 
==== Only newsletter ====
 
  cvs2svn --use-cvs --no-default-eol \
  --encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grassnlsvn grass-cvs/newsletter
 
Question: exclude branch "markus" and tags "Final_version", "ready_for_grammar_spelling_correction" and "start"
 
  cvs2svn --use-cvs --no-default-eol \
  --exclude="markus" \
--exclude="Final_version" \
--exclude="ready_for_grammar_spelling_correction" \
--exclude="start" \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grassnlsvn grass-cvs/newsletter
  ...
  Checking for blocked exclusions...
ERROR: The branch 'markus' cannot be excluded because the following symbols depend on it:
    'volume1_final'
...
 
Cannot exclude branch "markus"
 
cvs2svn --use-cvs --no-default-eol \
--exclude="Final_version" \
--exclude="ready_for_grammar_spelling_correction" \
--exclude="start" \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grassnlsvn grass-cvs/newsletter
 
Questions:
* Rename brach "markus"?
* Rename tags "volume[1|2]_final" to "release_vol[1|2]"?
 
&rarr; '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grassnlsvn grassnlsvn]
 
==== Only web ====
 
cvs2svn --use-cvs --no-default-eol \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grasswebsvn grass-cvs/web
  ...
  ERROR: A CVS repository cannot contain both grass-cvs/web/bugtracking/index.html,v and grass-cvs/web/bugtracking/Attic/index.html,v
...
 
Question: Remove Attic file?
 
rm -f grass-cvs/web/bugtracking/Attic/index.html,v


Question: Ignore branches ("markus") and tags ("start")?
Notes:
* <tt>grass51</tt>, <tt>grass_doc</tt>, <tt>libgrass</tt> and <tt>programgrass50</tt> are dead, will be not migrated
* <tt>grass</tt> migrated as <tt>grass/branches/releasebranch_5_5</tt>
* <tt>web</tt> migrated as <tt>grass-web</tt>
* <tt>newsletter</tt> will be merged with OSGeo newsletter repository
* wxPython GUI moved from grass-addons to grass code base (<tt>grass/gui/wxpython</tt>)
* <tt>gui/wxpython/screenshots</tt> removed, can be part of grass-addons (e.g. <tt>grass-addons/screenshots/wxpython</tt>)


cvs2svn --use-cvs --no-default-eol \
[http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/ Scripts]:
--trunk-only \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grasswebsvn grass-cvs/web


&rarr; '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grasswebsvn grasswebsvn]
:* [http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/grass-cvs2svn-base.sh grass-cvs2svn-base.sh]
:* [http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/grass-cvs2svn-s2.sh grass-cvs2svn-s2.sh]
:* [http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/grass-cvs2svn-wxpython.sh grass-cvs2svn-wxpython.sh]


==== grass6 HEAD &rarr; grass7 ====
For text files are used <tt>keywords=Author Date Id Revision</tt>, in detail:


cvs2svn --use-cvs --no-default-eol \
:* [http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/propsfile-g5-2 props file for grass5]
--force-branch=releasebranch_6_2 \
:* [http://josef.fsv.cvut.cz/~landa/grass-cvs2svn/propsfile-g6-2 props file for grass6]
--trunk-only \
--encoding="ASCII" \
--encoding="UTF-8" \
--encoding="ISO-8859-1" \
-s grass7svn grass-cvs/grass6


&rarr; '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grass7svn grass7svn]'''
<!-- &rarr; '''[http://josef.fsv.cvut.cz/cgi-bin/viewcvs.cgi/?root=grass-svn2 grass-svn2]''' -->


==== Whole grass repository (selected directories) ====
=== GRASS 7 development notes ===


TODO
[[Image:Grass7-development-svn.png|center]]


== External links ==
== External links ==
Line 324: Line 85:
* [http://cvs2svn.tigris.org/cvs2svn.html cvs2svn tool page]  
* [http://cvs2svn.tigris.org/cvs2svn.html cvs2svn tool page]  
* [http://www.neogia.org/Cvs_To_Subversion_Migration_Plan Migration plan example]
* [http://www.neogia.org/Cvs_To_Subversion_Migration_Plan Migration plan example]
* [http://www.xs4all.nl/~carlo17/svn/cvs2svn.html Converting CVS to subversion]
* [http://docs.codehaus.org/display/ninja/List+CVS+Tags List CVS Tags]


* Online book: [http://svnbook.red-bean.com/nightly/en/index.html Version Control with Subversion]
* Online book: [http://svnbook.red-bean.com/nightly/en/index.html Version Control with Subversion]
Line 333: Line 96:


[[Category:Development]]
[[Category:Development]]
[[Category:Historic]]

Latest revision as of 11:39, 26 January 2013

NOTE 2008: The migration has be done - this page is archived for historical reasons

This page contains notes related to GRASS code migration (planned) from CVS to SVN.

Meta

October 2007: It has been decided to open the SVN at OSGeo

Basic

  • The SVN command line interface is just like CVS, many tasks are identical - just change the program name from cvs to svn.

GRASS CVS repository structure

/grass-cvs
|
+---/grass
|
+---/grass51
|
+---/grass6
|
+---/grass_doc
|
+---/libgrass
|
+---/newsletter
|
+---/programgrass50
|
+---/web

GRASS OSGeo SVN repository structure

See Discussion page for details.

/grass-svn
|
+---/grass
|    |
|    +---/trunk (grass6 CVS HEAD)
|    |
|    +---/branches
|    |    |
|    |    +---/releasebranch_5_x (note: 5_5 based on grass5 CVS HEAD)
|    |    |
|    |    +---/releasebranch_6_x
|    |
|    +---/tags
|
|---/grass-addons
|
+---/grass-web
|    |
|    +---/trunk

Notes:

  • grass51, grass_doc, libgrass and programgrass50 are dead, will be not migrated
  • grass migrated as grass/branches/releasebranch_5_5
  • web migrated as grass-web
  • newsletter will be merged with OSGeo newsletter repository
  • wxPython GUI moved from grass-addons to grass code base (grass/gui/wxpython)
  • gui/wxpython/screenshots removed, can be part of grass-addons (e.g. grass-addons/screenshots/wxpython)

Scripts:

For text files are used keywords=Author Date Id Revision, in detail:


GRASS 7 development notes

External links

SVN hosting

There are two main options to host the new SVN repository.