#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Software delivery
### compare all built Fuchsia packages with a prior package snapshot

## usage: fx delta [[--name|-n NAME] | [--source|-s PATH]] [--build] [--help-delta] [DELTA_ARGS...]
##
## Compare metadata of all Fuchsia packages with a prior package snapshot.
##   --name|-n NAME   Set the NAME of the source package snapshot (Default: "system")
##   --source|-s PATH Read the source snapshot from the specified PATH (Default: $FUCHSIA_BUILD_DIR/snapshots/$NAME.snapshot)
##   --help-delta     Show command line help for "pm delta"
##   --build          Build the current package snapshot before comparing it to the previously saved snapshot
##   DELTA_ARGS       Unknown arguments are passed through to "pm delta"

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read

pm_bin="${FUCHSIA_BUILD_DIR}/host-tools/pm"

function usage {
  fx-command-help delta

  echo
  "${pm_bin}" delta --help
}

function main {
  fx-standard-switches "$@"
  set -- "${FX_ARGV[@]}"

  snapshot_dir="$FUCHSIA_BUILD_DIR/snapshots"
  target_path="$FUCHSIA_BUILD_DIR/obj/build/images/system.snapshot"

  build=0
  delta_args=()
  source_name=
  source_path=
  while [[ $# -ne 0 ]]; do
    case "$1" in
      --build)
        build=1
        ;;
      -n|--name)
        source_name="$2"
        shift
        ;;
      -s|--source)
        source_path="$2"
        shift
        ;;
      --help-delta)
        usage
        exit 0
        ;;
      *)
        delta_args+=("$1")
    esac
    shift
  done

  if [[ -n "${source_name}" && -n "${source_path}" ]]; then
    echo >&2 "Source name and source path can not both specified"
    usage
    exit 1
  elif [[ -z "${source_name}" ]]; then
    source_name="system"
  fi

  if [[ -z "${source_path}" ]]; then
    source_path="${snapshot_dir}/${source_name}.snapshot"
  fi

  if [[ "${build}" -ne 0 ]]; then
    fx-command-run build system_snapshot || {
      echo >&2 "Build of current package state failed, bailing out"
      exit 1
    }
  fi

  "${pm_bin}" delta "${delta_args[@]}" "${source_path}" "${target_path}"
}

main "$@"
