最近在知道了一个不错的东西,git-cal,可以针对任意git的repo产生github样式的 calendar view。我想把它的输出放到我的shell的motd里面去,不过有几个问题:
- 它不能对于几个git repo的log进行汇总
- 它不支持接受STDIN输入
- 它是Perl写的,我基本上看不懂
在github上给作者留言让他加入接受STDIN json输入的feature request,没有回应,于是 ,自己写了一个。脚本的名字暂定stat_cal,用法目前有两种:
# in git repo, prints a calendar view for current repository
stat_cal
# accepts STDIN in the form of lines of
# DATE COUNT
some_cool_command | stat_cal
这样,我就可以自己把多个repo的数据进行汇总,然后用stat_cal
显示出来。我在
.zshrc
里是这样加的:
# Usage:
#
# git_cal_view repo_a repo_b ....
#
git_cal_view() {
pwd=$PWD
for i in $*; do
cd $i
git log --no-merges --pretty=format:"%ai" --since="13 months"
echo # an "\n" is missing at the end of git log command
done \
|awk '{ a[$1] ++ }; END {for (i in a) {print i " " a[i]}}' \
|sort \
|stat_cal
cd $pwd
}
core_proj=~/workspace/new2email
all_proj=(~/workspace/new2email ~/dotfiles ~/workspace/blog ~/workspace/yuncli)
motd() {
echo "\tStatistics on ALL projects: \n"
for i in $all_proj; echo "\t\t$i"
echo
git_cal_view ${all_proj[@]}
echo
echo "\tStatistics on CORE projects: \n"
echo "\t\t$core_proj"
echo
git_cal_view $core_proj
# taskwarrior jobs...
t list
}
motd
用bash的话也许上面的代码需要稍作修改,不顾应该改动不大。
效果如图:
还能想到的是用这个可以记录自己有哪些日子进行了锻炼等等,玩法有待继续开发。