You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cassandra.apache.org by Stephen Connolly <st...@gmail.com> on 2010/12/21 23:41:40 UTC

Handy script to check the contents of jar files to see if the classes are the same despite being different compilers

#!/bin/bash

if [ $# != 2 ] ; then
  echo "Syntax: $0 name1.jar name2.jar"
  exit
fi

if diff $1 $2 ; then
  echo Files are identical
  exit 0
fi

work=$(mktemp -d)

mkdir -p "$work/a"
mkdir -p "$work/b"

cwd="$(pwd)"

cd "$work/a"
unzip "$cwd/$1" | sort > "$work/a.list"
cd "$work/b"
unzip "$cwd/$2" | sort > "$work/b.list"
cd "$work"

if ! diff a.list b.list > diff.list ; then echo "Contents"; echo =====; cat
diff.list; echo ""; echo "Contents are different" > summary; fi

for class in $(find a -name \*.class | sed -e
"s:^\\a/::;s:\\.class$::;s:/:.:g"); do javap -c -classpath a $class >
a.javap; javap -c -classpath b $class > b.javap; if ! diff a.javap b.javap >
diff.javap ; then echo $class; echo =====; cat diff.javap; echo ""; echo
$class >> summary; fi; done

if [ -f summary ]; then
echo "Summary"
echo "======="
cat summary
else
  echo "File contents are identical"
fi

cd "$cwd"
rm -rf "$work"

Re: Handy script to check the contents of jar files to see if the classes are the same despite being different compilers

Posted by Stephen Connolly <st...@gmail.com>.
Can be helpful with CASSANDRA-1888

On 21 December 2010 22:41, Stephen Connolly <stephen.alan.connolly@gmail.com
> wrote:

> #!/bin/bash
>
> if [ $# != 2 ] ; then
>   echo "Syntax: $0 name1.jar name2.jar"
>   exit
> fi
>
> if diff $1 $2 ; then
>   echo Files are identical
>   exit 0
> fi
>
> work=$(mktemp -d)
>
> mkdir -p "$work/a"
> mkdir -p "$work/b"
>
> cwd="$(pwd)"
>
> cd "$work/a"
> unzip "$cwd/$1" | sort > "$work/a.list"
> cd "$work/b"
> unzip "$cwd/$2" | sort > "$work/b.list"
> cd "$work"
>
> if ! diff a.list b.list > diff.list ; then echo "Contents"; echo =====; cat
> diff.list; echo ""; echo "Contents are different" > summary; fi
>
> for class in $(find a -name \*.class | sed -e
> "s:^\\a/::;s:\\.class$::;s:/:.:g"); do javap -c -classpath a $class >
> a.javap; javap -c -classpath b $class > b.javap; if ! diff a.javap b.javap >
> diff.javap ; then echo $class; echo =====; cat diff.javap; echo ""; echo
> $class >> summary; fi; done
>
> if [ -f summary ]; then
> echo "Summary"
> echo "======="
> cat summary
> else
>   echo "File contents are identical"
> fi
>
> cd "$cwd"
> rm -rf "$work"
>
>