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