1*4fee23f9Smrg#! /bin/bash 2*4fee23f9Smrg 3*4fee23f9Smrg#set -ex 4*4fee23f9Smrg 5*4fee23f9Smrg# Update an SVN tree for a particular date. 6*4fee23f9Smrg 7*4fee23f9Smrgif [ $# != 1 ]; then 8*4fee23f9Smrg echo Usage: $0 id 9*4fee23f9Smrg exit 1 10*4fee23f9Smrgfi 11*4fee23f9Smrg 12*4fee23f9Smrgif [ "x${REG_DO_CLEANUPS}" != "x" ]; then 13*4fee23f9Smrg reg_cleanup 14*4fee23f9Smrgfi 15*4fee23f9Smrg 16*4fee23f9SmrgID=$1 17*4fee23f9SmrgBRANCH="" 18*4fee23f9Smrg 19*4fee23f9Smrg######################################################################## 20*4fee23f9Smrg# Get sources. 21*4fee23f9Smrg######################################################################## 22*4fee23f9Smrg 23*4fee23f9Smrgsvn_get() { 24*4fee23f9Smrg # In case there are problems with updates (there were with CVS), 25*4fee23f9Smrg # creating a file called REMOVE in the REG_SRCDIR directory causes us 26*4fee23f9Smrg # to start with a clean tree each time. 27*4fee23f9Smrg 28*4fee23f9Smrg unset LC_ALL 29*4fee23f9Smrg unset LANG 30*4fee23f9Smrg 31*4fee23f9Smrg cd ${REG_SRCDIR} 32*4fee23f9Smrg if [ -d gcc ]; then 33*4fee23f9Smrg # There's already a tree; do an update with the new revision. 34*4fee23f9Smrg cd gcc 35*4fee23f9Smrg echo "`date` svn update begun for id ${ID}, rev ${REV} (fix)" 36*4fee23f9Smrg echo svn update --non-interactive --revision ${REV} >> $LOG 37*4fee23f9Smrg svn update --non-interactive --revision ${REV} >> $LOG 38*4fee23f9Smrg if [ $? -eq 0 ]; then 39*4fee23f9Smrg echo "`date` svn update done" 40*4fee23f9Smrg else 41*4fee23f9Smrg echo "`date` svn update failed" 42*4fee23f9Smrg exit 1 43*4fee23f9Smrg fi 44*4fee23f9Smrg else 45*4fee23f9Smrg echo "`date` svn checkout begun for id ${ID}, rev ${REV}" 46*4fee23f9Smrg echo svn checkout --non-interactive --revision ${REV} \ 47*4fee23f9Smrg ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG 48*4fee23f9Smrg svn checkout --non-interactive --revision ${REV} \ 49*4fee23f9Smrg ${REG_SVN_REPO}/${BRANCHPATH} gcc >> $LOG 50*4fee23f9Smrg if [ $? -eq 0 ]; then 51*4fee23f9Smrg echo "`date` svn checkout done" 52*4fee23f9Smrg else 53*4fee23f9Smrg echo "`date` svn checkout failed" 54*4fee23f9Smrg exit 1 55*4fee23f9Smrg fi 56*4fee23f9Smrg cd gcc 57*4fee23f9Smrg fi 58*4fee23f9Smrg 59*4fee23f9Smrg # Touch generated files. 60*4fee23f9Smrg contrib/gcc_update --touch >> $LOG 61*4fee23f9Smrg} 62*4fee23f9Smrg 63*4fee23f9Smrg######################################################################## 64*4fee23f9Smrg# Main program 65*4fee23f9Smrg######################################################################## 66*4fee23f9Smrg 67*4fee23f9Smrgcd ${REG_SRCDIR} 68*4fee23f9Smrg 69*4fee23f9Smrg# This is a simple way to stop a long regression search fairly cleanly; 70*4fee23f9Smrg# just touch a file called STOP. 71*4fee23f9Smrg 72*4fee23f9Smrgif [ -f STOP ]; then 73*4fee23f9Smrg echo "`date` $0 detected STOP file" 74*4fee23f9Smrg rm -f STOP 75*4fee23f9Smrg exit 1 76*4fee23f9Smrgfi 77*4fee23f9Smrg 78*4fee23f9Smrg# Set up the log file. 79*4fee23f9SmrgREV=`${REG_IDS} -f index -t rev ${ID}` 80*4fee23f9SmrgLOG=${REG_SRCDIR}/logs/${BUGID}/${REV}.log 81*4fee23f9Smrgmkdir -p ${REG_SRCDIR}/logs/${BUGID} 82*4fee23f9Smrgrm -f $LOG 83*4fee23f9Smrgtouch $LOG 84*4fee23f9Smrg 85*4fee23f9Smrg# Get the branch for this patch. 86*4fee23f9SmrgBRANCH=`${REG_IDS} -f index -t branch ${ID}` 87*4fee23f9Smrgif [ "${BRANCH}" = "error" ]; then 88*4fee23f9Smrg echo "`date` $0: cannot determine the SVN branch for id ${ID}" 89*4fee23f9Smrg exit 1 90*4fee23f9Smrgfi 91*4fee23f9Smrg 92*4fee23f9Smrgif [ "${BRANCH}" = "trunk" ]; then 93*4fee23f9Smrg BRANCHPATH=trunk 94*4fee23f9Smrgelse 95*4fee23f9Smrg BRANCHPATH=branches/${BRANCH} 96*4fee23f9Smrgfi 97*4fee23f9Smrg 98*4fee23f9Smrgsvn_get 99*4fee23f9Smrg 100*4fee23f9Smrg# Look for a patch that's needed for this revision to build. 101*4fee23f9SmrgFIX=${REG_PATCHES}/${REV}.fix 102*4fee23f9Smrgecho "`date` looking for $FIX" 103*4fee23f9Smrgif [ -f $FIX ]; then 104*4fee23f9Smrg echo "`date` fix needed; checking whether it is already applied" 105*4fee23f9Smrg cd ${REG_SRCDIR}/gcc 106*4fee23f9Smrg patch --dry-run -s -p0 -i $FIX < /dev/null > /dev/null 2>&1 107*4fee23f9Smrg if [ $? -eq 0 ]; then 108*4fee23f9Smrg echo "`date` applying fix" 109*4fee23f9Smrg patch -s -p0 -i $FIX 110*4fee23f9Smrg fi 111*4fee23f9Smrgfi 112*4fee23f9Smrg 113*4fee23f9Smrgexit 0 114