|
#!/bin/bash |
|
|
|
|
|
# |
|
# +-----------------------+ |
|
# | Update Authors Script | |
|
# +-----------------------+-------------------------------------------------------------------------+ |
|
# | | |
|
# | Updates wrong authors and maps them to the new Git authors | |
|
# | | |
|
# | Dependent on https://github.com/sethwebster/git-rewrite-author/blob/master/git-rewrite-author | |
|
# | forked from https://github.com/davidfokkema/git-rewrite-author/blob/master/git-rewrite-author | |
|
# | | |
|
# +-------------------------------------------------------------------------------------------------+ |
|
# |
|
# |
|
|
|
# Notes (example below in code, please edit) |
|
# |
|
# 1. Define the correct authors (examples below: correct_author_*) |
|
# 2. Define the old authors we should remap |
|
# 3. Define the new authors the old author should map to (via position in the array) |
|
# 4. Run via command line |
|
# |
|
# Note: a Git rewrite takes a long time, and you are rewriting history. |
|
# |
|
# Anyone using this repository should: |
|
# |
|
# git fetch --all |
|
# git reset --hard origin/master |
|
# |
|
|
|
|
|
# Download git-rewrite-author |
|
if [ ! -f "git-rewrite-author" ]; then |
|
curl https://raw2.github.com/sethwebster/git-rewrite-author/master/git-rewrite-author -o git-rewrite-author |
|
chmod +x git-rewrite-author; |
|
fi |
|
|
|
# map out our current correct users |
|
correct_author_1="Seth Webster <[email protected]>" |
|
correct_author_2="Jane Doe <[email protected]>" |
|
correct_author_3="John Moose <[email protected]>" |
|
|
|
# old authors |
|
oldauthors[1]="jdoe <jdoe@c0f60b75-22a0-4989-a491-524eb590045c>"; |
|
oldauthors[2]="jmoose-admin <jdoe-admin@c0f60b75-22a0-4989-a491-524eb590045c>"; |
|
oldauthors[3]="Seth-Admin <sadmin@localhost>"; |
|
oldauthors[4]="Jane Doe <[email protected]>"; |
|
|
|
# map to new authors |
|
newauthors[1]=$correct_author_2; |
|
newauthors[2]=$correct_author_3; |
|
newauthors[3]=$correct_author_1; |
|
newauthors[4]=$correct_author_2; |
|
|
|
# indexing function (find old, which maps to new) |
|
find_correct_author () |
|
{ |
|
for index in ${!oldauthors[*]} |
|
do |
|
if [ "$1" == "${oldauthors[$index]}" ] ; then |
|
echo $index; |
|
break; |
|
fi |
|
done |
|
return 0; |
|
} |
|
|
|
|
|
# load the authors who've contributed to this repository |
|
list=$(./git-rewrite-author -l); |
|
|
|
# split them into an array |
|
IFS=$'\n' authors=($list) |
|
|
|
# iterate over the authors and map them to our new ones |
|
for index in ${!authors[*]} |
|
do |
|
#we skip our first element because it's the |
|
# instructional text from output |
|
if [[ $index -eq 0 ]] ; then |
|
continue; |
|
fi |
|
|
|
# find our old author index (0 = not found) |
|
item=$(find_correct_author "${authors[$index]}"); |
|
# check if we found old author |
|
if [[ $item -ne 0 ]] ; then |
|
# bingo, let's rewrite |
|
echo "Rewrite ${authors[$index]} to ${newauthors[$item]}" |
|
|
|
./git-rewrite-author -w "${oldauthors[$index]}" "${newauthors[$index]}" |
|
# if our exit code is non-zero, it failed |
|
if [[ $? -ne 0 ]] ; then |
|
echo "Rewrite failed." |
|
break; |
|
fi |
|
fi |
|
done |
|
|
|
echo |
|
echo "Complete." |
|
echo |