En effet, sur la même machine, je peux être amené à travailler sur un repository personnel (le week-end ou le soir) ou sur un repository de l'entreprise qui m'emploie (en journée).
De là, j'ai découvert qu'on pouvait indiquer la date de commit et la date d'auteur à git... J'ai trouvé ça plus amusant de présenter un script qui modifie l'heure du commit (par defaut 19:00 + X).
Comment le mettre en place
Tout d'abord, dans le fichier .bash_aliases, je crée un alias qui surcharge la commande git :
alias git="~/bin/alias-git.sh"Ensuite dans le répertoire ~/bin je crée le fichier alias-git.sh avec le contenu suivant :
#!/bin/sh
COUNTER_FILE="${HOME}/bin/.counter_date"
get_counter() {
# Read counter file
if [ -f "${COUNTER_FILE}" ]; then
# Check if file is same day that today
COUNTER_FILE_DATE=$(date -r "${COUNTER_FILE}" +"%Y%m%d")
CURRENT_FILE_DATE=$(date +"%Y%m%d")
if [ "${COUNTER_FILE_DATE}" -eq "${CURRENT_FILE_DATE}" ]; then
COUNTER=$(cat "${COUNTER_FILE}")
COUNTER=$(expr ${COUNTER} + 1)
else
# Reinit counter file
COUNTER=0
rm -f "${COUNTER_FILE}"
fi
else
COUNTER=0
fi
}
# Check only if git commit
if [ "$1" = "commit" ]; then
if [ -d '.git' ]; then
GIT_LOCAL_CONFIG=$(git config --list --local)
IS_GITHUB_REPOSITORY=$(echo ${GIT_LOCAL_CONFIG} | grep 'github')
IS_EMAIL=$(echo ${GIT_LOCAL_CONFIG}| grep 'user.email')
IS_USERNAME=$(echo ${GIT_LOCAL_CONFIG} | grep 'user.name')
if [ -n "${IS_GITHUB_REPOSITORY}" ]; then
if [ -n "${IS_EMAIL}" ] && [ -n "${IS_USERNAME}" ]; then
echo "** Changer happy hour ! **"
get_counter
# Take today, set hour to 19:00 and add minutes
NEW_DATE=$(date -d "19:00 today + ${COUNTER} minutes" +'%Y-%m-%d %H:%M:%S')
export GIT_COMMITTER_DATE="${NEW_DATE}"
export GIT_AUTHOR_DATE="${NEW_DATE}"
else
echo "fatal: this is github repository without username and email set !" >&2
exit 255
fi
fi
else
echo "fatal: not a git repository: .git" >&2
exit 128
fi
fi
git "$@"
RESULT=$?
unset GIT_COMMITTER_DATE
unset GIT_AUTHOR_DATE
# Counter set, save it only if git OK
if [ -n "${COUNTER}" ] && [ ${RESULT} -eq 0 ]; then
echo "${COUNTER}" > "${COUNTER_FILE}"
fi
exit ${RESULT}
Comment ça fonctionne
Le script regarde la commande git qui est exécutée. S'il s'agit de la commande commit, elle fait quelques vérifications :
- Est-on sur un repository Github ?
- Est-ce le user et email est configuré ? Si ce n'est pas le cas, le script s'arrête en erreur.
- Le script va lire un compteur.
- La date de commit est le jour même mais avec l'heure de départ 19:00 à laquelle j'ajoute le compteur en tant que minute.
Cela signifie donc qu'à chaque commit sur un repository Github, le compteur est incrémenté de 1. Les commits seront horodatés : 19:00, 19:01, 19:02...
Ce que j'ai appris
Ce script m'aura permis d'apprendre de nouvelles choses sur git et comment manipuler/calculer les dates/heures en shell comme je ne l'avais jamais fait.
J'ai pu découvrir qu'il y avait 2 dates pour un commit et qu'on pouvait les spécifier avec GIT_COMMITTER_DATE et GIT_AUTHOR_DATE.