testing/release/common/check_updates.sh
author Jesse Ruderman <jruderman@gmail.com>
Thu, 09 Oct 2008 14:23:59 -0700
changeset 20221 bad67e7ea71b69a1868632fecb0da7f779fd36cf
parent 13443 e24fd77146bcfaeff8bcfa91f16b9abb0b56cbf3
child 94475 f4157e8c410708d76703f19e4dfb61859bfe32d8
permissions -rwxr-xr-x
Add crashtest

check_updates () {
  # called with 4 args - platform, source package, target package, update package
  update_platform=$1
  source_package=$2
  target_package=$3
  locale=$4

  # cleanup
  rm -rf source/*
  rm -rf target/*

  unpack_build $update_platform source "$source_package" $locale
  if [ "$?" != "0" ]; then
    echo "FAILED: cannot unpack_build $update_platform source $source_package"
    return 1
  fi
  unpack_build $update_platform target "$target_package" $locale 
  if [ "$?" != "0" ]; then
    echo "FAILED: cannot unpack_build $update_platform target $target_package"
    return 1
  fi
  
  case $update_platform in
      Darwin_ppc-gcc | Darwin_Universal-gcc3) 
          platform_dirname="*.app"
          updater="Contents/MacOS/updater.app/Contents/MacOS/updater"
          ;;
      WINNT_x86-msvc) 
          platform_dirname="bin"
          updater="updater.exe"
          ;;
      Linux_x86-gcc | Linux_x86-gcc3) 
          platform_dirname=`echo $product | tr '[A-Z]' '[a-z]'`
          updater="updater"
          ;;
  esac

  if [ -f update/update.status ]; then rm update/update.status; fi
  if [ -f update/update.log ]; then rm update/update.log; fi

  if [ -d source/$platform_dirname ]; then
    cd source/$platform_dirname;
    cp $updater ../../update
    ../../update/updater ../../update 0
    cd ../..
  else
    echo "FAIL: no dir in source/$platform_dirname"
    return 1
  fi

  cat update/update.log
  update_status=`cat update/update.status`

  if [ "$update_status" != "succeeded" ]
  then
    echo "FAIL: update status was not succeeded: $update_status"
    return 1
  fi

  diff -r source/$platform_dirname target/$platform_dirname  > results.diff
  diffErr=$?
  cat results.diff
  grep '^Binary files' results.diff > /dev/null
  grepErr=$?
  if [ $grepErr == 0 ]
  then
    echo "FAIL: binary files found in diff"
    return 1
  elif [ $grepErr == 1 ]
  then
    if [ -s results.diff ]
    then
      echo "WARN: non-binary files found in diff"
      return 2
    fi
  else
    echo "FAIL: unknown error from grep: $grepErr"
    return 3
  fi
  if [ $diffErr != 0 ]
  then
    echo "FAIL: unknown error from diff: $diffErr"
    return 3
  fi
}