Massage the output from examples for consistency with Python 2.6.
[scons.git] / bin / scons-cdist
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 The SCons Foundation
4 #
5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
12 #
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
24 PROG=`basename $0`
25 NOARGFLAGS="afhlnqrstz"
26 ARGFLAGS="p:"
27 ALLFLAGS="${NOARGFLAGS}${ARGFLAGS}"
28 USAGE="Usage:  ${PROG} [-${NOARGFLAGS}] [-p project] change"
29
30 HELP="$USAGE
31
32   -a            Update the latest Aegis baseline (aedist) file.
33   -f            Force update, skipping up-front sanity check.
34   -h            Print this help message and exit.
35   -l            Update the local CVS repository.
36   -n            Don't execute, just echo commands.
37   -p project    Set the Aegis project.
38   -q            Quiet, don't print commands before executing them.
39   -r            Rsync the Aegis repository to SourceForge.
40   -s            Update the sourceforge.net CVS repository.
41   -t            Update the tigris.org CVS repository.
42   -z            Update the latest .tar.gz and .zip files.
43 "
44
45 DO=""
46 PRINT="echo"
47 EXECUTE="eval"
48 SANITY_CHECK="yes"
49
50 while getopts $ALLFLAGS FLAG; do
51     case $FLAG in
52     a | l | r | s | t | z )
53         DO="${DO}${FLAG}"
54         ;;
55     f )
56         SANITY_CHECK="no"
57         ;;
58     h )
59         echo "${HELP}"
60         exit 0
61         ;;
62     n )
63         EXECUTE=":"
64         ;;
65     p )
66         AEGIS_PROJECT="${OPTARG}"
67         ;;
68     q )
69         PRINT=":"
70         ;;
71     * )
72         echo "FLAG = ${FLAG}" >&2
73         echo "${USAGE}" >&2
74         exit 1
75         ;;
76     esac
77 done
78
79 shift `expr ${OPTIND} - 1`
80
81 if test "X$1" = "X"; then
82     echo "${USAGE}" >&2
83     exit 1
84 fi
85
86 if test "X${AEGIS_PROJECT}" = "X"; then
87     echo "$PROG: No AEGIS_PROJECT set." >&2
88     echo "${USAGE}" >&2
89     exit 1
90 fi
91
92 if test "X$DO" = "X"; then
93     DO="alrstz"
94 fi
95
96 cmd()
97 {
98     $PRINT "$*"
99     $EXECUTE "$*"
100 }
101
102 CHANGE=$1
103
104 if test "X${SANITY_CHECK}" = "Xyes"; then
105     SCM="cvs"
106     SCMROOT="/home/scons/CVSROOT/scons"
107     DELTA=`aegis -l -ter cd ${CHANGE} | sed -n 's/.*, Delta \([0-9]*\)\./\1/p'`
108     if test "x${DELTA}" = "x"; then
109         echo "${PROG}:  Could not find delta for change ${CHANGE}." >&2
110         echo "Has this finished integrating?  Change ${CHANGE} not distributed." >&2
111         exit 1
112     fi
113     PREV_DELTA=`expr ${DELTA} - 1`
114     COMMAND="scons-scmcheck -D ${PREV_DELTA} -d q -p ${AEGIS_PROJECT} -s ${SCM} ${SCMROOT}"
115     $PRINT "${COMMAND}"
116     OUTPUT=`${COMMAND}`
117     if test "X${OUTPUT}" != "X"; then
118         echo "${PROG}: ${SCMROOT} is not up to date:" >&2
119         echo "${OUTPUT}" >& 2
120         echo "Did you skip any changes?  Change ${CHANGE} not distributed." >&2
121         exit 1
122     fi
123 fi
124
125 if test X$EXECUTE != "X:" -a "X$SSH_AGENT_PID" = "X"; then
126     eval `ssh-agent`
127     ssh-add
128     trap 'eval `ssh-agent -k`; exit' 0 1 2 3 15
129 fi
130
131 cd
132
133 BASELINE=`aesub -p ${AEGIS_PROJECT} -c ${CHANGE} '${Project trunk_name}'`
134
135 TMPBLAE="/tmp/${BASELINE}.ae"
136 TMPCAE="/tmp/${AEGIS_PROJECT}.C${CHANGE}.ae"
137
138 # Original values for SourceForge.
139 #SFLOGIN="stevenknight"
140 #SFHOST="scons.sourceforge.net"
141 #SFDEST="/home/groups/s/sc/scons/htdocs"
142
143 SCONSLOGIN="scons"
144 SCONSHOST="manam.pair.com"
145 #SCONSDEST="public_html/production"
146 SCONSDEST="public_ftp"
147
148 #
149 # Copy the baseline .ae to the constant location on SourceForge.
150 #
151 case "${DO}" in
152 *a* )
153     cmd "aedist -s -bl -p ${AEGIS_PROJECT} > ${TMPBLAE}"
154     cmd "scp ${TMPBLAE} ${SCONSLOGIN}@${SCONSHOST}:${SCONSDEST}/${BASELINE}.ae"
155     cmd "rm ${TMPBLAE}"
156     ;;
157 esac
158
159 #
160 # Copy the latest .tar.gz and .zip files to the constant location on
161 # SourceForge.
162 #
163 case "${DO}" in
164 *z* )
165     BUILD_DIST=`aegis -p ${AEGIS_PROJECT} -cd -bl`/build/dist
166     SCONS_SRC_TAR_GZ=`echo ${AEGIS_PROJECT} | sed 's/scons./scons-src-/'`*.tar.gz
167     SCONS_SRC_ZIP=`echo ${AEGIS_PROJECT} | sed 's/scons./scons-src-/'`*.zip
168     cmd "scp ${BUILD_DIST}/${SCONS_SRC_TAR_GZ} ${SCONSLOGIN}@${SCONSHOST}:${SCONSDEST}/scons-src-latest.tar.gz"
169     cmd "scp ${BUILD_DIST}/${SCONS_SRC_ZIP} ${SCONSLOGIN}@${SCONSHOST}:${SCONSDEST}/scons-src-latest.zip"
170 esac
171
172 #
173 # Sync Aegis tree with SourceForge.
174 #
175 # Cribbed and modified from Peter Miller's same-named script in
176 # /home/groups/a/ae/aegis/aegis at SourceForge.
177 #
178 # Guide to what this does with rsync:
179 #
180 #   --rsh=ssh          use ssh for the transfer
181 #   -l                 copy symlinks as symlinks
182 #   -p                 preserve permissions
183 #   -r                 recursive
184 #   -t                 preserve times
185 #   -z                 compress data
186 #   --stats            file transfer statistics
187 #   --exclude          exclude files matching the pattern
188 #   --delete           delete files that don't exist locally
189 #   --delete-excluded  delete files that match the --exclude patterns
190 #   --progress         show progress during the transfer
191 #   -v                 verbose
192 #
193 # We no longer use the --stats option.
194 #
195 case "${DO}" in
196 *r* )
197     LOCAL=/home/scons/scons
198     REMOTE=/home/groups/s/sc/scons/scons
199     cmd "/usr/bin/rsync --rsh='ssh -l stevenknight' \
200             -l -p -r -t -z \
201             --exclude build \
202             --exclude '*,D' \
203             --exclude '*.pyc' \
204             --exclude aegis.log \
205             --exclude '.sconsign*' \
206             --delete --delete-excluded \
207             --progress -v \
208             ${LOCAL}/. scons.sourceforge.net:${REMOTE}/."
209     ;;
210 esac
211
212 #
213 # Sync the CVS tree with the local repository.
214 #
215 case "${DO}" in
216 *l* )
217     (
218         export CVSROOT=/home/scons/CVSROOT/scons
219         #cmd "ae2cvs -X -aegis -p ${AEGIS_PROJECT} -c ${CHANGE} -u $HOME/SCons/baldmt.com/scons"
220         cmd "ae-cvs-ci ${AEGIS_PROJECT} ${CHANGE}"
221     )
222     ;;
223 esac
224
225 #
226 # Sync the Subversion tree with Tigris.org.
227 #
228 case "${DO}" in
229 *t* )
230     (
231         SVN=http://scons.tigris.org/svn/scons
232         case ${AEGIS_PROJECT} in
233         scons.0.96 )
234             SVN_URL=${SVN}/branches/core
235             ;;
236         scons.0.96.513 )
237             SVN_URL=${SVN}/branches/sigrefactor
238             ;;
239         * )
240             echo "$PROG: Don't know SVN branch for '${AEGIS_PROJECT}'" >&2
241             exit 1
242             ;;
243         esac
244         SVN_CO_FLAGS="--username stevenknight"
245         #cmd "ae2cvs -X -aegis -p ${AEGIS_PROJECT} -c ${CHANGE} -u $HOME/SCons/tigris.org/scons"
246         cmd "ae-svn-ci ${AEGIS_PROJECT} ${CHANGE} ${SVN_URL} ${SVN_CO_FLAGS}"
247     )
248     ;;
249 esac
250
251 #
252 # Sync the CVS tree with SourceForge.
253 #
254 case "${DO}" in
255 *s* )
256     (
257         export CVS_RSH=ssh
258         export CVSROOT=:ext:stevenknight@scons.cvs.sourceforge.net:/cvsroot/scons
259         #cmd "ae2cvs -X -aegis -p ${AEGIS_PROJECT} -c ${CHANGE} -u $HOME/SCons/sourceforge.net/scons"
260         cmd "ae-cvs-ci ${AEGIS_PROJECT} ${CHANGE}"
261     )
262     ;;
263 esac
264
265 #
266 # Send the change .ae to the scons-aedist mailing list
267 #
268 # The subject requires editing by hand...
269 #
270 #aedist -s -p ${AEGIS_PROJECT} ${CHANGE} > ${TMPCAE}
271 #aegis -l -p ${AEGIS_PROJECT} -c ${CHANGE} cd |
272 #        pine -attach_and_delete ${TMPCAE} scons-aedist@lists.sourceforge.net