зеркало из https://github.com/microsoft/git.git
git-am: add --directory=<dir> option
Thanks to a200337
(git-am: propagate -C<n>, -p<n> options as well,
2008-12-04) and commits around it, "git am" is equipped to correctly
propagate the command line flags such as -C/-p/-whitespace across a patch
failure and restart.
It is trivial to support --directory option now, resurrecting previous
attempts by Kevin and Simon.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d727f676ad
Коммит
b47dfe9e9c
|
@ -11,7 +11,7 @@ SYNOPSIS
|
||||||
[verse]
|
[verse]
|
||||||
'git am' [--signoff] [--keep] [--utf8 | --no-utf8]
|
'git am' [--signoff] [--keep] [--utf8 | --no-utf8]
|
||||||
[--3way] [--interactive]
|
[--3way] [--interactive]
|
||||||
[--whitespace=<option>] [-C<n>] [-p<n>]
|
[--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
|
||||||
[<mbox> | <Maildir>...]
|
[<mbox> | <Maildir>...]
|
||||||
'git am' (--skip | --resolved | --abort)
|
'git am' (--skip | --resolved | --abort)
|
||||||
|
|
||||||
|
@ -60,12 +60,9 @@ default. You could use `--no-utf8` to override this.
|
||||||
available locally.
|
available locally.
|
||||||
|
|
||||||
--whitespace=<option>::
|
--whitespace=<option>::
|
||||||
This flag is passed to the 'git-apply' (see linkgit:git-apply[1])
|
|
||||||
program that applies
|
|
||||||
the patch.
|
|
||||||
|
|
||||||
-C<n>::
|
-C<n>::
|
||||||
-p<n>::
|
-p<n>::
|
||||||
|
--directory=<dir>::
|
||||||
These flags are passed to the 'git-apply' (see linkgit:git-apply[1])
|
These flags are passed to the 'git-apply' (see linkgit:git-apply[1])
|
||||||
program that applies
|
program that applies
|
||||||
the patch.
|
the patch.
|
||||||
|
|
17
git-am.sh
17
git-am.sh
|
@ -16,6 +16,7 @@ s,signoff add a Signed-off-by line to the commit message
|
||||||
u,utf8 recode into utf8 (default)
|
u,utf8 recode into utf8 (default)
|
||||||
k,keep pass -k flag to git-mailinfo
|
k,keep pass -k flag to git-mailinfo
|
||||||
whitespace= pass it through git-apply
|
whitespace= pass it through git-apply
|
||||||
|
directory= pass it through git-apply
|
||||||
C= pass it through git-apply
|
C= pass it through git-apply
|
||||||
p= pass it through git-apply
|
p= pass it through git-apply
|
||||||
resolvemsg= override error message when patch failure occurs
|
resolvemsg= override error message when patch failure occurs
|
||||||
|
@ -33,6 +34,14 @@ cd_to_toplevel
|
||||||
git var GIT_COMMITTER_IDENT >/dev/null ||
|
git var GIT_COMMITTER_IDENT >/dev/null ||
|
||||||
die "You need to set your committer info first"
|
die "You need to set your committer info first"
|
||||||
|
|
||||||
|
sq () {
|
||||||
|
for sqarg
|
||||||
|
do
|
||||||
|
printf "%s" "$sqarg" |
|
||||||
|
sed -e 's/'\''/'\''\'\'''\''/g' -e 's/.*/ '\''&'\''/'
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
stop_here () {
|
stop_here () {
|
||||||
echo "$1" >"$dotest/next"
|
echo "$1" >"$dotest/next"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -155,10 +164,10 @@ do
|
||||||
;;
|
;;
|
||||||
--resolvemsg)
|
--resolvemsg)
|
||||||
shift; resolvemsg=$1 ;;
|
shift; resolvemsg=$1 ;;
|
||||||
--whitespace)
|
--whitespace|--directory)
|
||||||
git_apply_opt="$git_apply_opt $1=$2"; shift ;;
|
git_apply_opt="$git_apply_opt $(sq "$1=$2")"; shift ;;
|
||||||
-C|-p)
|
-C|-p)
|
||||||
git_apply_opt="$git_apply_opt $1$2"; shift ;;
|
git_apply_opt="$git_apply_opt $(sq "$1$2")"; shift ;;
|
||||||
--)
|
--)
|
||||||
shift; break ;;
|
shift; break ;;
|
||||||
*)
|
*)
|
||||||
|
@ -459,7 +468,7 @@ do
|
||||||
|
|
||||||
case "$resolved" in
|
case "$resolved" in
|
||||||
'')
|
'')
|
||||||
git apply $git_apply_opt --index "$dotest/patch"
|
eval 'git apply '"$git_apply_opt"' --index "$dotest/patch"'
|
||||||
apply_status=$?
|
apply_status=$?
|
||||||
;;
|
;;
|
||||||
t)
|
t)
|
||||||
|
|
|
@ -50,4 +50,12 @@ test_expect_success 'interrupted am -C1 -p2' '
|
||||||
grep "^Three$" file-2
|
grep "^Three$" file-2
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'interrupted am --directory="frotz nitfol"' '
|
||||||
|
rm -rf .git/rebase-apply &&
|
||||||
|
git reset --hard initial &&
|
||||||
|
test_must_fail git am --directory="frotz nitfol" "$tm"/am-test-5-? &&
|
||||||
|
git am --skip &&
|
||||||
|
grep One "frotz nitfol/file-5"
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
From: A U Thor <au.thor@example.com>
|
||||||
|
Date: Thu Dec 4 16:00:00 2008 -0800
|
||||||
|
Subject: Six
|
||||||
|
|
||||||
|
Applying this patch with --directory='frotz nitfol' should fail
|
||||||
|
|
||||||
|
diff --git i/junk/file-2 w/junk/file-2
|
||||||
|
index 06e567b..b6f3a16 100644
|
||||||
|
--- i/junk/file-2
|
||||||
|
+++ w/junk/file-2
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
One
|
||||||
|
2
|
||||||
|
-3
|
||||||
|
+Three
|
||||||
|
4
|
||||||
|
5
|
||||||
|
-6
|
||||||
|
+Six
|
||||||
|
7
|
|
@ -0,0 +1,15 @@
|
||||||
|
From: A U Thor <au.thor@example.com>
|
||||||
|
Date: Thu Dec 4 16:00:00 2008 -0800
|
||||||
|
Subject: Six
|
||||||
|
|
||||||
|
Applying this patch with --directory='frotz nitfol' should succeed
|
||||||
|
|
||||||
|
diff --git i/file-5 w/file-5
|
||||||
|
new file mode 100644
|
||||||
|
index 000000..1d6ed9f
|
||||||
|
--- /dev/null
|
||||||
|
+++ w/file-5
|
||||||
|
@@ -0,0 +1,3 @@
|
||||||
|
+One
|
||||||
|
+two
|
||||||
|
+three
|
Загрузка…
Ссылка в новой задаче