f7b99ca7f6
Reviewed-by: ohair
336 lines
9.6 KiB
Bash
336 lines
9.6 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# This code is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License version 2 only, as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This code is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# version 2 for more details (a copy is included in the LICENSE file that
|
|
# accompanied this code).
|
|
#
|
|
# You should have received a copy of the GNU General Public License version
|
|
# 2 along with this work; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
# or visit www.oracle.com if you need additional information or have any
|
|
# questions.
|
|
#
|
|
|
|
# MANUAL
|
|
#
|
|
# ./common/bin/compareimages.sh old_jdk_image new_jdk_image
|
|
#
|
|
# Compare the directory structure.
|
|
# Compare the filenames in the directories.
|
|
# Compare the contents of the zip archives
|
|
# Compare the contents of the jar archives
|
|
# Compare the native libraries
|
|
# Compare the native executables
|
|
# Compare the remaining files
|
|
#
|
|
# ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]
|
|
#
|
|
# Compare only the selected subset of the images.
|
|
#
|
|
# ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar
|
|
#
|
|
# Compare only the CodePointIM.jar file
|
|
# Can be used to compare zips, libraries and executables.
|
|
#
|
|
|
|
if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then
|
|
echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image"
|
|
echo ""
|
|
echo "Compare the directory structure."
|
|
echo "Compare the filenames in the directories."
|
|
echo "Compare the contents of the zip archives"
|
|
echo "Compare the contents of the jar archives"
|
|
echo "Compare the native libraries"
|
|
echo "Compare the native executables"
|
|
echo "Compare the remaining files"
|
|
echo ""
|
|
echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]"
|
|
echo ""
|
|
echo "Compare only the selected subset of the images."
|
|
echo ""
|
|
echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar"
|
|
echo ""
|
|
echo "Compare only the CodePointIM.jar file"
|
|
echo "Can be used to compare zips, libraries and executables."
|
|
exit 10
|
|
fi
|
|
|
|
OLD="$1"
|
|
NEW="$2"
|
|
CMD="$3"
|
|
|
|
DIFF_RESULT=0
|
|
|
|
CMP_ZIPS=false
|
|
CMP_JARS=false
|
|
CMP_LIBS=false
|
|
CMP_EXECS=false
|
|
CMP_OTHER=false
|
|
|
|
FILTER="cat"
|
|
|
|
if [ -n "$CMD" ]; then
|
|
case "$CMD" in
|
|
zips)
|
|
CMP_ZIPS=true
|
|
;;
|
|
jars)
|
|
CMP_JARS=true
|
|
;;
|
|
libs)
|
|
CMP_LIBS=true
|
|
;;
|
|
execs)
|
|
CMP_EXECS=true
|
|
;;
|
|
other)
|
|
CMP_OTHER=true
|
|
;;
|
|
*)
|
|
CMP_ZIPS=true
|
|
CMP_JARS=true
|
|
CMP_LIBS=true
|
|
CMP_EXECS=true
|
|
CMP_OTHER=true
|
|
FILTER="grep $3"
|
|
;;
|
|
esac
|
|
else
|
|
CMP_ZIPS=true
|
|
CMP_JARS=true
|
|
CMP_LIBS=true
|
|
CMP_EXECS=true
|
|
CMP_OTHER=true
|
|
fi
|
|
|
|
DIFFJARZIP="/bin/bash `dirname $0`/diffjarzip.sh"
|
|
DIFFLIB="/bin/bash `dirname $0`/difflib.sh"
|
|
DIFFEXEC="/bin/bash `dirname $0`/diffexec.sh"
|
|
export COMPARE_ROOT=/tmp/cimages.$USER
|
|
mkdir -p $COMPARE_ROOT
|
|
|
|
# Load the correct exception list.
|
|
case "`uname -s`" in
|
|
Linux)
|
|
. `dirname $0`/exception_list_linux
|
|
;;
|
|
esac
|
|
|
|
echo
|
|
echo Comparing $OLD to $NEW
|
|
echo
|
|
|
|
(cd $OLD && find . -type d | sort > $COMPARE_ROOT/from_dirs)
|
|
(cd $NEW && find . -type d | sort > $COMPARE_ROOT/to_dirs)
|
|
|
|
echo -n Directory structure...
|
|
if diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs > /dev/null; then
|
|
echo Identical!
|
|
else
|
|
echo Differences found.
|
|
DIFF_RESULT=1
|
|
# Differences in directories found.
|
|
ONLY_OLD=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '<')
|
|
if [ "$ONLY_OLD" ]; then
|
|
echo Only in $OLD
|
|
echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g'
|
|
fi
|
|
# Differences in directories found.
|
|
ONLY_NEW=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '>')
|
|
if [ "$ONLY_NEW" ]; then
|
|
echo Only in $NEW
|
|
echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g'
|
|
fi
|
|
fi
|
|
|
|
(cd $OLD && find . -type f | sort > $COMPARE_ROOT/from_files)
|
|
(cd $NEW && find . -type f | sort > $COMPARE_ROOT/to_files)
|
|
|
|
echo -n File names...
|
|
if diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files > /dev/null; then
|
|
echo Identical!
|
|
else
|
|
echo Differences found.
|
|
DIFF_RESULT=1
|
|
# Differences in directories found.
|
|
ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<')
|
|
if [ "$ONLY_OLD" ]; then
|
|
echo Only in $OLD
|
|
echo "$ONLY_OLD" | sed 's|< ./| |g'
|
|
fi
|
|
# Differences in directories found.
|
|
ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>')
|
|
if [ "$ONLY_NEW" ]; then
|
|
echo Only in $NEW
|
|
echo "$ONLY_NEW" | sed 's|> ./| |g'
|
|
fi
|
|
fi
|
|
|
|
echo -n Permissions...
|
|
found=""
|
|
for f in `cd $OLD && find . -type f`
|
|
do
|
|
if [ ! -f ${OLD}/$f ]; then continue; fi
|
|
if [ ! -f ${NEW}/$f ]; then continue; fi
|
|
OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'`
|
|
NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'`
|
|
if [ "$OP" != "$NP" ]
|
|
then
|
|
if [ -z "$found" ]; then echo ; found="yes"; fi
|
|
printf "\told: ${OP} new: ${NP}\t$f\n"
|
|
fi
|
|
|
|
OF=`cd ${OLD} && file $f`
|
|
NF=`cd ${NEW} && file $f`
|
|
if [ "$f" = "./src.zip" ]
|
|
then
|
|
if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ]
|
|
then
|
|
# the way we produces zip-files make it so that directories are stored in old file
|
|
# but not in new (only files with full-path)
|
|
# this makes file-5.09 report them as different
|
|
continue;
|
|
fi
|
|
fi
|
|
|
|
if [ "$OF" != "$NF" ]
|
|
then
|
|
if [ -z "$found" ]; then echo ; found="yes"; fi
|
|
printf "\tFILE: old: ${OF} new: ${NF}\t$f\n"
|
|
fi
|
|
done
|
|
if [ -z "$found" ]; then echo ; found="yes"; fi
|
|
|
|
GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \
|
|
! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \
|
|
! -name "ct.sym" ! -name "*.diz" \
|
|
| grep -v "./bin/" | sort | $FILTER)
|
|
echo General files...
|
|
for f in $GENERAL_FILES
|
|
do
|
|
if [ -e $NEW/$f ]; then
|
|
DIFF_OUT=$(diff $OLD/$f $NEW/$f 2>&1)
|
|
if [ -n "$DIFF_OUT" ]; then
|
|
echo $f
|
|
echo "$DIFF_OUT"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
if [ "x$CMP_ZIPS" == "xtrue" ]; then
|
|
ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER)
|
|
|
|
if [ -n "$ZIPS" ]; then
|
|
echo Zip files...
|
|
|
|
for f in $ZIPS
|
|
do
|
|
$DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW
|
|
if [ "$?" != "0" ]; then
|
|
DIFF_RESULT=1
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ "x$CMP_JARS" == "xtrue" ]; then
|
|
JARS=$(cd $OLD && find . -type f -name "*.jar" -o -name "ct.sym" | sort | $FILTER)
|
|
|
|
if [ -n "$JARS" ]; then
|
|
echo Jar files...
|
|
|
|
for f in $JARS
|
|
do
|
|
DIFFJAR_OUTPUT=`$DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW`
|
|
DIFFJAR_RESULT=$?
|
|
if [ "$DIFFJAR_RESULT" != "0" ]; then
|
|
for diff in $LIST_DIFF_JAR; do
|
|
DIFFJAR_OUTPUT=`echo "$DIFFJAR_OUTPUT" | grep -v "$diff"`
|
|
done
|
|
if [ "`echo "$DIFFJAR_OUTPUT" | grep -v "Differing files in"`" != "" ]; then
|
|
DIFF_RESULT=1
|
|
echo "$DIFFJAR_OUTPUT"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ "x$FILTER" != "xcat" ]; then
|
|
VIEW=view
|
|
else
|
|
VIEW=
|
|
fi
|
|
|
|
if [ "x$CMP_LIBS" == "xtrue" ]; then
|
|
LIBS=$(cd $OLD && find . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | sort | $FILTER)
|
|
|
|
if [ -n "$LIBS" ]; then
|
|
echo Libraries...
|
|
for f in $LIBS
|
|
do
|
|
DIFFLIB_OUTPUT=`$DIFFLIB $OLD/$f $NEW/$f $OLD $NEW $VIEW`
|
|
DIFFLIB_RESULT=$?
|
|
if [ "$DIFFLIB_RESULT" = "0" ]; then
|
|
:
|
|
#echo "OK: $DIFFLIB_OUTPUT"
|
|
elif [ "$DIFFLIB_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
|
|
:
|
|
#echo "OK: $DIFFLIB_OUTPUT"
|
|
elif [ "$DIFFLIB_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
|
|
:
|
|
#echo "OK: $DIFFLIB_OUTPUT"
|
|
else
|
|
echo "$DIFFLIB_OUTPUT"
|
|
DIFF_RESULT=1
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ "x$CMP_EXECS" == "xtrue" ]; then
|
|
if [ $OSTYPE == "cygwin" ]; then
|
|
EXECS=$(cd $OLD && find . -type f -name '*.exe' | sort | $FILTER)
|
|
else
|
|
EXECS=$(cd $OLD && find . -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' \) | sort | $FILTER)
|
|
fi
|
|
|
|
|
|
if [ -n "$EXECS" ]; then
|
|
echo Executables...
|
|
|
|
for f in $EXECS
|
|
do
|
|
DIFFEXEC_OUTPUT=`$DIFFEXEC $OLD/$f $NEW/$f $OLD $NEW $VIEW`
|
|
DIFFEXEC_RESULT=$?
|
|
if [ "$DIFFEXEC_RESULT" = "0" ]; then
|
|
:
|
|
#echo "OK: $DIFFEXEC_OUTPUT"
|
|
elif [ "$DIFFEXEC_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
|
|
:
|
|
#echo "OK: $DIFFEXEC_OUTPUT"
|
|
elif [ "$DIFFEXEC_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
|
|
:
|
|
#echo "OK: $DIFFEXEC_OUTPUT"
|
|
else
|
|
echo "$DIFFEXEC_OUTPUT"
|
|
DIFF_RESULT=1
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
exit $DIFF_RESULT
|