| #!/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. | |
| # Based on the current repository state, writes on stdout the last commit in the | |
| # git tree that edited either `DEPS` or any file in the `engine/` sub-folder, | |
| # which is used to ensure `bin/internal/engine.version` is set correctly. | |
| # | |
| # | |
| # ---------------------------------- NOTE ---------------------------------- # | |
| # | |
| # Please keep the logic in this file consistent with the logic in the | |
| # `last_engine_commit.ps1` script in the same directory to ensure that Flutter | |
| # continues to work across all platforms! | |
| # | |
| # https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md. | |
| # | |
| # Want to test this script? | |
| # $ cd dev/tools | |
| # $ dart test test/last_engine_commit_test.dart | |
| # | |
| # -------------------------------------------------------------------------- # | |
| set -e | |
| FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")" | |
| # 1. Determine when the release branch was started, and prevent set -e from exiting. | |
| RELEASE_CANDIDATE_VERSION_PATH="$FLUTTER_ROOT/bin/internal/release-candidate-branch.version" | |
| REFERENCE_COMMIT="$(git log -1 --pretty=format:%H -- "$RELEASE_CANDIDATE_VERSION_PATH")" | |
| # If we did not find a merge-base, fail | |
| if [[ -z "$REFERENCE_COMMIT" ]]; then | |
| echo >&2 "Error: Could not determine a suitable engine commit." | |
| echo >&2 "Current branch: $(git rev-parse --abbrev-ref HEAD)" | |
| echo >&2 "No file $RELEASE_CANDIDATE_VERSION_PATH found" | |
| exit 1 | |
| fi | |
| # 2. Define and search history range to searhc within (unique to changes on this branch). | |
| HISTORY_RANGE="$REFERENCE_COMMIT..HEAD" | |
| ENGINE_COMMIT="$(git log -1 --pretty=format:%H --ancestry-path "$HISTORY_RANGE" -- "$FLUTTER_ROOT/DEPS" "$FLUTTER_ROOT/engine")" | |
| # 3. If no engine-related commit was found within the current branch's history, fallback to the first commit on this branch. | |
| if [[ -z "$ENGINE_COMMIT" ]]; then | |
| # Find the oldest commit on HEAD that is *not* reachable from MERGE_BASE_COMMIT. | |
| # This is the first commit *on this branch* after it diverged from 'master'. | |
| ENGINE_COMMIT="$REFERENCE_COMMIT" | |
| fi | |
| echo "$ENGINE_COMMIT" |