diff options
-rw-r--r-- | tools/git/README | 12 | ||||
-rwxr-xr-x | tools/git/graph.sh | 42 |
2 files changed, 52 insertions, 2 deletions
diff --git a/tools/git/README b/tools/git/README index 18d6da7..7f8e363 100644 --- a/tools/git/README +++ b/tools/git/README @@ -1,8 +1,16 @@ -This directory contains some helpful Git hooks. +This directory contains some helpful Git tools. -Currently, they warn you about DEPS modifications so you will remember +post-checkout and post-merge +============================ +These hooks warn you about DEPS modifications so you will remember to run "gclient sync". To install these Git hooks, create symlinks like so: ln -s $(pwd)/post-checkout $(git rev-parse --git-dir)/hooks ln -s $(pwd)/post-merge $(git rev-parse --git-dir)/hooks + + +git-graph +========= +Create a graph of the recent history of occurences of a grep +expression in the project. diff --git a/tools/git/graph.sh b/tools/git/graph.sh new file mode 100755 index 0000000..4d2bcb2 --- /dev/null +++ b/tools/git/graph.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# Copyright (c) 2010 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +about="Given a grep expression, creates a graph of occurrences of that +expression in the recent history of the tree. + +Prerequisites: git and GNU R (apt-get install r-base). +" + +set -e + +target="$1" + +if [ -z $target ]; then + echo "usage: $0 <grep-compatible expression>" + echo + echo "$about" + exit 1 +fi + +datafile=$(mktemp) +trap "rm -f $datafile" EXIT + +echo 'ago count' > $datafile +for ago in {90..0}; do + commit=$(git rev-list -1 --until="$ago days ago" origin/trunk) + git checkout -q -f $commit + count=$(git grep -E "$target" -- '*.cc' '*.h' '*.m' '*.mm' | wc -l) + echo "-$ago $count" >> $datafile + echo -n '.' +done + +R CMD BATCH <(cat <<EOF +data = read.delim("$datafile", sep=' ') +png(width=600, height=300) +plot(count ~ ago, type="l", main="$target", xlab='days ago', data=data) +EOF +) /dev/null + +echo done. # Primarily to add a newline after all the dots. |