What did I do yesterday? This Script Can Help
As a programmer, I often get so focused on solving problems that I forget to prepare for standups. The daily meeting doesn't allow extra time for preparation. If you struggle to remember what you did yesterday, like I did, this short worklog script can help.
The Worklog Script
Save the following script as worklog
and put it into your ~/bin
or any other bin directory in your PATH environment variable. Don't forget to make it executable with chmod +x worklog
.
#!/usr/bin/bash
days=1
if [ "$1" != "" ]; then
days=$1
fi
echo
echo -n "On project $(git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//')"
echo
echo
git --no-pager log --no-merges --pretty=tformat:"- %ad | %s%C(auto)%d [%h]" --date=short --reverse --all --since=${days}.days.ago --author="$(git config user.name)" 2>&1
echo
How It Works
-
Default Days Setting:
days=1 if [ "$1" != "" ]; then days=$1 fi
This part sets the default number of days to 1. If you provide a different number as an argument when running the script, it updates the days variable accordingly.
-
Fetching Project Name:
echo echo -n "On project $(git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//')" echo
This part retrieves the project name from the Git remote URL and displays it. It uses a combination of
git remote -v
,awk
, andsed
commands to extract and format the project name. -
Generating the Git Log:
git --no-pager log --no-merges --pretty=tformat:"- %ad | %s%C(auto)%d [%h]" --date=short --reverse --all --since=${days}.days.ago --author="$(git config user.name)" 2>&1
This part generates the Git log for the specified number of days. It includes:
--no-pager
: To prevent paging the output.--no-merges
: To exclude merge commits.--pretty=tformat
: To format each commit log line.--date=short
: To display dates in short format.--reverse
: To show the oldest commits first.--all
: To include all branches.--since=${days}.days.ago
: To limit the log to commits from the specified number of days ago.--author="$(git config user.name)"
: To filter commits by the current Git user.
-
Outputting the Result:
echo
Finally, it prints a blank line for better readability of the output.
Running the Script
To see what you have done since 1 day ago, simply run:
worklog
If you want to see the work done in the last 7 days, run:
worklog 7
Handling Multiple Projects
If your work involves multiple projects, the following script can help:
Save the following script as wlog
and put it into your ~/bin
directory. Don't forget to make it executable with chmod +x wlog
.
#!/bin/bash
# Define an array with the project directories
project_dirs=(
/d/git/xemt-core/dfx
/d/git/apollo/mock
)
# Loop through each project directory and run the commands
for dir in "${project_dirs[@]}"; do
(cd $dir && worklog "$@" && cd - >/dev/null)
done
How It Works
-
Project Directories:
project_dirs=( /d/git/xemt-core/dfx /d/git/apollo/mock )
Define an array containing the directories of your projects.
-
Loop Through Projects:
for dir in "${project_dirs[@]}"; do (cd $dir && worklog "$@" && cd - >/dev/null) done
Loop through each directory, change to that directory, run the
worklog
script with any passed arguments, and then change back to the previous directory. Thecd - >/dev/null
part suppresses output from the directory change.
This script helps me quickly summarize my work for daily standup meetings. Customize the project directories in the wlog
script to match your projects and streamline your standup preparation.