diff options
author | Ben Cheng <bccheng@google.com> | 2013-03-28 11:14:20 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2013-03-28 12:40:33 -0700 |
commit | af0c51ac87ab2a87caa03fa108f0d164987a2764 (patch) | |
tree | 4b8b470f7c5b69642fdab8d0aa1fbc148d02196b /gcc-4.8/libgo/merge.sh | |
parent | d87cae247d39ebf4f5a6bf25c932a14d2fdb9384 (diff) | |
download | toolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.tar.gz toolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.tar.bz2 toolchain_gcc-af0c51ac87ab2a87caa03fa108f0d164987a2764.zip |
[GCC 4.8] Initial check-in of GCC 4.8.0
Change-Id: I0719d8a6d0f69b367a6ab6f10eb75622dbf12771
Diffstat (limited to 'gcc-4.8/libgo/merge.sh')
-rwxr-xr-x | gcc-4.8/libgo/merge.sh | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/gcc-4.8/libgo/merge.sh b/gcc-4.8/libgo/merge.sh new file mode 100755 index 000000000..ca358ac12 --- /dev/null +++ b/gcc-4.8/libgo/merge.sh @@ -0,0 +1,190 @@ +#!/bin/sh + +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This script merges changes from the master copy of the Go library +# into the libgo library. This does the easy stuff; the hard stuff is +# left to the user. + +# The file MERGE should hold the Mercurial revision number of the last +# revision which was merged into these sources. Given that, and given +# the current sources, we can run the usual diff3 algorithm to merge +# all changes into our sources. + +set -e + +TMPDIR=${TMPDIR:-/tmp} + +OLDDIR=${TMPDIR}/libgo-merge-old +NEWDIR=${TMPDIR}/libgo-merge-new + +if ! test -f MERGE; then + echo 1>&2 "merge.sh: must be run in libgo source directory" + exit 1 +fi + +rev=weekly +case $# in +1) ;; +2) rev=$2 ;; +*) + echo 1>&2 "merge.sh: Usage: merge.sh mercurial-repository [revision]" + exit 1 + ;; +esac + +repository=$1 + +old_rev=`sed 1q MERGE` + +rm -rf ${OLDDIR} +hg clone -r ${old_rev} ${repository} ${OLDDIR} + +rm -rf ${NEWDIR} +hg clone -u ${rev} ${repository} ${NEWDIR} + +new_rev=`cd ${NEWDIR} && hg log -r ${rev} | sed 1q | sed -e 's/.*://'` + +merge() { + name=$1 + old=$2 + new=$3 + libgo=$4 + if ! test -f ${new}; then + # The file does not exist in the new version. + if ! test -f ${old}; then + echo 1>&2 "merge.sh internal error no files $old $new" + exit 1 + fi + if ! test -f ${libgo}; then + # File removed in new version and libgo. + :; + else + echo "merge.sh: ${name}: REMOVED" + rm -f ${libgo} + hg rm ${libgo} + fi + elif test -f ${old}; then + # The file exists in the old version. + if ! test -f ${libgo}; then + echo "merge.sh: $name: skipping: exists in old and new hg, but not in libgo" + continue + fi + if cmp -s ${old} ${libgo}; then + # The libgo file is unchanged from the old version. + if cmp -s ${new} ${libgo}; then + # File is unchanged from old to new version. + continue + fi + # Update file in libgo. + echo "merge.sh: $name: updating" + cp ${new} ${libgo} + else + # The libgo file has local changes. + set +e + diff3 -m -E ${libgo} ${old} ${new} > ${libgo}.tmp + status=$? + set -e + case $status in + 0) + echo "merge.sh: $name: updating" + mv ${libgo}.tmp ${libgo} + ;; + 1) + echo "merge.sh: $name: CONFLICTS" + mv ${libgo}.tmp ${libgo} + hg resolve -u ${libgo} + ;; + *) + echo 1>&2 "merge.sh: $name: diff3 failure" + exit 1 + ;; + esac + fi + else + # The file does not exist in the old version. + if test -f ${libgo}; then + if ! cmp -s ${new} ${libgo}; then + echo 1>&2 "merge.sh: $name: IN NEW AND LIBGO BUT NOT OLD" + fi + else + echo "merge.sh: $name: NEW" + dir=`dirname ${libgo}` + if ! test -d ${dir}; then + mkdir -p ${dir} + fi + cp ${new} ${libgo} + hg add ${libgo} + fi + fi +} + +merge_c() { + from=$1 + to=$2 + oldfile=${OLDDIR}/src/pkg/runtime/$from + if test -f ${oldfile}; then + sed -e 's/·/_/g' < ${oldfile} > ${oldfile}.tmp + oldfile=${oldfile}.tmp + newfile=${NEWDIR}/src/pkg/runtime/$from + sed -e 's/·/_/g' < ${newfile} > ${newfile}.tmp + newfile=${newfile}.tmp + libgofile=runtime/$to + merge $from ${oldfile} ${newfile} ${libgofile} + fi +} + +(cd ${NEWDIR}/src/pkg && find . -name '*.go' -print) | while read f; do + oldfile=${OLDDIR}/src/pkg/$f + newfile=${NEWDIR}/src/pkg/$f + libgofile=go/$f + merge $f ${oldfile} ${newfile} ${libgofile} +done + +(cd ${NEWDIR}/src/pkg && find . -name testdata -print) | while read d; do + oldtd=${OLDDIR}/src/pkg/$d + newtd=${NEWDIR}/src/pkg/$d + libgotd=go/$d + if ! test -d ${oldtd}; then + continue + fi + (cd ${oldtd} && hg status -A .) | while read f; do + if test "`basename $f`" = ".hgignore"; then + continue + fi + f=`echo $f | sed -e 's/^..//'` + name=$d/$f + oldfile=${oldtd}/$f + newfile=${newtd}/$f + libgofile=${libgotd}/$f + merge ${name} ${oldfile} ${newfile} ${libgofile} + done +done + +runtime="chan.c cpuprof.c env_posix.c lock_futex.c lock_sema.c mcache.c mcentral.c mfinal.c mfixalloc.c mgc0.c mgc0.h mheap.c msize.c panic.c print.c proc.c race.h runtime.c runtime.h signal_unix.c malloc.h malloc.goc mprof.goc parfor.c runtime1.goc sema.goc sigqueue.goc string.goc time.goc" +for f in $runtime; do + merge_c $f $f +done + +merge_c thread_linux.c thread-linux.c +merge_c mem_linux.c mem.c + +(cd ${OLDDIR}/src/pkg && find . -name '*.go' -print) | while read f; do + oldfile=${OLDDIR}/src/pkg/$f + newfile=${NEWDIR}/src/pkg/$f + libgofile=go/$f + if test -f ${newfile}; then + continue + fi + if ! test -f ${libgofile}; then + continue + fi + echo "merge.sh: ${libgofile}: REMOVED" + rm -f ${libgofile} + hg rm ${libgofile} +done + +(echo ${new_rev}; sed -ne '2,$p' MERGE) > MERGE.tmp +mv MERGE.tmp MERGE |