--- /dev/null
+# Set GIT_AUTHOR_NAME etc from dotfiles in the profile.
+function git_commit_tree() {
+ local WHO=$1; shift
+ local who=${WHO,,}
+ local WHAT=
+
+ for WHAT in EMAIL NAME; do
+ local what=${WHAT,,}
+ local where=
+
+ # Look in $HOME then $PROFILE_HOME.
+ for where in '~' '$PROFILE_HOME'; do
+ eval local value=\$\(\<${where}/".git_${who}_${what}"\) 2>/dev/null
+
+ if [ -z "$value" ]; then
+ # COMMITTER defaults to AUTHOR.
+ if [ "$WHO" = "COMMITTER" ]; then
+ eval value="\$GIT_AUTHOR_${WHAT}"
+ fi
+
+ # Fall back to generic file.
+ if [ -z "$value" ]; then
+ eval value=\$\(\<\$${where}/".git_${what}"\) 2>/dev/null
+ fi
+ fi
+
+ if [ -n "$value" ]; then
+ eval export "GIT_${WHO}_${WHAT}=\$value"
+ # Skip next location.
+ break
+ fi
+ done
+ done
+}
+
+git_commit_tree AUTHOR
+git_commit_tree COMMITTER
+
+unset git_commit_tree