aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcontrib/git-ack84
1 files changed, 84 insertions, 0 deletions
diff --git a/contrib/git-ack b/contrib/git-ack
new file mode 100755
index 0000000000..4aeb16abd9
--- /dev/null
+++ b/contrib/git-ack
@@ -0,0 +1,84 @@
+msg=`mktemp`
+patch=`mktemp`
+info=`git mailinfo $msg $patch`
+subj=`echo "$info"|sed -n 's/^Subject: //p'`
+author=`echo "$info"|sed -n 's/^Author: //p'`
+email=`echo "$info"|sed -n 's/^Email: //p'`
+auth="$author <$email>"
+date=`echo "$info"|sed -n 's/^Date: //p'`
+sign=`mktemp`
+echo "ack! $subj" > $sign
+echo "" >> $sign
+if
+ git diff --cached HEAD
+then
+ nop < /dev/null
+else
+ echo "DIFF in cache. Not acked, reset or commit!"
+ exit 1
+fi
+GIT_DIR=`pwd`/${GIT_DIR}
+
+usage () {
+ echo "Usage: git ack " \
+ "[-s|--save|-a|--append|-r|--restore |-c|--clear]\n" >& 2;
+ exit 1;
+}
+
+append=
+save=
+clear=
+
+while test $# != 0
+do
+ case "$1" in
+ -a|--append)
+ append="y"
+ ;;
+ -s|--s)
+ save="y"
+ ;;
+ -r|--restore)
+ restore="y"
+ ;;
+ -c|--clear)
+ clear="y"
+ ;;
+ *)
+ usage ;;
+ esac
+ shift
+done
+
+if
+ test "$clear"
+then
+ rm -f "${GIT_DIR}/ACKS"
+fi
+
+if
+ test "$save"
+then
+ if
+ test "$append"
+ then
+ cat $msg >> "${GIT_DIR}/ACKS"
+ else
+ cat $msg > "${GIT_DIR}/ACKS"
+ fi
+fi
+
+if
+ test "$restore"
+then
+ msg = ${GIT_DIR}/ACKS
+fi
+
+if
+ grep '^[A-Z][A-Za-z-]*-by:' $msg >> $sign
+then
+ git commit --allow-empty -F $sign --author="$auth" --date="$date"
+else
+ echo "No signature found!"
+ exit 2
+fi