update
[rrq/reviewtool.git] / git-review
1 #!/bin/zsh
2 #
3 # Review commits based on the branch graph
4 # command p = move to previous commit
5 # command / = move by searching text
6 # command ? = show commit details
7
8 N=1
9 if [ $# = 1 ] ; then
10     if [ -e $1 ] ; then
11         FOCUS=$1
12     else
13         N=$1
14     fi
15 elif [ $# = 2 ] ; then
16     N=$1
17     FOCUS=$2
18 fi
19 FMT='--pretty=format:<s:%h>%h [%aN/%as]%d %s'
20
21 GRAPH="$(git log --graph --full-history "$FMT" --all $FOCUS )"
22
23 PROJECT="$(git rev-parse --show-toplevel| sed 's/.*\///')"
24
25 X=$(echo "$GRAPH"q | iselect -t "$PROJECT" -n git-review -p $N -P -K -k/ -k\? -kp )
26
27 [ -z "$X" ] && exit 0
28 X=( ${(s[:])X} )
29 N=$X[1]
30 K=$X[2]
31 X=$X[3]
32 if [ "$K" = / ] ; then
33     read "x?Search: "
34     N=${"$(echo "$GRAPH" | grep -anF "$x")"%%:*}
35 elif [ "$K" = "p" ] ; then
36     # previous commit
37     Z=${"$(git rev-parse ${X}~1)"[1,7]}
38     [ -z "$Z" ] || N=${"$(echo "$GRAPH" | grep -nF "$Z")"%%:*}
39 elif [ "$K" = "?" ] ; then
40     git log --no-walk --notes --show-signature --pretty=fuller "$X" | less
41 else
42     FOCUS=$FOCUS git-show-i $X~1 $X
43 fi
44 exec $0 $N $FOCUS