#!/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
### take a snapshot of all built Fuchsia packages

## usage: fx save-package-stats [--build] [[--name|-n NAME] | [OUTPUT_PATH]]
##
## Save a snapshot of metadata of all Fuchsia packages for later analysis.
##   --build          Build the current package snapshot before saving it
##   --name|-n NAME   Set the NAME of the package snapshot (Default: "system")
##   OUTPUT_PATH      Write the snapshot at the specified OUTPUT_PATH (Default: $FUCHSIA_BUILD_DIR/snapshots/$NAME.snapshot)

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

function usage {
  fx-command-help save-package-stats
}

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

  snapshot_dir="$FUCHSIA_BUILD_DIR/snapshots"

  build=0
  target_name=
  output_path=
  while [[ $# -ne 0 ]]; do
    case "$1" in
      --build)
        build=1
        ;;
      -n|--name)
        target_name="$2"
        shift
        ;;
      *)
        if [[ -z "${output_path}" ]]; then
          output_path="$1"
        else
          echo >&2 "Multiple output paths specified"
          usage
          exit 1
        fi
    esac
    shift
  done

  if [[ -n "${target_name}" && -n "${output_path}" ]]; then
    echo >&2 "Output name and output path can not both specified"
    usage
    exit 1
  elif [[ -z "${target_name}" ]]; then
    target_name="system"
  fi

  if [[ -z "${output_path}" ]]; then
    mkdir -p "$snapshot_dir" || exit 1
    output_path="${snapshot_dir}/${target_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

  cp \
    "${FUCHSIA_BUILD_DIR}/obj/build/images/system.snapshot" \
    "${output_path}"
}

main "$@"
