diff options
-rwxr-xr-x | contrib/git-ack | 84 |
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 |