|
|
@@ -0,0 +1,42 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+
|
|
|
+
|
|
|
+mkdir -p log
|
|
|
+TOP="$1"
|
|
|
+PREFIX="$2"
|
|
|
+shift 2
|
|
|
+
|
|
|
+containsElement () {
|
|
|
+ local e match="$1"
|
|
|
+ shift
|
|
|
+ for e; do [[ "$e" == "$match" ]] && return 0; done
|
|
|
+ return 1
|
|
|
+}
|
|
|
+
|
|
|
+join_gource(){
|
|
|
+ cat log/gource.txt.gz|gunzip |cat - log/gource.txt |sort|uniq|gzip > log/gource.tmp
|
|
|
+ mv log/gource.tmp log/gource.txt.gz
|
|
|
+ rm -f log/gource.txt
|
|
|
+}
|
|
|
+
|
|
|
+REPOS_DONE=( $(cat log/repos.done) )
|
|
|
+
|
|
|
+
|
|
|
+find "$TOP" -type d -name '*.git' -print0 |
|
|
|
+(
|
|
|
+i=0
|
|
|
+while IFS= read -r -d '' line; do
|
|
|
+ REL="$PREFIX$(realpath --relative-to=$TOP $line)"
|
|
|
+ i="$(( $i + 1 ))"
|
|
|
+
|
|
|
+ containsElement "$REL" "${REPOS_DONE[@]}" && echo "$i $REL is already done" 1>&2
|
|
|
+ containsElement "$REL" "${REPOS_DONE[@]}" && continue;
|
|
|
+
|
|
|
+ echo "Gourcing:$i $REL" 1>&2
|
|
|
+ git -C "$line" log --all --pretty=format:user:%aN%n%ct --reverse --raw --encoding=UTF-8 --no-renames |
|
|
|
+ sed "s, \([ACDMRTU]\)\t, \1\t$REL/," | gource --log-format git --output-custom-log - -
|
|
|
+ echo "$REL" >> log/repos.done
|
|
|
+done
|
|
|
+) >> log/gource.txt
|
|
|
+
|
|
|
+join_gource
|