summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillermo Ramos2020-04-23 13:57:33 +0200
committerGuillermo Ramos2020-04-23 13:57:33 +0200
commit9737166ce9bdb188d51912f7e4e34f6e941b35d4 (patch)
tree5ed642b6644d364c1b30d9fa2d87dcab13dbb57d
downloadgit-utils-9737166ce9bdb188d51912f7e4e34f6e941b35d4.tar.gz
First commit
-rw-r--r--hooks/pre-commit.mix_format30
-rwxr-xr-xscripts/prune-leftover-branches.sh9
2 files changed, 39 insertions, 0 deletions
diff --git a/hooks/pre-commit.mix_format b/hooks/pre-commit.mix_format
new file mode 100644
index 0000000..c201707
--- /dev/null
+++ b/hooks/pre-commit.mix_format
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Ensure this script works with Magit, which sets GIT_LITERAL_PATHSPECS=1 and
+# breaks git-stash
+export GIT_LITERAL_PATHSPECS=0
+
+################################################################################
+# Here is a fine piece of Git wizardry. It uses git stash to make sure that the
+# staged changes are correctly formatted:
+#
+# 1) Stash all changes (worktree + index)
+git stash push -u > /dev/null
+# 2) Apply only changes from index
+git show -p stash^2 | git apply 2> /dev/null
+# 3) Check with 'mix format' the staged changes
+mix format --check-formatted > /dev/null 2>&1
+retval=$?
+# 4) Undo changes brought from step 1
+git reset --hard > /dev/null
+git clean -f . > /dev/null
+# 5) Leave the repository as it was before
+git stash pop --index > /dev/null
+################################################################################
+
+# Don't allow the commit if 'mix format' complained
+if [ $retval -ne 0 ]; then
+ # Please keep this format ("error: XXXX") as it has special meaning to Magit
+ echo "error: Failed formatting checks. Run 'mix format' (+ git add?) and try again.";
+ exit 1;
+fi
diff --git a/scripts/prune-leftover-branches.sh b/scripts/prune-leftover-branches.sh
new file mode 100755
index 0000000..eaba7b5
--- /dev/null
+++ b/scripts/prune-leftover-branches.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+REMOTES=$(git branch -r --format="%(refname)" | cut -f4- -d/)
+for branch in $(git branch); do
+ REMOTE=$(git config branch.$branch.remote)
+ if [ -n "$REMOTE" ] && ! grep "^$branch$" <<< "$REMOTES" > /dev/null; then
+ echo $branch;
+ fi
+done