#!/bin/bash
set -e

read oldrev newrev head
if [ $head != 'refs/heads/dev' ]; then
  echo "error: head not recognized: $head" >&2
  exit 1
fi
if read; then
  echo "error: one update at a time, please" >&2
  exit 1
fi

tmpdir=$(mktemp -d /tmp/xvm-git-XXXXXX)
echo "build directory $tmpdir"

# XXX fixme
sbuild () { echo "  SBUILD" "$@"; }

build_package () {
  packagepath=$1
  rev=$2

  package=${packagepath#packages/}
  url=$(git config -f $tmpdir/git/.gitmodules submodule.$packagepath.url)
  echo "building $package at new version $rev"

  srcdir=$tmpdir/$package
  mkdir $srcdir
  # XXX remove that .git -- be sure to include it in `git submodule add`
  git --git-dir=$url.git archive $rev | tar -xf - -C $srcdir
  pushd $srcdir >/dev/null

  eval $(perl -ne 'print if s/^(Version|Source|Distribution): /\1=/' \
           <(dpkg-parsechangelog))
  dpkg-buildpackage -us -uc -rfakeroot -S
  cd ..

  eval $(perl -ne 'print if s/^(Architecture): /\1=/' ${Source}_${Version}.dsc)
  case $Architecture in
    all)
      sbuild -d $distribution --arch-all   ${Source}_${Version}.dsc;;
    any)
      sbuild -d $distribution --arch amd64 --arch-all ${Source}_${Version}.dsc
      sbuild -d $distribution --arch i386  ${Source}_${Version}.dsc;;
    *)
      echo "build-pre-receive: arch '$Architecture' unimplemented" >&2
      exit 1
  esac

  echo "XXX tag submodule as $Version"

  [ $Distribution = 'unstable' ] \
      || echo "$(basename $0): warning: Distribution is $Distribution, script expects unstable"

  echo "built $package version $Version from commit $rev"
  popd >/dev/null
}

git clone . $tmpdir/git

git ls-tree $newrev packages/ \
 | grep ^160000\ commit \
 | while read x y newsubrev packagepath; do
     # XXX deal with new packages
     # XX deal with removed packages
     oldsubrev=$(git ls-tree $oldrev $packagepath | perl -lane 'print $F[2]')
     if [ $newsubrev == $oldsubrev ]; then
       continue
     fi

     build_package $packagepath $newsubrev
   done


exit 0

for package; do
    changesfile=`pwd`/${Source}_*${Version}*.changes
    for i in $changesfile; do
        reprepro-env include unstable $i
        reprepro-env copy stable unstable $(sed -ne 's/^Binary: //p' $i)
    done
    reprepro-env copy stable unstable $Source
    
    cd ..
    rm -rf build-release/$package
done
