blob: 7b08c3e85e794f8d7b1ccbc8cb9fb43d902782d4 [file] [log] [blame]
#!/bin/bash
# Copyright 2020 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.
check_pending_changes() {
# Check if there are pending changes in this repo, and if so, exit with
# an error.
#
# Usage: check_pending_changes ${DIR}
local DIR="$1"
# Check for local modifications and warn the user to stash or revert.
# Porcelain v2 format uses a '1' for changes, '2' for renames, and 'u'
# for unmerged.
if git status --porcelain=v2 --branch | grep -q "^[12u]" ; then
MSG=$(echo "You have uncommitted changes in ${DIR}
Please stash or revert these changes, then re-run this program." | fmt -w 80)
cat <<EOF >&2
******************************************************************************
${MSG}
******************************************************************************
EOF
return 1
fi
# We usually want to track the upstream, but if NEW_VARIANT_WIP=1, then we
# want to create new branches from our current HEAD and not from the
# upstream-tracking branch. Check for this variable first, and if it's
# set to 1, then allow the calling script to continue.
# ${var:-0} assigns a value of 0 if the variable is not set.
if [[ "${NEW_VARIANT_WIP:-0}" == 1 ]] ; then
return 0
fi
pushd "${DIR}"
# Check that we are tracking the upstream, and if not, ask the user
# to checkout upstream or use NEW_VARIANT_WIP=1.
if git status --porcelain=v2 --branch | grep -q "branch\.ab" ; then
MSG=$(echo "Your local tree is ahead of the upstream by 1 or more commits.
You probably don't want to base the new variant on this branch, so please check
out the upstream branch in ${DIR} and then re-run this program.
If you want to base the new variant on the current branch, set NEW_VARIANT_WIP=1
in your environment and re-run this program." | fmt -w 80)
cat <<EOF >&2
******************************************************************************
${MSG}
******************************************************************************
EOF
return 1
fi
popd
return 0
}