Cvs and updating to head
This information is for historical reference only; the R source repository is now maintained using Subversion. All developers are encouraged to use the same names, to provide us with a common reference.
For reference, we call The "Tag" column refers to CVS branch tags. =0) are made from the branch tagged "R-x-y-patches", whereas normal releases (R-x.y.0) are made from the from the "trunk" i.e. In what follows, I use the reference names also as directory names.
(By a development branch, I mean either the trunk or a version marked by a CVS branch tag) First set the CVSROOT environment variable and make sure it is exported: For Release versions are labeled with a tag of the form R-1-2-3.
(For obscure reasons, non-patch versions up to R-1.3.0 were labeled R-1-3 and not R-1-3-0. You can check out an old version simply with Notice however, that these tags are not branch tags, you cannot change a released version and commit the changes back.
To update a source tree with the latest changes, just go to the relevant top-level directory (e.g. I am unsure whether (and when) this is actually needed; there seems have been a case where a new directory got added from the wrong branch.
If you are on a slow connection, it generally works to take one revision and convert it to another tagged revision by using e.g.
Notice, however, that CVS is capable of getting things wrong, notably if interrupted in the middle of an update.
To put your modified versions back in the repository, just say in which case you'll be asked for a change comment.
Notice that commits only works on the trunk and on branch revisions.
Non-branch tags represent the status of the files at a given instance in the past which is unchangeable by definition.
# assumes that "last-patch-update" is set correctly export RTOP=~/R-devel #adjust as necessary export TAG=R-1-9-patches cd $RTOP/r-devel/R cvs rtag -F -r $TAG patch-update R cvs update -Pd cvs update -Pd -j last-patch-update -j patch-update find -type f | xargs grep ' FILES="src/main/unique.c NEWS" #change to your liking PATCH=~/R-devel/r-patched/R #ditto DEVEL=~/R-devel/r-devel/R #ditto # fix and commit to r-patched as usual, e.g.
cd $PATCH cvs up vi $FILES #---------- # TEST your CHANGES #--------- cvs commit $FILES # Note: Use cvs tag (not rtag) just in case someone commited a change # in the meantime cvs tag -F patch-update $FILES cd $DEVEL cvs update -j last-patch-update -j patch-update $FILES grep '' $FILES #------------ # FIX CONFLICTS (if any) # This technique is often helpful, although you need to be aware that # ediff occasionally makes conflicts more complicated rather than # less...# # emacs MAJOR=1 MINOR=9 PL=0 NEWMAJOR=2 NEWMINOR=0 TAG=R-$MAJOR-$MINOR-$PL BRANCHTAG=R-$MAJOR-$MINOR-patches REL=R-$MAJOR.$MINOR.0 OREL=R-1.8.1 echo -e "TAG=$TAG\n REL=$REL\n OREL=$OREL" export CVSROOT=/home/rdevel/CVS-ARCHIVE cd ~/r-devel rm -rf R BUILD cvs checkout -P R #-- set/check version number and release status: cd R tools/rsync-recommended echo $MAJOR.$MINOR.$PL VERSION autoconf mkdir ../BUILD cd ../BUILD # FIXME: this'll build against Tcl 8.0 on Franz and so might # break future versions ../R/configure --enable-maintainer-mode --prefix ~/$REL make && make check && make check-devel && make check-all cd ~/r-devel/R cvs update -Pd # watch out for merges!cvs commit -m 'preparing for release' #---- at specified time: cd ~/r-devel/R cvs update -Pd # watch out for last minute merges - # make check again if necessary!cvs rtag $TAG R cvs rtag -b -r $TAG $BRANCHTAG R cd ~ rm -rf r-patched mkdir r-patched cd r-patched cvs checkout -P -r $BRANCHTAG R cd ~/r-devel/BUILD make dist cp $gz $FTPDIR/$cd ../R cp README INSTALL RESOURCES NEWS Y2K $FTPDIR cd $FTPDIR split -b 1400k $$REL.tgz-split.