#!/bin/bash

. $ISO_SOURCE/conf/modules.bootstrap

mkdir -p "$ISO_SOURCE/cache"

NEED_MODULES=
LUNAR_CACHE=`lsh echo '$INSTALL_CACHE'`
NEED_CACHE=
NO_CACHE=

# make a list of all the required caches
for mod in $BOOTSTRAP_MODULES ; do
  # if this module isn't installed it probebly isn't required
  if lsh module_installed $mod ; then
    NEED_MODULES="$NEED_MODULES $mod"
    for dep in `lvu links $mod` ; do
      MODULE_NAME="$dep"
      # find the correct name of this module
      while echo "$MODULE_NAME" | grep -q - ; do
        MODULE_NAME=${MODULE_NAME%-*}
        lsh module_installed $MODULE_NAME && break
      done || continue
      NEED_MODULES="$NEED_MODULES $MODULE_NAME"
    done
  fi
done

# make a unique list of module
NEED_MODULES=`for mod in $NEED_MODULES ; do echo $mod ; done | sort -u | grep -v '^moonbase$'`

echo Required modules:
for mod in $NEED_MODULES ; do
  echo " $mod"
done

for mod in $NEED_MODULES ; do
  # check for cache file presence
  MODULE_VERSION=`lsh installed_version $mod`
  CACHE="$mod-$MODULE_VERSION-$ISO_BUILD.tar.xz"
  if [ ! -f "$ISO_SOURCE/cache/$CACHE" ] ; then
    cp "$LUNAR_CACHE/$CACHE" "$ISO_SOURCE/cache/$CACHE" && echo "$mod:$(date --date=@$(stat -c%Z $LUNAR_CACHE/$CACHE) +%Y%m%d):installed:$MODULE_VERSION:0KB" >> "$ISO_SOURCE/cache/packages" || NEED_CACHE="$NEED_CACHE $mod"
  fi
done

if [ -z "$NEED_CACHE" ] ; then
  exit 0
fi

echo Rebuild modules to create cache:
for mod in $NEED_CACHE ; do
  echo " $mod"
done

if [ -n "$REBUILD_MANUAL" ] ; then
  exit 1
fi

OLD_ARCHIVE=`lunar set ACHIVE`
OLD_COMPRESS_METHOD=`lunar set COMPRESS_METHOD`
lunar set ARCHIVE on
lunar set COMPRESS_METHOD xz
lin -c $NEED_CACHE
OLD_ARCHIVE=${OLD_ARCHIVE#*=}
if [ -z "$OLD_ARCHIVE" ] ; then
  lunar unset ARCHIVE
else
  lunar set ARCHIVE $OLD_ARCHIVE
fi
OLD_COMPRESS_METHOD=${OLD_COMPRESS_METHOD#*=}
if [ -z "$OLD_COMPRESS_METHOD" ] ; then
  lunar unset COMPRESS_METHOD
else
  lunar set COMPRESS_METHOD $OLD_COMPRESS_METHOD
fi

for mod in $NEED_CACHE ; do
  # check for cache file presence
  CACHE="$mod-$(lsh installed_version $mod)-$ISO_BUILD.tar.xz"
  if [ ! -f "$ISO_SOURCE/cache/$CACHE" ] ; then
    cp "$LUNAR_CACHE/$CACHE" "$ISO_SOURCE/cache/$CACHE" && echo "$mod:$(date --date=@$(stat -c%Z $LUNAR_CACHE/$CACHE) +%Y%m%d):installed:$MODULE_VERSION:0KB" >> "$ISO_SOURCE/cache/packages" || NO_CACHE="$NO_CACHE $mod"
  fi
done

if [ -z "$NO_CACHE" ] ; then
  exit 0
fi

echo No module cache files:
for mod in $NO_CACHE ; do
  echo " $mod"
done

exit 1
