Cvs and updating to head
Notice, however, that CVS is capable of getting things wrong, notably if interrupted in the middle of an update.This can lead to an infinite loop condition when updating.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.ln -sf $# -- set release numbers on release and devel.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.
Tags are often used to record the version number used by the developers, rather than the CVS revision number, which is used primarily as a CVS internal designation.
# 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!