tridactyl/scripts/pretty

53 lines
1.2 KiB
Text
Raw Normal View History

2018-08-24 13:38:05 -06:00
#!/usr/bin/env bash
# Run prettier on each staged file that needs it without touching the working tree
source ./scripts/common
set -Eeuo pipefail
echoe() {
echo "$@" >&2
}
lock() {
local lockfile="$1"
if [ -e "$lockfile" ]; then
echoe "Lockfile '$lockfile' already exists. Check no other operation is occuring or delete lockfile"
return 1
else
touch "$lockfile"
fi
}
unlock() {
rm "$1"
}
trap "unlock $(git rev-parse --show-toplevel)/.git/index.lock || true" ERR
main() {
local stagedFiles=$(cachedFiles)
if [ -n "$stagedFiles" ]; then
# Could use git-update-index --cacheinfo to add a file without creating directories and stuff.
local tmpdir=$(mktemp -p . -d "pretty.XXXXXXXXX")
IFS=$'\n'
for file in $stagedFiles; do
(
cd "$tmpdir"
mkdir -p $(dirname $file)
lock ../.git/index.lock
staged "$file" | prettier --stdin-filepath "$file" > "$file"
chmod --reference="../$file" "$file" # match permissions
# Can't hold lock while git add occurs. Hopefully release and reacquire happen fast enough to prevent race.
unlock ../.git/index.lock
GIT_WORK_TREE=. git add "$file"
)
done
rm -rf "$tmpdir"
fi
}
main