CVSROOT=cvs.r-project.org:/home/rdevel/CVS-ARCHIVE
export CVSROOT
For csh and derivatives, use
setenv CVSROOT cvs.r-project.org:/home/rdevel/CVS-ARCHIVE
Also make sure that you have CVS_RSH set to ssh.
The -P option prunes empty directories. The checked out directory will be called "R". Use the -d option to call it something else.
cvs co -P -r R-0-65-patches R
Notice the -r option. This can mostly be omitted, but in case a new directory has been added, one might not get the version from the relevant branch. You don't need it on the main branch of course.
or just
cvs commit
in which case you'll be asked for a change comment.
# assumes that "R-trunk-update-last" is set correctly # if not: # cvs rtag -F -r R-trunk-update R-trunk-update-last R # WATCHIT!! After an x.y.0 release set it to R-x-y, not # R-trunk-update-last... export RTOP=~/misc export TAG=R-0-90-patches cd $RTOP/r-release/R cvs update -Pd -r $TAG cvs tag -F R-trunk-update cd $RTOP/r-devel/R cvs update -Pd cvs update -j R-trunk-update-last -j R-trunk-update find -type f | xargs grep '>>>>>>>' # fix conflicts... cvs commit -m 'branch update' # better do this right away... cvs rtag -F -r R-trunk-update R-trunk-update-last R
FILES="src/main/unique.c NEWS" #change to your liking RELEASE=~/misc/r-release/R #ditto DEVEL=~/misc/r-devel/R #ditto # fix and commit to release version as usual, e.g. cvs up vi $FILES #---------- # TEST your CHANGES #--------- cvs commit $FILES cvs tag -F -r R-trunk-update R-trunk-update-last $FILES cvs tag -F R-trunk-update $FILES cd $DEVEL cvs update -j R-trunk-update-last -j R-trunk-update $FILES grep '>>>>>>>' $FILES #------------ # FIX CONFLICTS (if any) #------------ cvs commit -m 'branch update' $FILES cvs tag -F -r R-trunk-update R-trunk-update-last $FILES
MINOR=90 NEWMINOR=99 TAG=R-0-$MINOR REL=R-0.$MINOR.0 OREL=R-0.65.1 FTPDIR=~ftp/pub/CRAN/src/base/ echo -e "TAG=$TAG\nREL=$REL\nOREL=$OREL" export CVSROOT=/home/rdevel/CVS-ARCHIVE/ cd r-devel cvs checkout -P R #-- set/check version number and release status: cd R echo 0.$MINOR.0 > VERSION autoconf rm src/main/gram.c cd ../BUILD make distclean ../R/configure make make check cp src/main/gram.c ../R/src/main/gram.c cd ../R cvs update -Pd # watch out for last minute merges! cvs commit -m 'preparing for release' #---- at specified time: cvs update # watch out for last minute merges - make check again if necessary! cvs tag $TAG cvs rtag -b -r $TAG $TAG-patches R cd ~ mv r-release $OREL mkdir r-release cd r-release cvs checkout -r $TAG-patches R cvs tag -F R-trunk-update-last cd ~/public-releases cvs export -r $TAG -d $REL R GZIP=-9 tar cvfz $REL.tgz $REL cp $REL.tgz $REL/{README,INSTALL,RESOURCES,MIRROR-SITES,PLATFORMS,NEWS,Y2K} $FTPDIR cd $FTPDIR split -b 1400k $REL.tgz $REL.tgz-split. -- set release numbers on release and devel. versions cd ~/r-devel/R echo 0.$NEWMINOR.0 "Under development (unstable)" > VERSION cvs commit -m 'prepare for next version' VERSION cd ~/r-release/R echo 0.$MINOR.0 "Patched" > VERSION cvs commit -m 'prepare for next version' VERSION
# Exec the following and check carefully: MINOR=90 PL=1 OPL=$[PL-1] TAG=R-0-$MINOR-$PL REL=R-0.$MINOR.$PL OREL=R-0.$MINOR.$OPL DIFF=R-0.$MINOR.$OPL-0.$MINOR.$PL.diff echo -e "TAG=$TAG\nREL=$REL\nDIFF=$DIFF" FTPDIR=~ftp/pub/CRAN/src/base/ # go to the release directory cd ~/r-release cvs checkout -Pr R-0-$MINOR-patches R #-- set/check version number and release status cd R echo 0.$MINOR.$PL > VERSION autoconf cd ~/r-release/BUILD ../R/configure --prefix ~/$REL rm ../R/src/main/gram.c make make check make install mv src/main/gram.c ../R/src/main/gram.c cd ~/r-release/R cvs update -Pd cvs commit -m "prepare for release $REL" cvs tag $TAG cd ~/public-releases cvs export -r $TAG -d $REL R GZIP=-9 tar cvfz $REL.tgz $REL diff -ruN $OREL $REL > $DIFF gzip -9 $DIFF # (verify the patches) # (copy tarfile and diff.gz to FTP ~ftp/pub/alpha/) cp $REL.tgz $REL/{README,INSTALL,RESOURCES,MIRROR-SITES,PLATFORMS,NEWS,Y2K} $FTPDIR cp $DIFF.gz $FTPDIR cd $FTPDIR split -b 1400k $REL.tgz $REL.tgz-split. cd ~/r-release/R echo 0.$MINOR.$PL Patched > VERSION cvs commit -m "prepare for next release"
Suppose you want to have a branch to hold your volatile changes, let's say R-exp-pd. (A) Creating the branch =================== cvs rtag -b R-exp-pd R mkdir r-experimental cd r-experimental cvs checkout -P -r R-exp-pd R (B) Hacking on the branch ===================== Just like on the release branch: cvs update -Pd -r R-exp-pd #..hack, hack, hack.... cvs commit -m'hacked blah' (C) Updating from r-devel (aka "main trunk") ======================================== cvs rtag -F R-head R cvs update -j R-head # resolve conflicts if any cvs commit -m 'merged from main' (D) Merging the hack back into r-devel ================================== cd ~/r-devel/R cvs update -j R-exp-pd # resolve conflicts if any cvs commit -m merged with experimental branch