Skip to content

Commit

Permalink
Save deprecate-email script
Browse files Browse the repository at this point in the history
For many years this was in a Google Keep note, so really good
to properly version control it now.
  • Loading branch information
anttiharju committed Oct 13, 2024
1 parent 22faf0d commit 8a58df6
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions bin/deprecate-email
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env dash
set -eu

# deprecate-email:
# Sometimes I remove email addresses from my GitHub profile. This makes the contributions in my profile disappear as the email address is no longer associated with my account. This script replaces commits with input email with current git config.

if [ -z "$1" ]; then
echo "Error: old_email argument is required."
exit 1
fi

old_email="$1"
new_email="$(git config user.email)"
new_name="$(git config user.name)"

# Replacing author and committer emails has to be done separately to avoid unintentional overwrites
# e.g. in commits with multiple authors.
(export FILTER_BRANCH_SQUELCH_WARNING=1 && \
echo "1/2 Overwriting committer" && \
git filter-branch -f --commit-filter "
if [ \"\$GIT_COMMITTER_EMAIL\" = \"$old_email\" ];
then
GIT_COMMITTER_NAME=\"$new_name\";
GIT_COMMITTER_EMAIL=\"$new_email\";
git commit-tree \"\$@\";
else
git commit-tree \"\$@\";
fi" HEAD && \
echo "2/2 Overwriting author" && \
git filter-branch -f --commit-filter "
if [ \"\$GIT_AUTHOR_EMAIL\" = \"$old_email\" ];
then
GIT_AUTHOR_NAME=\"$new_name\";
GIT_AUTHOR_EMAIL=\"$new_email\";
git commit-tree \"\$@\";
else
git commit-tree \"\$@\";
fi" HEAD)

0 comments on commit 8a58df6

Please sign in to comment.