#!/bin/sh
# $Id: compare-image-directories,v 1.1 2010/01/19 13:27:13 friedman Exp $

cvt()
{
  convert "$1" -format "$2" -compress None "$3"
}

compare()
{
  local img=$1
  local old_dir=$2
  local new_dir=$3
  local cmp_dir=$4

  local base=${img%.*}
  local fmt=ppm

  local old=$cmp_dir/old-$base.$fmt
  local new=$cmp_dir/new-$base.$fmt

  cvt "$old_dir/$img" $fmt "$old"
  cvt "$new_dir/$img" $fmt "$new"

  cmp -s "$old" "$new"
  local result=$?

  case $result in
    0 ) rm -f "$old" "$new" ;;
    * ) echo differs: $img
        return $result ;;
  esac
}

compare_dirs()
{
  local old_dir=$1
  local new_dir=$2
  local cmp_dir=compare$$

  mkdir -p "$cmp_dir"

  for img in $old_dir/*; do
    img=${img##*/}

    test -f "$new_dir/$img" || continue
    compare "$img" "$old_dir" "$new_dir" "$cmp_dir"
  done

  rmdir $cmp_dir 2> /dev/null
  if [ -d $cmp_dir ]; then
    echo Differed bitmaps left in $cmp_dir 1>&2
  fi
}

main()
{
  case $# in
    2 ) : ;;
    * ) echo Usage: ${0##*/} '[old_dir]' '[new_dir]' 1>&2
        exit 1 ;;
  esac

  compare_dirs "$@"
}

main "$@"

# eof
