#!/bin/bash

#
# This script is called automatically on every `composer update`.
# See "post-update-cmd" in the "scripts" section of composer.json.
#
# This script will create a derived composer.json / composer.lock
# pair for every test scenario.  Test scenarios are defined in the
# "scenarios" file, which should be customized to suit the needs
# of the project.
#

SELF_DIRNAME="`dirname -- "$0"`"
source ${SELF_DIRNAME}/scenarios

echo
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "::"
echo ":: Update dependencies for the following scenarios:"
echo "::"
echo "::    ${SCENARIOS}"
echo "::"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo

set -ex

for SCENARIO in ${SCENARIOS} ; do

  dir=dependencies/${SCENARIO}

  # Define indirect variable names
  stability_variable="stability_${SCENARIO}"
  requirement_variable="requirement_${SCENARIO}"
  platform_php_variable="platform_php_${SCENARIO}"

  echo "### Create $dir/composer.json for ${SCENARIO} scenario"
  mkdir -p $dir
  cp composer.json $dir

  # Then set our own platform php version if applicable (otherwise unset it)
  composer -n --working-dir=$dir config platform.php "${!platform_php_variable---unset}"

  # Temporarily set our vendor directory to 'vendor'
  composer -n --working-dir=$dir config vendor-dir vendor

  # Set an appropriate minimum stability for this version of Symfony
  composer -n --working-dir=$dir config minimum-stability "${!stability_variable-stable}"

  # Add a constraint to limit the Symfony version
  composer -n --working-dir=$dir require --dev --no-update "${!requirement_variable}"

  # Create the composer.lock file. Ignore the vendor directory created.
  composer -n --working-dir=$dir update --no-scripts

  # Set the vendor directory to its final desired location.
  composer -n --working-dir=$dir config vendor-dir '../../vendor'

  # The 'autoload' section specifies directory paths that are relative
  # to the composer.json file. We will drop in some symlinks so that
  # these paths will resolve as if the composer.json were in the root.
  for target in $AUTOLOAD_DIRECTORIES ; do
    ln -s -f ../../$target $dir
  done

done
