mirror of
https://github.com/git/git.git
synced 2024-11-01 06:47:52 +01:00
builtin/apply: move 'apply_in_reverse' global into 'struct apply_state'
To libify the apply functionality the 'apply_in_reverse' variable should not be static and global to the file. Let's move it into 'struct apply_state'. Reviewed-by: Stefan Beller <sbeller@google.com> Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ee87a6e740
commit
2595a8b146
1 changed files with 31 additions and 19 deletions
|
@ -30,6 +30,7 @@ struct apply_state {
|
|||
int check_index; /* preimage must match the indexed version */
|
||||
|
||||
/* These boolean parameters control how the apply is done */
|
||||
int apply_in_reverse;
|
||||
int unidiff_zero;
|
||||
};
|
||||
|
||||
|
@ -49,7 +50,6 @@ static int diffstat;
|
|||
static int numstat;
|
||||
static int summary;
|
||||
static int apply = 1;
|
||||
static int apply_in_reverse;
|
||||
static int apply_with_reject;
|
||||
static int apply_verbosely;
|
||||
static int allow_overlap;
|
||||
|
@ -1556,8 +1556,11 @@ static void check_whitespace(const char *line, int len, unsigned ws_rule)
|
|||
* between a "---" that is part of a patch, and a "---" that starts
|
||||
* the next patch is to look at the line counts..
|
||||
*/
|
||||
static int parse_fragment(const char *line, unsigned long size,
|
||||
struct patch *patch, struct fragment *fragment)
|
||||
static int parse_fragment(struct apply_state *state,
|
||||
const char *line,
|
||||
unsigned long size,
|
||||
struct patch *patch,
|
||||
struct fragment *fragment)
|
||||
{
|
||||
int added, deleted;
|
||||
int len = linelen(line, size), offset;
|
||||
|
@ -1597,12 +1600,12 @@ static int parse_fragment(const char *line, unsigned long size,
|
|||
if (!deleted && !added)
|
||||
leading++;
|
||||
trailing++;
|
||||
if (!apply_in_reverse &&
|
||||
if (!state->apply_in_reverse &&
|
||||
ws_error_action == correct_ws_error)
|
||||
check_whitespace(line, len, patch->ws_rule);
|
||||
break;
|
||||
case '-':
|
||||
if (apply_in_reverse &&
|
||||
if (state->apply_in_reverse &&
|
||||
ws_error_action != nowarn_ws_error)
|
||||
check_whitespace(line, len, patch->ws_rule);
|
||||
deleted++;
|
||||
|
@ -1610,7 +1613,7 @@ static int parse_fragment(const char *line, unsigned long size,
|
|||
trailing = 0;
|
||||
break;
|
||||
case '+':
|
||||
if (!apply_in_reverse &&
|
||||
if (!state->apply_in_reverse &&
|
||||
ws_error_action != nowarn_ws_error)
|
||||
check_whitespace(line, len, patch->ws_rule);
|
||||
added++;
|
||||
|
@ -1666,7 +1669,10 @@ static int parse_fragment(const char *line, unsigned long size,
|
|||
* The (fragment->patch, fragment->size) pair points into the memory given
|
||||
* by the caller, not a copy, when we return.
|
||||
*/
|
||||
static int parse_single_patch(const char *line, unsigned long size, struct patch *patch)
|
||||
static int parse_single_patch(struct apply_state *state,
|
||||
const char *line,
|
||||
unsigned long size,
|
||||
struct patch *patch)
|
||||
{
|
||||
unsigned long offset = 0;
|
||||
unsigned long oldlines = 0, newlines = 0, context = 0;
|
||||
|
@ -1678,7 +1684,7 @@ static int parse_single_patch(const char *line, unsigned long size, struct patch
|
|||
|
||||
fragment = xcalloc(1, sizeof(*fragment));
|
||||
fragment->linenr = state_linenr;
|
||||
len = parse_fragment(line, size, patch, fragment);
|
||||
len = parse_fragment(state, line, size, patch, fragment);
|
||||
if (len <= 0)
|
||||
die(_("corrupt patch at line %d"), state_linenr);
|
||||
fragment->patch = line;
|
||||
|
@ -2008,8 +2014,10 @@ static int parse_chunk(struct apply_state *state, char *buffer, unsigned long si
|
|||
? patch->new_name
|
||||
: patch->old_name);
|
||||
|
||||
patchsize = parse_single_patch(buffer + offset + hdrsize,
|
||||
size - offset - hdrsize, patch);
|
||||
patchsize = parse_single_patch(state,
|
||||
buffer + offset + hdrsize,
|
||||
size - offset - hdrsize,
|
||||
patch);
|
||||
|
||||
if (!patchsize) {
|
||||
static const char git_binary[] = "GIT binary patch\n";
|
||||
|
@ -2741,7 +2749,7 @@ static int apply_one_fragment(struct apply_state *state,
|
|||
if (len < size && patch[len] == '\\')
|
||||
plen--;
|
||||
first = *patch;
|
||||
if (apply_in_reverse) {
|
||||
if (state->apply_in_reverse) {
|
||||
if (first == '-')
|
||||
first = '+';
|
||||
else if (first == '+')
|
||||
|
@ -2914,7 +2922,7 @@ static int apply_one_fragment(struct apply_state *state,
|
|||
|
||||
if (apply_verbosely && applied_pos != pos) {
|
||||
int offset = applied_pos - pos;
|
||||
if (apply_in_reverse)
|
||||
if (state->apply_in_reverse)
|
||||
offset = 0 - offset;
|
||||
fprintf_ln(stderr,
|
||||
Q_("Hunk #%d succeeded at %d (offset %d line).",
|
||||
|
@ -2948,7 +2956,9 @@ static int apply_one_fragment(struct apply_state *state,
|
|||
return (applied_pos < 0);
|
||||
}
|
||||
|
||||
static int apply_binary_fragment(struct image *img, struct patch *patch)
|
||||
static int apply_binary_fragment(struct apply_state *state,
|
||||
struct image *img,
|
||||
struct patch *patch)
|
||||
{
|
||||
struct fragment *fragment = patch->fragments;
|
||||
unsigned long len;
|
||||
|
@ -2961,7 +2971,7 @@ static int apply_binary_fragment(struct image *img, struct patch *patch)
|
|||
patch->old_name);
|
||||
|
||||
/* Binary patch is irreversible without the optional second hunk */
|
||||
if (apply_in_reverse) {
|
||||
if (state->apply_in_reverse) {
|
||||
if (!fragment->next)
|
||||
return error("cannot reverse-apply a binary patch "
|
||||
"without the reverse hunk to '%s'",
|
||||
|
@ -2994,7 +3004,9 @@ static int apply_binary_fragment(struct image *img, struct patch *patch)
|
|||
* but the preimage prepared by the caller in "img" is freed here
|
||||
* or in the helper function apply_binary_fragment() this calls.
|
||||
*/
|
||||
static int apply_binary(struct image *img, struct patch *patch)
|
||||
static int apply_binary(struct apply_state *state,
|
||||
struct image *img,
|
||||
struct patch *patch)
|
||||
{
|
||||
const char *name = patch->old_name ? patch->old_name : patch->new_name;
|
||||
unsigned char sha1[20];
|
||||
|
@ -3055,7 +3067,7 @@ static int apply_binary(struct image *img, struct patch *patch)
|
|||
* apply the patch data to it, which is stored
|
||||
* in the patch->fragments->{patch,size}.
|
||||
*/
|
||||
if (apply_binary_fragment(img, patch))
|
||||
if (apply_binary_fragment(state, img, patch))
|
||||
return error(_("binary patch does not apply to '%s'"),
|
||||
name);
|
||||
|
||||
|
@ -3078,7 +3090,7 @@ static int apply_fragments(struct apply_state *state, struct image *img, struct
|
|||
int nth = 0;
|
||||
|
||||
if (patch->is_binary)
|
||||
return apply_binary(img, patch);
|
||||
return apply_binary(state, img, patch);
|
||||
|
||||
while (frag) {
|
||||
nth++;
|
||||
|
@ -4417,7 +4429,7 @@ static int apply_patch(struct apply_state *state,
|
|||
free_patch(patch);
|
||||
break;
|
||||
}
|
||||
if (apply_in_reverse)
|
||||
if (state->apply_in_reverse)
|
||||
reverse_patches(patch);
|
||||
if (use_patch(state, patch)) {
|
||||
patch_stats(patch);
|
||||
|
@ -4615,7 +4627,7 @@ int cmd_apply(int argc, const char **argv, const char *prefix)
|
|||
{ OPTION_CALLBACK, 0, "ignore-whitespace", NULL, NULL,
|
||||
N_("ignore changes in whitespace when finding context"),
|
||||
PARSE_OPT_NOARG, option_parse_space_change },
|
||||
OPT_BOOL('R', "reverse", &apply_in_reverse,
|
||||
OPT_BOOL('R', "reverse", &state.apply_in_reverse,
|
||||
N_("apply the patch in reverse")),
|
||||
OPT_BOOL(0, "unidiff-zero", &state.unidiff_zero,
|
||||
N_("don't expect at least one line of context")),
|
||||
|
|
Loading…
Reference in a new issue