blob: 01accb66afe61f620abd0fd3b5c8186e67a878c9 [file] [log] [blame]
#!/bin/sh
# Copyright 2025 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.
# This script unstages submodules prior to commiting, but only if the current
# repository is fuchsia.git.
#
# fuchsia.git is the only repository that has submodules that shouldn't be
# updated manually. Its submodules only exist for the purpose of Code Search and
# are never initialized locally, but may still incidentally be `git add`ed
# because Git recognizes them as "old-form" submodules.
set -euf
# Provide a safety hatch in case the user really does intend to commit
# submodules, or the unstaging logic happens to be buggy.
if [ -n "${FUCHSIA_DONT_UNSTAGE_SUBMODULES:-}" ]; then
exit 0
fi
# Get the remote, but don't fail if for some reason there's no remote named
# "origin".
remote="$(git remote get-url origin 2>/dev/null || echo "no remote")"
# Exit early if the repository is not fuchsia.git.
case "$remote" in
*/fuchsia) ;;
*) exit 0 ;;
esac
staged_submodules="$(
git submodule status |
awk '{ print $2 }' |
# We have to use `git status` rather than `git diff` since `git diff`
# excludes submodules that have `ignore = all` in .gitmodules.
xargs git status --porcelain |
# "M" as the first character indicates a staged modified file. Remove the "M"
# prefix and any subsequent whitespace before the filename. The combination of
# `-n` and `/p` causes sed to only print matching lines.
sed -n '/^M/s/^M\s*//p'
)"
repo_root="$(git rev-parse --show-toplevel)"
submodule_count=0
last_submodule=
IFS='
'
for file in $staged_submodules; do
# Unstage the submodule, but don't change its checked-out revision.
git reset --quiet HEAD -- "${repo_root}/${file}"
submodule_count=$((submodule_count+1))
last_submodule="$file"
done
if [ $submodule_count -eq 1 ]; then
echo "info: unstaged submodule ${last_submodule} (see https://fxbug.dev/290956668)"
elif [ $submodule_count -gt 1 ]; then
echo "info: unstaged ${submodule_count} submodules (see https://fxbug.dev/290956668)"
fi