From: Ian Jackson Date: Wed, 4 Jan 2017 22:52:44 +0000 (+0000) Subject: badcommit-fixup wip X-Git-Tag: archive/debian/2.16~24^2~16 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=24f82efdfcec70f49f76624f25251fba47f1dc88 badcommit-fixup wip --- diff --git a/badcommit-fixup b/badcommit-fixup new file mode 100755 index 00000000..259775f5 --- /dev/null +++ b/badcommit-fixup @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e +set -o pipefail + +tmp=.git/dgit-badcommit-fixup-tmp +rm -rf $tmp +mkdir $tmp + +LC_MESSAGES=C git fsck --no-dangling 2>&1 | \ + perl -ne 'print $1 if m/^error in commit d1a977e7f9637372750ac02a58e85c35ddd4ca54:.*invalid format - expected '\''committer' | \ + >$tmp/bad + +case `wc -l <$tmp/bad` in + 0) + echo >&2 'nothing bad found - is git-fsck doing as we expect?' ; + exit 8 ;; + 1) + read <$tmp/bad bads + nots="^$onlybad^0 ^$onlybad^1" + ;; + *) + bads="cat $tmp/bad" + ;; +esac + +args="$nots" + +for head in `git-show-ref --heads`; do + exec <$tmp/bad + needed=false + for bad in $bads; do + if git merge-base --is-ancestor $bad $head; then + needed=true + break + fi + done + if ! $needed; then continue; fi + args+=" $head" +done + +echo $args