Skip to content

Commit

Permalink
Merge branch 'jz/apply-quiet-and-allow-empty'
Browse files Browse the repository at this point in the history
"git apply" has been taught to ignore a message without a patch
with the "--allow-empty" option.  It also learned to honor the
"--quiet" option given from the command line.

* jz/apply-quiet-and-allow-empty:
  git-apply: add --allow-empty flag
  git-apply: add --quiet flag
  • Loading branch information
gitster committed Dec 23, 2021
2 parents 5536415 + 324eb77 commit 62a3a27
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
11 changes: 10 additions & 1 deletion Documentation/git-apply.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ SYNOPSIS
[--ignore-space-change | --ignore-whitespace]
[--whitespace=(nowarn|warn|fix|error|error-all)]
[--exclude=<path>] [--include=<path>] [--directory=<root>]
[--verbose] [--unsafe-paths] [<patch>...]
[--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>...]

DESCRIPTION
-----------
Expand Down Expand Up @@ -228,6 +228,11 @@ behavior:
current patch being applied will be printed. This option will cause
additional information to be reported.

-q::
--quiet::
Suppress stderr output. Messages about patch status and progress
will not be printed.

--recount::
Do not trust the line counts in the hunk headers, but infer them
by inspecting the patch (e.g. after editing the patch without
Expand All @@ -251,6 +256,10 @@ When `git apply` is used as a "better GNU patch", the user can pass
the `--unsafe-paths` option to override this safety check. This option
has no effect when `--index` or `--cached` is in use.

--allow-empty::
Don't return error for patches containing no diff. This includes
empty patches and patches with commit text only.

CONFIGURATION
-------------

Expand Down
10 changes: 7 additions & 3 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -4752,8 +4752,10 @@ static int apply_patch(struct apply_state *state,
}

if (!list && !skipped_patch) {
error(_("unrecognized input"));
res = -128;
if (!state->allow_empty) {
error(_("No valid patches in input (allow with \"--allow-empty\")"));
res = -128;
}
goto end;
}

Expand Down Expand Up @@ -5071,7 +5073,7 @@ int apply_parse_options(int argc, const char **argv,
N_("leave the rejected hunks in corresponding *.rej files")),
OPT_BOOL(0, "allow-overlap", &state->allow_overlap,
N_("allow overlapping hunks")),
OPT__VERBOSE(&state->apply_verbosity, N_("be verbose")),
OPT__VERBOSITY(&state->apply_verbosity),
OPT_BIT(0, "inaccurate-eof", options,
N_("tolerate incorrectly detected missing new-line at the end of file"),
APPLY_OPT_INACCURATE_EOF),
Expand All @@ -5081,6 +5083,8 @@ int apply_parse_options(int argc, const char **argv,
OPT_CALLBACK(0, "directory", state, N_("root"),
N_("prepend <root> to all filenames"),
apply_option_parse_directory),
OPT_BOOL(0, "allow-empty", &state->allow_empty,
N_("don't return error for empty patches")),
OPT_END()
};

Expand Down
1 change: 1 addition & 0 deletions apply.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ struct apply_state {
int threeway;
int unidiff_zero;
int unsafe_paths;
int allow_empty;

/* Other non boolean parameters */
struct repository *repo;
Expand Down
22 changes: 18 additions & 4 deletions t/t4126-apply-empty.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ test_expect_success setup '
git add empty &&
test_tick &&
git commit -m initial &&
git commit --allow-empty -m "empty commit" &&
git format-patch --always HEAD~ >empty.patch &&
for i in a b c d e
do
echo $i
Expand All @@ -27,30 +29,42 @@ test_expect_success setup '
'

test_expect_success 'apply empty' '
git reset --hard &&
rm -f missing &&
test_when_finished "git reset --hard" &&
git apply patch0 &&
test_cmp expect empty
'

test_expect_success 'apply empty patch fails' '
test_when_finished "git reset --hard" &&
test_must_fail git apply empty.patch &&
test_must_fail git apply - </dev/null
'

test_expect_success 'apply with --allow-empty succeeds' '
test_when_finished "git reset --hard" &&
git apply --allow-empty empty.patch &&
git apply --allow-empty - </dev/null
'

test_expect_success 'apply --index empty' '
git reset --hard &&
rm -f missing &&
test_when_finished "git reset --hard" &&
git apply --index patch0 &&
test_cmp expect empty &&
git diff --exit-code
'

test_expect_success 'apply create' '
git reset --hard &&
rm -f missing &&
test_when_finished "git reset --hard" &&
git apply patch1 &&
test_cmp expect missing
'

test_expect_success 'apply --index create' '
git reset --hard &&
rm -f missing &&
test_when_finished "git reset --hard" &&
git apply --index patch1 &&
test_cmp expect missing &&
git diff --exit-code
Expand Down

0 comments on commit 62a3a27

Please sign in to comment.