#!/bin/bash
# -*- coding: utf-8 -*-
# rpmdev-diff -- Diff contents of two archives
#
# Copyright (c) 2004-2007 Fedora Project .
# Author: Ville Skyttä
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
set -e
unset CDPATH
tmpdir=
diffopts=
list=
trap cleanup EXIT
cleanup()
{
set +e
[ -z "$tmpdir" -o ! -d "$tmpdir" ] || rm -rf "$tmpdir"
}
version()
{
cat <.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Written by Ville Skyttä.
EOF
}
help()
{
cat <."
}
usage()
{
cat <&2 ||
echo "Error: file does not exist: '$file'" >&2
exit 1
fi
done
diffopts="-r ${diffopts:--Nu}"
tmpdir=`mktemp -d /tmp/rpmdev-diff.XXXXXX`
mkdir "$tmpdir/old" "$tmpdir/new"
rpmdev-extract -q -C "$tmpdir/old" "$1"
rpmdev-extract -q -C "$tmpdir/new" "$2"
# It would be nice if rpmdev-extract could do some of the chmods.
find "$tmpdir"/* -type d -exec chmod u+rx {} ';' # Note: -exec, not xargs here.
chmod -R u+rw "$tmpdir"/*
cd "$tmpdir"
# Did the archives uncompress into base dirs?
if [ `ls -1d old/* | wc -l` -eq 1 ] ; then
old=`ls -1d old/*`
else
old=old
fi
if [ `ls -1d new/* | wc -l` -eq 1 ] ; then
new=`ls -1d new/*`
else
new=new
fi
# Fixup base dirs to the same level.
if [ `basename "$old"` != `basename "$new"` ] ; then
if [ "$old" != old ] ; then
mv "$old" .
old=`basename "$old"`
fi
if [ "$new" != new ] ; then
mv "$new" .
new=`basename "$new"`
fi
fi
# Here we go.
if [ -n "$list" ] ; then
find "$old" | sort | cut -d/ -f 2- -s > "$old.files"
find "$new" | sort | cut -d/ -f 2- -s > "$new.files"
diff $diffopts "$old.files" "$new.files"
else
diff $diffopts "$old" "$new"
fi