summaryrefslogtreecommitdiff
path: root/maintainer-scripts/update_version_svn
blob: ba47687cd4f2d9a186f875361b46847c5c084364 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/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 $ADD_BRANCHES.

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

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

# The path to cvs.
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}"

# ARGS is passed to 'cvs co'
CURR_DATE=`/bin/date +"%Y%m%d"`

# version is contained within a char*
textstring_FILES="gcc/version.c"

# version is contained within a #define
cppdefine_FILES="libstdc++-v3/include/bits/c++config"

# version is all there is
datestamp_FILES="gcc/DATESTAMP"

FILES="$textstring_FILES $cppdefine_FILES $datestamp_FILES"
DIRS="$textstring_DIRS $cppdefine_DIRS $datestamp_DIRS"

# 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 a special case; if
  # you check out files with -r HEAD, CVS will not let you check 
  # in changes.
  if test "$BRANCH" = HEAD; then 
    for i in $FILES; do
      ${SVN} -q co -N ${SVNROOT}/trunk/`dirname $i` `basename $i`
    done
  else
    for i in $FILES; do
      ${SVN} -q co -N ${SVNROOT}/branches/${BRANCH}/`dirname $i` `basename $i`
    done
  fi

  # There are no files to commit yet.
  COMMIT_FILES=""
   
  for file in $textstring_FILES; do
    dirname=`basename $file`
    file=`basename $file`
    file="$dirname/$file"
    if test -f $file; then 
      /bin/sed  <$file >$file.new -e \
  "s/\(.*\"[^ ]*\) [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\1 ${CURR_DATE}/" 

      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
  
  for file in $cppdefine_FILES; do
    dirname=`basename $file`
    file=`basename $file`
    file="$dirname/$file"
    if test -f $file; then
      /bin/sed <$file >$file.new -e \
  "s/\(#.*\) [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/\1 ${CURR_DATE}/"

      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

  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 $FILES; do
   rm -rf /tmp/$$/`basename $i`
  done
done

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