#!/bin/bash

# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Downloads the latest buildbot image and prints the path to it.
# This script only works if you have access to buildbot images.

# --- BEGIN COMMON.SH BOILERPLATE ---
# Load common CrOS utilities.  Inside the chroot this file is installed in
# /usr/lib/crosutils.  Outside the chroot we find it relative to the script's
# location.
find_common_sh() {
  local common_paths=(/usr/lib/crosutils $(dirname "$(readlink -f "$0")"))
  local path

  SCRIPT_ROOT=
  for path in "${common_paths[@]}"; do
    if [ -r "${path}/common.sh" ]; then
      SCRIPT_ROOT=${path}
      break
    fi
  done
}

find_common_sh
. "${SCRIPT_ROOT}/common.sh" || { echo "Unable to load common.sh"; exit 1; }
# --- END COMMON.SH BOILERPLATE ---

get_default_board

DEFINE_string board "$DEFAULT_BOARD" \
  "The name of the board to check for images."
DEFINE_boolean incremental "$FLAGS_FALSE" "Download incremental build"
DEFINE_boolean enable_rootfs_verification "${FLAGS_TRUE}" \
  "Enable rootfs verification for the downloaded image."

# Parse command line flags.
FLAGS "$@" || exit 1
eval set -- "$FLAGS_ARGV"

# Check on the board that they are trying to set up.
if [ -z "$FLAGS_board" ] ; then
  die "Error: --board required."
fi

BUCKET="chromeos-image-archive"
if [ $FLAGS_board = x86-generic ]; then
  if [ "$FLAGS_incremental" -eq "$FLAGS_TRUE" ]; then
    PATH_PREFIX="x86-generic-pre-flight-queue"
  else
    PATH_PREFIX="x86-generic-full"
  fi
else
  PATH_PREFIX="${FLAGS_board}-release"
fi

URL_PREFIX="gs://$BUCKET/$PATH_PREFIX"
LATEST_BUILD=$(gsutil cat $URL_PREFIX/LATEST)
IMAGES_DIR="$DEFAULT_BUILD_ROOT/images/$FLAGS_board"
LATEST_IMAGE_DIR="$IMAGES_DIR/$LATEST_BUILD"
if [ ! -e $LATEST_IMAGE_DIR/chromiumos_base_image.bin ]; then
  mkdir -p $LATEST_IMAGE_DIR
  gsutil cp "$URL_PREFIX/$LATEST_BUILD/image.zip" \
      "$LATEST_IMAGE_DIR/image.zip" || die "Could not download image.zip"
  ( cd $LATEST_IMAGE_DIR && unzip -qo image.zip ) \
      || die "Could not unzip image.zip"
fi

IMAGE_NAME=chromiumos_qemu_image.bin
IMAGE_FILE="${LATEST_IMAGE_DIR}"/"${IMAGE_NAME}"
ESP_DIR="${LATEST_IMAGE_DIR}/esp"

cleanup() {
  "$SCRIPTS_DIR/mount_gpt_image.sh" -u -e "${ESP_DIR}"
}

# This might seem a bit strange, but rootfs verification is already on with the
# image, the only reason we've named this flag 'enable_rootfs_verfication'
# versus 'disable_xyz' is to stay constant with the
# 'noenable_rootfs_verification' flag used in build image to disable it.
if [ "${FLAGS_enable_rootfs_verification}" -eq "${FLAGS_FALSE}" ] ; then
  trap cleanup INT TERM EXIT
  # We only need to touch the ESP part
  "$SCRIPTS_DIR/mount_gpt_image.sh" -i chromiumos_qemu_image.bin \
    -f "${LATEST_IMAGE_DIR}" -e "${ESP_DIR}"

  # Change the default to boot from the usb instead of vusb, usb is set
  # to boot from /dev/sda
  sudo sed -i -e 's/vusb/usb/g' "${ESP_DIR}/syslinux/default.cfg"

  sync; sync
fi

echo $LATEST_IMAGE_DIR
exit 0
