summaryrefslogtreecommitdiff
path: root/tools/git-applypatch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2005-07-24 01:46:27 (GMT)
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-24 01:46:27 (GMT)
commitfd1fcd9f57406cd5f278adb6b3ceeb1b7637062a (patch)
tree5cf73dc0ead0f081222ef2c7f16210c922b39b52 /tools/git-applypatch
parentc0a58fbb511028a3500987417376a5cfb2c141da (diff)
downloadgit-fd1fcd9f57406cd5f278adb6b3ceeb1b7637062a.zip
git-fd1fcd9f57406cd5f278adb6b3ceeb1b7637062a.tar.gz
git-fd1fcd9f57406cd5f278adb6b3ceeb1b7637062a.tar.bz2
Rename the "tools" programs to also have the "git-" prefix
Hey, people are using them, and we have an install target for them, so make sure that we can actually install them sanely without disturbing the namespace.
Diffstat (limited to 'tools/git-applypatch')
-rwxr-xr-xtools/git-applypatch64
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/git-applypatch b/tools/git-applypatch
new file mode 100755
index 0000000..5a3a44b
--- /dev/null
+++ b/tools/git-applypatch
@@ -0,0 +1,64 @@
+#!/bin/sh
+##
+## applypatch takes four file arguments, and uses those to
+## apply the unpacked patch (surprise surprise) that they
+## represent to the current tree.
+##
+## The arguments are:
+## $1 - file with commit message
+## $2 - file with the actual patch
+## $3 - "info" file with Author, email and subject
+## $4 - optional file containing signoff to add
+##
+signoff="$4"
+final=.dotest/final-commit
+##
+## If this file exists, we ask before applying
+##
+query_apply=.dotest/.query_apply
+MSGFILE=$1
+PATCHFILE=$2
+INFO=$3
+EDIT=${VISUAL:-$EDITOR}
+EDIT=${EDIT:-vi}
+
+export GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' .dotest/info)"
+export GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' .dotest/info)"
+export GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' .dotest/info)"
+export SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' .dotest/info)"
+
+if [ -n "$signoff" -a -f "$signoff" ]; then
+ cat $signoff >> $MSGFILE
+fi
+
+(echo "[PATCH] $SUBJECT" ; if [ -s $MSGFILE ]; then echo ; cat $MSGFILE; fi ) > $final
+
+f=0
+[ -f $query_apply ] || f=1
+
+while [ $f -eq 0 ]; do
+ echo "Commit Body is:"
+ echo "--------------------------"
+ cat $final
+ echo "--------------------------"
+ echo -n "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
+ read reply
+ case $reply in
+ y|Y) f=1;;
+ n|N) exit 2;; # special value to tell dotest to keep going
+ e|E) $EDIT $final;;
+ a|A) rm -f $query_apply
+ f=1;;
+ esac
+done
+
+echo
+echo Applying "'$SUBJECT'"
+echo
+
+git-apply --index $PATCHFILE || exit 1
+tree=$(git-write-tree) || exit 1
+echo Wrote tree $tree
+commit=$(git-commit-tree $tree -p $(cat .git/HEAD) < $final) || exit 1
+echo Committed: $commit
+echo $commit > .git/HEAD