#!/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)-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
