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

# ---------------------------------- NOTE ---------------------------------- #
#
# Please keep the logic in this file consistent with the logic in the
# `content_aware_hash.ps1` script in the same directory to ensure that Flutter
# continues to work across all platforms!
#
# -------------------------------------------------------------------------- #

set -e

FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")"

unset GIT_DIR
unset GIT_INDEX_FILE
unset GIT_WORK_TREE

# Cannot use '*' for files in this command
# DEPS: tracks third party dependencies related to building the engine
# engine: all the code in the engine folder
# bin/internal/release-candidate-branch.version: release marker
TRACKEDFILES=(DEPS engine bin/internal/release-candidate-branch.version)
BASEREF="HEAD"
CURRENT_BRANCH="$(git -C "$FLUTTER_ROOT" rev-parse --abbrev-ref HEAD)"

# By default, the content hash is based on HEAD.
# For local development branches, we want to base the hash on the merge-base
# with the remote tracking branch, so that we don't rebuild the world every
# time we make a change to the engine.
#
# The following conditions are exceptions where we want to use HEAD.
# 1. The current branch is a release branch (main, master, stable, beta).
# 2. The current branch is a GitHub temporary merge branch.
# 3. The current branch is a release candidate branch.
# 4. The current checkout is a shallow clone.
# 5. There is no current branch. E.g. running on CI/CD.
if [[ "$CURRENT_BRANCH" != "main" && \
      "$CURRENT_BRANCH" != "master" && \
      "$CURRENT_BRANCH" != "stable" && \
      "$CURRENT_BRANCH" != "beta" && \
      "$CURRENT_BRANCH" != "gh-readonly-queue/master/pr-"* && \
      "$CURRENT_BRANCH" != "flutter-"*"-candidate."* && \
      ! ( "$CURRENT_BRANCH" == "HEAD" && -n "$LUCI_CONTEXT" ) && \
      ! -f "$FLUTTER_ROOT/.git/shallow" ]]; then

  # This is a development branch. Find the merge-base.
  # We will fallback to origin if upstream is not detected.
  REMOTE="origin"
  if git -C "$FLUTTER_ROOT" remote get-url upstream >/dev/null 2>&1; then
    REMOTE="upstream"
  fi

  # Try to find the merge-base with master, then main.
  MERGEBASE=$(git -C "$FLUTTER_ROOT" merge-base HEAD "$REMOTE/master" 2>/dev/null || true)
  if [[ -z "$MERGEBASE" ]]; then
    MERGEBASE=$(git -C "$FLUTTER_ROOT" merge-base HEAD "$REMOTE/main" 2>/dev/null || true)
  fi

  if [[ -n "$MERGEBASE" ]]; then
    BASEREF="$MERGEBASE"
  fi
fi

# Workaround for Xcode's git multi-pack-index incompatibility.
# https://github.com/flutter/flutter/issues/184376
GIT_OPTS=()
if [[ "$(git --version)" == *"Apple Git"* ]]; then
  GIT_OPTS=(-c core.multiPackIndex=false)
fi
if ! HASH=$(set -o pipefail; git "${GIT_OPTS[@]}" -C "$FLUTTER_ROOT" ls-tree "$BASEREF" -- "${TRACKEDFILES[@]}" | git hash-object --stdin); then
  >&2 echo "${0}: git error when generating Flutter content-aware hash"
  exit 1
fi
echo "$HASH"
