#!/bin/sh
#
# Update the current version date in all files in the tree containing
# it.  Consider all release branches except those matching the regular
# expression in $IGNORE_BRANCHES, and also consider those branches listed
# in the space separated list in $ADD_BRANCHES.

SVNROOT=${SVNROOT:-"file:///svn/gcc"}
IGNORE_BRANCHES='gcc-(2_95|3_0|3_1|3_2|3_3|3_4|4_0|4_1|4_2|4_3|4_4|4_5|4_6|4_7|4_8|4_9|5)-branch'
ADD_BRANCHES='HEAD'

# Run this from /tmp.
export SVNROOT
/bin/rm -rf /tmp/$$
/bin/mkdir /tmp/$$
cd /tmp/$$

SVN=${SVN:-/usr/bin/svn}

# Compute the branches which we should update.
BRANCHES=`$SVN ls $SVNROOT/branches \
	  | sed -e 's/\///' \
          | egrep 'gcc-[0-9]+(_[0-9]+)?-branch$' \
          | egrep -v $IGNORE_BRANCHES`
# Always update the mainline.
BRANCHES="${BRANCHES} ${ADD_BRANCHES}"

# This is put into the datestamp files.
CURR_DATE=`/bin/date +"%Y%m%d"`

datestamp_FILES="gcc/DATESTAMP"


# Assume all will go well.
RESULT=0
for BRANCH in $BRANCHES; do
  echo "Working on \"$BRANCH\"."
  # Check out the files on the branch.  HEAD is in a different namespace.
  if test "$BRANCH" = HEAD; then 
    SVNROOT2=${SVNROOT}/trunk
  else    
    SVNROOT2=${SVNROOT}/branches/${BRANCH}
  fi

  for i in $datestamp_FILES; do
    ${SVN} -q co -N ${SVNROOT2}/`dirname $i` `basename $i`
  done

  # There are no files to commit yet.
  COMMIT_FILES=""

  for file in $datestamp_FILES; do
    dirname=`basename $file`
    file=`basename $file`
    file="$dirname/$file"
    if test -f $file; then
      echo ${CURR_DATE} > $file.new

      if /usr/bin/cmp -s $file $file.new; then
	rm -f $file.new
      else
	mv -f $file.new $file
        COMMIT_FILES="$COMMIT_FILES $file"
      fi
    fi
  done

  if test -n "$COMMIT_FILES"; then
    for i in $COMMIT_FILES; do
    echo "Attempting to commit $i"
    if ! ${SVN} commit -m "Daily bump." $i; then
       # If we could not commit the files, indicate failure.
       RESULT=1
     fi
    done
  fi
  
  # Remove the files.
  for i in $datestamp_FILES; do
   rm -rf /tmp/$$/`basename $i`
  done
done

/bin/rm -rf /tmp/$$
exit $RESULT
