am: support --show-current-patch=diff to retrieve .git/rebase-apply/patch
When "git am --show-current-patch" was added in commit 984913a210 ("am: add --show-current-patch", 2018-02-12), "git am" started recommending it as a replacement for .git/rebase-merge/patch. Unfortunately the suggestion is somewhat misguided; for example, the output of "git am --show-current-patch" cannot be passed to "git apply" if it is encoded as quoted-printable or base64. Add a new mode to "git am --show-current-patch" in order to straighten the suggestion. Reported-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f3b4822899
commit
aa416b22ea
@ -16,7 +16,7 @@ SYNOPSIS
|
|||||||
[--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
|
[--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
|
||||||
[--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
|
[--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
|
||||||
[(<mbox> | <Maildir>)...]
|
[(<mbox> | <Maildir>)...]
|
||||||
'git am' (--continue | --skip | --abort | --quit | --show-current-patch[=raw])
|
'git am' (--continue | --skip | --abort | --quit | --show-current-patch[=(diff|raw)])
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -176,10 +176,11 @@ default. You can use `--no-utf8` to override this.
|
|||||||
Abort the patching operation but keep HEAD and the index
|
Abort the patching operation but keep HEAD and the index
|
||||||
untouched.
|
untouched.
|
||||||
|
|
||||||
--show-current-patch[=raw]::
|
--show-current-patch[=(diff|raw)]::
|
||||||
Show the raw contents of the e-mail message at which `git am`
|
Show the message at which `git am` has stopped due to
|
||||||
has stopped due to conflicts. The argument must be omitted or
|
conflicts. If `raw` is specified, show the raw contents of
|
||||||
`raw`.
|
the e-mail message; if `diff`, show the diff portion only.
|
||||||
|
Defaults to `raw`.
|
||||||
|
|
||||||
DISCUSSION
|
DISCUSSION
|
||||||
----------
|
----------
|
||||||
|
@ -83,6 +83,7 @@ enum signoff_type {
|
|||||||
|
|
||||||
enum show_patch_type {
|
enum show_patch_type {
|
||||||
SHOW_PATCH_RAW = 0,
|
SHOW_PATCH_RAW = 0,
|
||||||
|
SHOW_PATCH_DIFF = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct am_state {
|
struct am_state {
|
||||||
@ -1767,7 +1768,7 @@ static void am_run(struct am_state *state, int resume)
|
|||||||
linelen(state->msg), state->msg);
|
linelen(state->msg), state->msg);
|
||||||
|
|
||||||
if (advice_amworkdir)
|
if (advice_amworkdir)
|
||||||
advise(_("Use 'git am --show-current-patch' to see the failed patch"));
|
advise(_("Use 'git am --show-current-patch=diff' to see the failed patch"));
|
||||||
|
|
||||||
die_user_resolve(state);
|
die_user_resolve(state);
|
||||||
}
|
}
|
||||||
@ -2086,6 +2087,9 @@ static int show_patch(struct am_state *state, enum show_patch_type sub_mode)
|
|||||||
case SHOW_PATCH_RAW:
|
case SHOW_PATCH_RAW:
|
||||||
patch_path = am_path(state, msgnum(state));
|
patch_path = am_path(state, msgnum(state));
|
||||||
break;
|
break;
|
||||||
|
case SHOW_PATCH_DIFF:
|
||||||
|
patch_path = am_path(state, "patch");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
BUG("invalid mode for --show-current-patch");
|
BUG("invalid mode for --show-current-patch");
|
||||||
}
|
}
|
||||||
@ -2154,6 +2158,7 @@ static int parse_opt_show_current_patch(const struct option *opt, const char *ar
|
|||||||
* when you add new options
|
* when you add new options
|
||||||
*/
|
*/
|
||||||
const char *valid_modes[] = {
|
const char *valid_modes[] = {
|
||||||
|
[SHOW_PATCH_DIFF] = "diff",
|
||||||
[SHOW_PATCH_RAW] = "raw"
|
[SHOW_PATCH_RAW] = "raw"
|
||||||
};
|
};
|
||||||
int new_value = SHOW_PATCH_RAW;
|
int new_value = SHOW_PATCH_RAW;
|
||||||
@ -2279,7 +2284,7 @@ int cmd_am(int argc, const char **argv, const char *prefix)
|
|||||||
N_("abort the patching operation but keep HEAD where it is."),
|
N_("abort the patching operation but keep HEAD where it is."),
|
||||||
RESUME_QUIT),
|
RESUME_QUIT),
|
||||||
{ OPTION_CALLBACK, 0, "show-current-patch", &resume.mode,
|
{ OPTION_CALLBACK, 0, "show-current-patch", &resume.mode,
|
||||||
"raw",
|
"(diff|raw)",
|
||||||
N_("show the patch being applied"),
|
N_("show the patch being applied"),
|
||||||
PARSE_OPT_CMDMODE | PARSE_OPT_OPTARG | PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
|
PARSE_OPT_CMDMODE | PARSE_OPT_OPTARG | PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
|
||||||
parse_opt_show_current_patch, RESUME_SHOW_PATCH },
|
parse_opt_show_current_patch, RESUME_SHOW_PATCH },
|
||||||
|
@ -1180,7 +1180,7 @@ __git_count_arguments ()
|
|||||||
|
|
||||||
__git_whitespacelist="nowarn warn error error-all fix"
|
__git_whitespacelist="nowarn warn error error-all fix"
|
||||||
__git_patchformat="mbox stgit stgit-series hg mboxrd"
|
__git_patchformat="mbox stgit stgit-series hg mboxrd"
|
||||||
__git_showcurrentpatch="raw"
|
__git_showcurrentpatch="diff raw"
|
||||||
__git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
|
__git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
|
||||||
|
|
||||||
_git_am ()
|
_git_am ()
|
||||||
|
@ -671,11 +671,21 @@ test_expect_success 'am --show-current-patch=raw' '
|
|||||||
test_cmp .git/rebase-apply/0001 actual.patch
|
test_cmp .git/rebase-apply/0001 actual.patch
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'am --show-current-patch=diff' '
|
||||||
|
git am --show-current-patch=diff >actual.patch &&
|
||||||
|
test_cmp .git/rebase-apply/patch actual.patch
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'am accepts repeated --show-current-patch' '
|
test_expect_success 'am accepts repeated --show-current-patch' '
|
||||||
git am --show-current-patch --show-current-patch=raw >actual.patch &&
|
git am --show-current-patch --show-current-patch=raw >actual.patch &&
|
||||||
test_cmp .git/rebase-apply/0001 actual.patch
|
test_cmp .git/rebase-apply/0001 actual.patch
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'am detects incompatible --show-current-patch' '
|
||||||
|
test_must_fail git am --show-current-patch=raw --show-current-patch=diff &&
|
||||||
|
test_must_fail git am --show-current-patch --show-current-patch=diff
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'am --skip works' '
|
test_expect_success 'am --skip works' '
|
||||||
echo goodbye >expected &&
|
echo goodbye >expected &&
|
||||||
git am --skip &&
|
git am --skip &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user