#!/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"

# 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

IMAGES_DIR="${DEFAULT_BUILD_ROOT}/images/${FLAGS_board}"

if [ $FLAGS_board = x86-generic ]; then
  if [ "$FLAGS_incremental" -eq "$FLAGS_TRUE" ]; then
    URL_PREFIX="https://sandbox.google.com/storage/chromeos-archive/x86-generic-bin"
  else
    URL_PREFIX="https://sandbox.google.com/storage/chromeos-archive/x86-generic-rel"
  fi
else
  die "Unrecognized board: $FLAGS_board"
fi

read -p "Username [${LOGNAME}]: " GSDCURL_USERNAME
export GSDCURL_USERNAME
read -s -p "Password: " GSDCURL_PASSWORD
echo >&2   # ... because read -s didn't print a newline
export GSDCURL_PASSWORD

LATEST_BUILD=$(bin/cros_gsdcurl.py -s $URL_PREFIX/LATEST)
LATEST_IMAGE_DIR="$IMAGES_DIR/$LATEST_BUILD"
if [ ! -e $LATEST_IMAGE_DIR/chromiumos_base_image.bin ]; then
  mkdir -p $LATEST_IMAGE_DIR
  bin/cros_gsdcurl.py $URL_PREFIX/$LATEST_BUILD/image.zip -o \
      $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

echo $LATEST_IMAGE_DIR
exit 0
