-#!/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
+if [ ! -e "${author_file}" ] ; then
+ echo "error: could not find ${author_file}"
+ exit 1
+fi
git filter-branch \
- --env-filter ". ${tmp};"' \
- eval `decode "${GIT_AUTHOR_NAME}" AUTHOR`; \
- eval `decode "${GIT_COMMITTER_NAME}" COMMITTER`; \
+ --env-filter ". '${tmp}';"' \
+ eval "$(decode "${GIT_AUTHOR_NAME}" AUTHOR)"; \
+ eval "$(decode "${GIT_COMMITTER_NAME}" COMMITTER)"; \
' "$@"
-
-rm -f $tmp