From 28382633d3bec1ac663832b53872a8f0cbaa63c9 Mon Sep 17 00:00:00 2001 From: Damien Lespiau Date: Thu, 16 Nov 2017 17:18:58 +0000 Subject: [PATCH] image-tag: Rework the -WIP logic Seems like grepping the output of git status --porcelain broken. Use a different approach with git diff and only checks the events we care about (having staged and un staged changes). --- image-tag | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/image-tag b/image-tag index 31f023d..d2ca1eb 100755 --- a/image-tag +++ b/image-tag @@ -4,6 +4,15 @@ set -o errexit set -o nounset set -o pipefail -WORKING_SUFFIX=$(if git status --porcelain | grep -qE '^(?:[^?][^ ]|[^ ][^?])\s'; then echo "-WIP"; else echo ""; fi) +# Figure out if we have local changes. We don't look at files not ignored by +# .gitignore for fear of false positives. +# git diff returns 1 (false) when there's a diff, 0 (true) otherwise. +HAS_STAGED_CHANGES=$(if git diff --cached --exit-code >/dev/null; then echo no; else echo yes; fi) +HAS_UNSTAGED_CHANGES=$(if git diff --exit-code >/dev/null; then echo no; else echo yes; fi) +WORKING_SUFFIX= +if [ "$HAS_STAGED_CHANGES" = "yes" ] || [ "$HAS_UNSTAGED_CHANGES" = "yes" ]; then + WORKING_SUFFIX="-WIP" +fi + BRANCH_PREFIX=$(git rev-parse --abbrev-ref HEAD) echo "${BRANCH_PREFIX//\//-}-$(git rev-parse --short HEAD)$WORKING_SUFFIX"