Remove git-applypatch
The previous one removed git-applymbox, which was the sole user of this tool. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
d45cc6e267
commit
59c8e2cb2a
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,7 +7,6 @@ git-add--interactive
|
||||
git-am
|
||||
git-annotate
|
||||
git-apply
|
||||
git-applypatch
|
||||
git-archimport
|
||||
git-archive
|
||||
git-bisect
|
||||
|
@ -239,7 +239,7 @@ One test you could do yourself if your MUA is set up correctly is:
|
||||
$ git fetch http://kernel.org/pub/scm/git/git.git master:test-apply
|
||||
$ git checkout test-apply
|
||||
$ git reset --hard
|
||||
$ git applymbox a.patch
|
||||
$ git am a.patch
|
||||
|
||||
If it does not apply correctly, there can be various reasons.
|
||||
|
||||
@ -247,7 +247,7 @@ If it does not apply correctly, there can be various reasons.
|
||||
does not have much to do with your MUA. Please rebase the
|
||||
patch appropriately.
|
||||
|
||||
* Your MUA corrupted your patch; applymbox would complain that
|
||||
* Your MUA corrupted your patch; "am" would complain that
|
||||
the patch does not apply. Look at .dotest/ subdirectory and
|
||||
see what 'patch' file contains and check for the common
|
||||
corruption patterns mentioned above.
|
||||
|
@ -72,7 +72,6 @@ __DATA__
|
||||
git-add mainporcelain
|
||||
git-am mainporcelain
|
||||
git-annotate ancillaryinterrogators
|
||||
git-applypatch purehelpers
|
||||
git-apply plumbingmanipulators
|
||||
git-archimport foreignscminterface
|
||||
git-archive mainporcelain
|
||||
|
@ -145,7 +145,7 @@ names.
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
gitlink:git-applypatch[1], gitlink:git-apply[1].
|
||||
gitlink:git-apply[1].
|
||||
|
||||
|
||||
Author
|
||||
|
@ -1,53 +0,0 @@
|
||||
git-applypatch(1)
|
||||
=================
|
||||
|
||||
NAME
|
||||
----
|
||||
git-applypatch - Apply one patch extracted from an e-mail
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-applypatch' <msg> <patch> <info> [<signoff>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This is usually not what an end user wants to run directly. See
|
||||
gitlink:git-am[1] instead.
|
||||
|
||||
Takes three files <msg>, <patch>, and <info> prepared from an
|
||||
e-mail message by 'git-mailinfo', and creates a commit. It is
|
||||
usually not necessary to use this command directly.
|
||||
|
||||
This command can run `applypatch-msg`, `pre-applypatch`, and
|
||||
`post-applypatch` hooks. See link:hooks.html[hooks] for more
|
||||
information.
|
||||
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
<msg>::
|
||||
Commit log message (sans the first line, which comes
|
||||
from e-mail Subject stored in <info>).
|
||||
|
||||
<patch>::
|
||||
The patch to apply.
|
||||
|
||||
<info>::
|
||||
Author and subject information extracted from e-mail,
|
||||
used on "author" line and as the first line of the
|
||||
commit log message.
|
||||
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Linus Torvalds <torvalds@osdl.org>
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
@ -16,7 +16,7 @@ DESCRIPTION
|
||||
Reading a single e-mail message from the standard input, and
|
||||
writes the commit log message in <msg> file, and the patches in
|
||||
<patch> file. The author name, e-mail and e-mail subject are
|
||||
written out to the standard output to be used by git-applypatch
|
||||
written out to the standard output to be used by git-am
|
||||
to create a commit. It is usually not necessary to use this
|
||||
command directly. See gitlink:git-am[1] instead.
|
||||
|
||||
|
@ -12,11 +12,10 @@ This document describes the currently defined hooks.
|
||||
applypatch-msg
|
||||
--------------
|
||||
|
||||
This hook is invoked by `git-applypatch` script, which is
|
||||
typically invoked by `git-am`. It takes a single
|
||||
This hook is invoked by `git-am` script. It takes a single
|
||||
parameter, the name of the file that holds the proposed commit
|
||||
log message. Exiting with non-zero status causes
|
||||
`git-applypatch` to abort before applying the patch.
|
||||
`git-am` to abort before applying the patch.
|
||||
|
||||
The hook is allowed to edit the message file in place, and can
|
||||
be used to normalize the message into some project standard
|
||||
@ -29,8 +28,7 @@ The default 'applypatch-msg' hook, when enabled, runs the
|
||||
pre-applypatch
|
||||
--------------
|
||||
|
||||
This hook is invoked by `git-applypatch` script, which is
|
||||
typically invoked by `git-am`. It takes no parameter,
|
||||
This hook is invoked by `git-am`. It takes no parameter,
|
||||
and is invoked after the patch is applied, but before a commit
|
||||
is made. Exiting with non-zero status causes the working tree
|
||||
after application of the patch not committed.
|
||||
@ -44,12 +42,11 @@ The default 'pre-applypatch' hook, when enabled, runs the
|
||||
post-applypatch
|
||||
---------------
|
||||
|
||||
This hook is invoked by `git-applypatch` script, which is
|
||||
typically invoked by `git-am`. It takes no parameter,
|
||||
This hook is invoked by `git-am`. It takes no parameter,
|
||||
and is invoked after the patch is applied and a commit is made.
|
||||
|
||||
This hook is meant primarily for notification, and cannot affect
|
||||
the outcome of `git-applypatch`.
|
||||
the outcome of `git-am`.
|
||||
|
||||
pre-commit
|
||||
----------
|
||||
|
2
Makefile
2
Makefile
@ -206,7 +206,7 @@ SCRIPT_SH = \
|
||||
git-repack.sh git-request-pull.sh git-reset.sh \
|
||||
git-sh-setup.sh \
|
||||
git-tag.sh git-verify-tag.sh \
|
||||
git-applypatch.sh git-am.sh \
|
||||
git-am.sh \
|
||||
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
|
||||
git-merge-resolve.sh git-merge-ours.sh \
|
||||
git-lost-found.sh git-quiltimport.sh
|
||||
|
@ -1,212 +0,0 @@
|
||||
#!/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
|
||||
##
|
||||
|
||||
USAGE='<msg> <patch> <info> [<signoff>]'
|
||||
. git-sh-setup
|
||||
|
||||
case "$#" in 3|4) ;; *) usage ;; esac
|
||||
|
||||
final=.dotest/final-commit
|
||||
##
|
||||
## If this file exists, we ask before applying
|
||||
##
|
||||
query_apply=.dotest/.query_apply
|
||||
|
||||
## We do not munge the first line of the commit message too much
|
||||
## if this file exists.
|
||||
keep_subject=.dotest/.keep_subject
|
||||
|
||||
## We do not attempt the 3-way merge fallback unless this file exists.
|
||||
fall_back_3way=.dotest/.3way
|
||||
|
||||
MSGFILE=$1
|
||||
PATCHFILE=$2
|
||||
INFO=$3
|
||||
SIGNOFF=$4
|
||||
EDIT=${VISUAL:-${EDITOR:-vi}}
|
||||
|
||||
export GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$INFO")"
|
||||
export GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$INFO")"
|
||||
export GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$INFO")"
|
||||
export SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$INFO")"
|
||||
|
||||
if test '' != "$SIGNOFF"
|
||||
then
|
||||
if test -f "$SIGNOFF"
|
||||
then
|
||||
SIGNOFF=`cat "$SIGNOFF"` || exit
|
||||
elif case "$SIGNOFF" in yes | true | me | please) : ;; *) false ;; esac
|
||||
then
|
||||
SIGNOFF=`git-var GIT_COMMITTER_IDENT | sed -e '
|
||||
s/>.*/>/
|
||||
s/^/Signed-off-by: /'
|
||||
`
|
||||
else
|
||||
SIGNOFF=
|
||||
fi
|
||||
if test '' != "$SIGNOFF"
|
||||
then
|
||||
LAST_SIGNED_OFF_BY=`
|
||||
sed -ne '/^Signed-off-by: /p' "$MSGFILE" |
|
||||
tail -n 1
|
||||
`
|
||||
test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
|
||||
test '' = "$LAST_SIGNED_OFF_BY" && echo
|
||||
echo "$SIGNOFF"
|
||||
} >>"$MSGFILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
patch_header=
|
||||
test -f "$keep_subject" || patch_header='[PATCH] '
|
||||
|
||||
{
|
||||
echo "$patch_header$SUBJECT"
|
||||
if test -s "$MSGFILE"
|
||||
then
|
||||
echo
|
||||
cat "$MSGFILE"
|
||||
fi
|
||||
} >"$final"
|
||||
|
||||
interactive=yes
|
||||
test -f "$query_apply" || interactive=no
|
||||
|
||||
while [ "$interactive" = yes ]; do
|
||||
echo "Commit Body is:"
|
||||
echo "--------------------------"
|
||||
cat "$final"
|
||||
echo "--------------------------"
|
||||
printf "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
|
||||
read reply
|
||||
case "$reply" in
|
||||
y|Y) interactive=no;;
|
||||
n|N) exit 2;; # special value to tell dotest to keep going
|
||||
e|E) "$EDIT" "$final";;
|
||||
a|A) rm -f "$query_apply"
|
||||
interactive=no ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -x "$GIT_DIR"/hooks/applypatch-msg
|
||||
then
|
||||
"$GIT_DIR"/hooks/applypatch-msg "$final" || exit
|
||||
fi
|
||||
|
||||
echo
|
||||
echo Applying "'$SUBJECT'"
|
||||
echo
|
||||
|
||||
git-apply --index "$PATCHFILE" || {
|
||||
|
||||
# git-apply exits with status 1 when the patch does not apply,
|
||||
# but it die()s with other failures, most notably upon corrupt
|
||||
# patch. In the latter case, there is no point to try applying
|
||||
# it to another tree and do 3-way merge.
|
||||
test $? = 1 || exit 1
|
||||
|
||||
test -f "$fall_back_3way" || exit 1
|
||||
|
||||
# Here if we know which revision the patch applies to,
|
||||
# we create a temporary working tree and index, apply the
|
||||
# patch, and attempt 3-way merge with the resulting tree.
|
||||
|
||||
O_OBJECT=`cd "$GIT_OBJECT_DIRECTORY" && pwd`
|
||||
rm -fr .patch-merge-*
|
||||
|
||||
if git-apply -z --index-info "$PATCHFILE" \
|
||||
>.patch-merge-index-info 2>/dev/null &&
|
||||
GIT_INDEX_FILE=.patch-merge-tmp-index \
|
||||
git-update-index -z --index-info <.patch-merge-index-info &&
|
||||
GIT_INDEX_FILE=.patch-merge-tmp-index \
|
||||
git-write-tree >.patch-merge-tmp-base &&
|
||||
(
|
||||
mkdir .patch-merge-tmp-dir &&
|
||||
cd .patch-merge-tmp-dir &&
|
||||
GIT_INDEX_FILE="../.patch-merge-tmp-index" \
|
||||
GIT_OBJECT_DIRECTORY="$O_OBJECT" \
|
||||
git-apply $binary --index
|
||||
) <"$PATCHFILE"
|
||||
then
|
||||
echo Using index info to reconstruct a base tree...
|
||||
mv .patch-merge-tmp-base .patch-merge-base
|
||||
mv .patch-merge-tmp-index .patch-merge-index
|
||||
else
|
||||
(
|
||||
N=10
|
||||
|
||||
# Otherwise, try nearby trees that can be used to apply the
|
||||
# patch.
|
||||
git-rev-list --max-count=$N HEAD
|
||||
|
||||
# or hoping the patch is against known tags...
|
||||
git-ls-remote --tags .
|
||||
) |
|
||||
while read base junk
|
||||
do
|
||||
# Try it if we have it as a tree.
|
||||
git-cat-file tree "$base" >/dev/null 2>&1 || continue
|
||||
|
||||
rm -fr .patch-merge-tmp-* &&
|
||||
mkdir .patch-merge-tmp-dir || break
|
||||
(
|
||||
cd .patch-merge-tmp-dir &&
|
||||
GIT_INDEX_FILE=../.patch-merge-tmp-index &&
|
||||
GIT_OBJECT_DIRECTORY="$O_OBJECT" &&
|
||||
export GIT_INDEX_FILE GIT_OBJECT_DIRECTORY &&
|
||||
git-read-tree "$base" &&
|
||||
git-apply --index &&
|
||||
mv ../.patch-merge-tmp-index ../.patch-merge-index &&
|
||||
echo "$base" >../.patch-merge-base
|
||||
) <"$PATCHFILE" 2>/dev/null && break
|
||||
done
|
||||
fi
|
||||
|
||||
test -f .patch-merge-index &&
|
||||
his_tree=$(GIT_INDEX_FILE=.patch-merge-index git-write-tree) &&
|
||||
orig_tree=$(cat .patch-merge-base) &&
|
||||
rm -fr .patch-merge-* || exit 1
|
||||
|
||||
echo Falling back to patching base and 3-way merge using $orig_tree...
|
||||
|
||||
# This is not so wrong. Depending on which base we picked,
|
||||
# orig_tree may be wildly different from ours, but his_tree
|
||||
# has the same set of wildly different changes in parts the
|
||||
# patch did not touch, so resolve ends up canceling them,
|
||||
# saying that we reverted all those changes.
|
||||
|
||||
if git-merge-resolve $orig_tree -- HEAD $his_tree
|
||||
then
|
||||
echo Done.
|
||||
else
|
||||
echo Failed to merge in the changes.
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if test -x "$GIT_DIR"/hooks/pre-applypatch
|
||||
then
|
||||
"$GIT_DIR"/hooks/pre-applypatch || exit
|
||||
fi
|
||||
|
||||
tree=$(git-write-tree) || exit 1
|
||||
echo Wrote tree $tree
|
||||
parent=$(git-rev-parse --verify HEAD) &&
|
||||
commit=$(git-commit-tree $tree -p $parent <"$final") || exit 1
|
||||
echo Committed: $commit
|
||||
git-update-ref -m "applypatch: $SUBJECT" HEAD $commit $parent || exit
|
||||
|
||||
if test -x "$GIT_DIR"/hooks/post-applypatch
|
||||
then
|
||||
"$GIT_DIR"/hooks/post-applypatch
|
||||
fi
|
Loading…
Reference in New Issue
Block a user