mirror of
https://github.com/git/git.git
synced 2025-01-10 01:23:41 +08:00
62c1f6b4af
Now that git does pretty reliable date parsing, we might as well get the date from the email itself. Of course, it's still questionable whether the date on the email is all that relevant, but it's certainly no worse than taking the commit date.
70 lines
1.8 KiB
Bash
Executable File
70 lines
1.8 KiB
Bash
Executable File
#!/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 - file with list of filenames the patch touches
|
|
## $4 - "info" file with Author, email and subject
|
|
## $5 - optional file containing signoff to add
|
|
##
|
|
signoff="$5"
|
|
final=.dotest/final-commit
|
|
##
|
|
## If this file exists, we ask before applying
|
|
##
|
|
query_apply=.dotest/.query_apply
|
|
MSGFILE=$1
|
|
PATCHFILE=$2
|
|
FILES=$3
|
|
INFO=$4
|
|
EDIT=${VISUAL:-$EDITOR}
|
|
EDIT=${EDIT:-vi}
|
|
|
|
export AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' .dotest/info)"
|
|
export AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' .dotest/info)"
|
|
export 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-check-files $(cat $FILES) || exit 1
|
|
git-checkout-cache -q $(cat $FILES) || exit 1
|
|
patch -u --no-backup-if-mismatch -f -p1 --fuzz=0 --input=$PATCHFILE || exit 1
|
|
git-update-cache --add --remove $(cat $FILES) || 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
|