]> git.wh0rd.org - home.git/blobdiff - .bin/git-rewrite-authors
git-rewrite-authors: silence rewrite warning+delay
[home.git] / .bin / git-rewrite-authors
index ce93381e79f5b5c9494bd93c0331dafb674606f9..2b8c398f71e48a15b33af53675924ff757b3ed2c 100755 (executable)
@@ -1,23 +1,37 @@
-#!/bin/bash
+#!/bin/sh
 
-tmp=$(mktemp)
+tmp=$(mktemp -t "${0##*/}.XXXXXX")
+trap "rm -rf '${tmp}'" EXIT
 cat << \EOF > ${tmp}
 decode() {
        awk -vid="$1" -vtype="$2" '$1 == id {
-               print "export GIT_"type"_NAME='\''" $3 " " $4 "'\'';"
-               print "export GIT_"type"_EMAIL='\''" $5 "'\'';"
-       }' ${author_file}
+               match($0, /^[^=]*=\s*([^<]*)<([^>]*)>/, a);
+               name = gensub(/\s+$/, "", "g", a[1]);
+               name = gensub(/^"/, "", "g", name);
+               name = gensub(/"$/, "", "g", name);
+               name = gensub(/'\''/, "'\''\\\\'\'''\''", "g", name);
+               email = a[2];
+               print "export GIT_"type"_NAME='\''" name "'\'';"
+               print "export GIT_"type"_EMAIL='\''" email "'\'';"
+       }' "${author_file}"
 }
 EOF
 
 for x in cvs-authors authors ; do
-       export author_file=${PWD}/.git/$x
-       [ -e ${author_file} ] && break
+       export author_file="${PWD}/.git/${x}"
+       [ -e "${author_file}" ] && break
+       if [ -L "${author_file}" ] ; then
+               echo "error: ${author_file} is a broken link"
+               exit 1
+       fi
 done
-git filter-branch \
-       --env-filter ". ${tmp};"' \
-               eval `decode "${GIT_AUTHOR_NAME}" AUTHOR`; \
-               eval `decode "${GIT_COMMITTER_NAME}" COMMITTER`; \
+if [ ! -e "${author_file}" ] ; then
+       echo "error: could not find ${author_file}"
+       exit 1
+fi
+FILTER_BRANCH_SQUELCH_WARNING=1 \
+exec git filter-branch \
+       --env-filter ". '${tmp}';"' \
+               eval "$(decode "${GIT_AUTHOR_NAME}" AUTHOR)"; \
+               eval "$(decode "${GIT_COMMITTER_NAME}" COMMITTER)"; \
 ' "$@"
-
-rm -f $tmp