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
@ -30,6 +30,7 @@ struct apply_state {
|
|||||||
int check_index; /* preimage must match the indexed version */
|
int check_index; /* preimage must match the indexed version */
|
||||||
|
|
||||||
/* These boolean parameters control how the apply is done */
|
/* These boolean parameters control how the apply is done */
|
||||||
|
int apply_in_reverse;
|
||||||
int unidiff_zero;
|
int unidiff_zero;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -49,7 +50,6 @@ static int diffstat;
|
|||||||
static int numstat;
|
static int numstat;
|
||||||
static int summary;
|
static int summary;
|
||||||
static int apply = 1;
|
static int apply = 1;
|
||||||
static int apply_in_reverse;
|
|
||||||
static int apply_with_reject;
|
static int apply_with_reject;
|
||||||
static int apply_verbosely;
|
static int apply_verbosely;
|
||||||
static int allow_overlap;
|
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
|
* between a "---" that is part of a patch, and a "---" that starts
|
||||||
* the next patch is to look at the line counts..
|
* the next patch is to look at the line counts..
|
||||||
*/
|
*/
|
||||||
static int parse_fragment(const char *line, unsigned long size,
|
static int parse_fragment(struct apply_state *state,
|
||||||
struct patch *patch, struct fragment *fragment)
|
const char *line,
|
||||||
|
unsigned long size,
|
||||||
|
struct patch *patch,
|
||||||
|
struct fragment *fragment)
|
||||||
{
|
{
|
||||||
int added, deleted;
|
int added, deleted;
|
||||||
int len = linelen(line, size), offset;
|
int len = linelen(line, size), offset;
|
||||||
@ -1597,12 +1600,12 @@ static int parse_fragment(const char *line, unsigned long size,
|
|||||||
if (!deleted && !added)
|
if (!deleted && !added)
|
||||||
leading++;
|
leading++;
|
||||||
trailing++;
|
trailing++;
|
||||||
if (!apply_in_reverse &&
|
if (!state->apply_in_reverse &&
|
||||||
ws_error_action == correct_ws_error)
|
ws_error_action == correct_ws_error)
|
||||||
check_whitespace(line, len, patch->ws_rule);
|
check_whitespace(line, len, patch->ws_rule);
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
if (apply_in_reverse &&
|
if (state->apply_in_reverse &&
|
||||||
ws_error_action != nowarn_ws_error)
|
ws_error_action != nowarn_ws_error)
|
||||||
check_whitespace(line, len, patch->ws_rule);
|
check_whitespace(line, len, patch->ws_rule);
|
||||||
deleted++;
|
deleted++;
|
||||||
@ -1610,7 +1613,7 @@ static int parse_fragment(const char *line, unsigned long size,
|
|||||||
trailing = 0;
|
trailing = 0;
|
||||||
break;
|
break;
|
||||||
case '+':
|
case '+':
|
||||||
if (!apply_in_reverse &&
|
if (!state->apply_in_reverse &&
|
||||||
ws_error_action != nowarn_ws_error)
|
ws_error_action != nowarn_ws_error)
|
||||||
check_whitespace(line, len, patch->ws_rule);
|
check_whitespace(line, len, patch->ws_rule);
|
||||||
added++;
|
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
|
* The (fragment->patch, fragment->size) pair points into the memory given
|
||||||
* by the caller, not a copy, when we return.
|
* 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 offset = 0;
|
||||||
unsigned long oldlines = 0, newlines = 0, context = 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 = xcalloc(1, sizeof(*fragment));
|
||||||
fragment->linenr = state_linenr;
|
fragment->linenr = state_linenr;
|
||||||
len = parse_fragment(line, size, patch, fragment);
|
len = parse_fragment(state, line, size, patch, fragment);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
die(_("corrupt patch at line %d"), state_linenr);
|
die(_("corrupt patch at line %d"), state_linenr);
|
||||||
fragment->patch = line;
|
fragment->patch = line;
|
||||||
@ -2008,8 +2014,10 @@ static int parse_chunk(struct apply_state *state, char *buffer, unsigned long si
|
|||||||
? patch->new_name
|
? patch->new_name
|
||||||
: patch->old_name);
|
: patch->old_name);
|
||||||
|
|
||||||
patchsize = parse_single_patch(buffer + offset + hdrsize,
|
patchsize = parse_single_patch(state,
|
||||||
size - offset - hdrsize, patch);
|
buffer + offset + hdrsize,
|
||||||
|
size - offset - hdrsize,
|
||||||
|
patch);
|
||||||
|
|
||||||
if (!patchsize) {
|
if (!patchsize) {
|
||||||
static const char git_binary[] = "GIT binary patch\n";
|
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] == '\\')
|
if (len < size && patch[len] == '\\')
|
||||||
plen--;
|
plen--;
|
||||||
first = *patch;
|
first = *patch;
|
||||||
if (apply_in_reverse) {
|
if (state->apply_in_reverse) {
|
||||||
if (first == '-')
|
if (first == '-')
|
||||||
first = '+';
|
first = '+';
|
||||||
else if (first == '+')
|
else if (first == '+')
|
||||||
@ -2914,7 +2922,7 @@ static int apply_one_fragment(struct apply_state *state,
|
|||||||
|
|
||||||
if (apply_verbosely && applied_pos != pos) {
|
if (apply_verbosely && applied_pos != pos) {
|
||||||
int offset = applied_pos - pos;
|
int offset = applied_pos - pos;
|
||||||
if (apply_in_reverse)
|
if (state->apply_in_reverse)
|
||||||
offset = 0 - offset;
|
offset = 0 - offset;
|
||||||
fprintf_ln(stderr,
|
fprintf_ln(stderr,
|
||||||
Q_("Hunk #%d succeeded at %d (offset %d line).",
|
Q_("Hunk #%d succeeded at %d (offset %d line).",
|
||||||
@ -2948,7 +2956,9 @@ out:
|
|||||||
return (applied_pos < 0);
|
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;
|
struct fragment *fragment = patch->fragments;
|
||||||
unsigned long len;
|
unsigned long len;
|
||||||
@ -2961,7 +2971,7 @@ static int apply_binary_fragment(struct image *img, struct patch *patch)
|
|||||||
patch->old_name);
|
patch->old_name);
|
||||||
|
|
||||||
/* Binary patch is irreversible without the optional second hunk */
|
/* Binary patch is irreversible without the optional second hunk */
|
||||||
if (apply_in_reverse) {
|
if (state->apply_in_reverse) {
|
||||||
if (!fragment->next)
|
if (!fragment->next)
|
||||||
return error("cannot reverse-apply a binary patch "
|
return error("cannot reverse-apply a binary patch "
|
||||||
"without the reverse hunk to '%s'",
|
"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
|
* but the preimage prepared by the caller in "img" is freed here
|
||||||
* or in the helper function apply_binary_fragment() this calls.
|
* 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;
|
const char *name = patch->old_name ? patch->old_name : patch->new_name;
|
||||||
unsigned char sha1[20];
|
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
|
* apply the patch data to it, which is stored
|
||||||
* in the patch->fragments->{patch,size}.
|
* 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'"),
|
return error(_("binary patch does not apply to '%s'"),
|
||||||
name);
|
name);
|
||||||
|
|
||||||
@ -3078,7 +3090,7 @@ static int apply_fragments(struct apply_state *state, struct image *img, struct
|
|||||||
int nth = 0;
|
int nth = 0;
|
||||||
|
|
||||||
if (patch->is_binary)
|
if (patch->is_binary)
|
||||||
return apply_binary(img, patch);
|
return apply_binary(state, img, patch);
|
||||||
|
|
||||||
while (frag) {
|
while (frag) {
|
||||||
nth++;
|
nth++;
|
||||||
@ -4417,7 +4429,7 @@ static int apply_patch(struct apply_state *state,
|
|||||||
free_patch(patch);
|
free_patch(patch);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (apply_in_reverse)
|
if (state->apply_in_reverse)
|
||||||
reverse_patches(patch);
|
reverse_patches(patch);
|
||||||
if (use_patch(state, patch)) {
|
if (use_patch(state, patch)) {
|
||||||
patch_stats(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,
|
{ OPTION_CALLBACK, 0, "ignore-whitespace", NULL, NULL,
|
||||||
N_("ignore changes in whitespace when finding context"),
|
N_("ignore changes in whitespace when finding context"),
|
||||||
PARSE_OPT_NOARG, option_parse_space_change },
|
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")),
|
N_("apply the patch in reverse")),
|
||||||
OPT_BOOL(0, "unidiff-zero", &state.unidiff_zero,
|
OPT_BOOL(0, "unidiff-zero", &state.unidiff_zero,
|
||||||
N_("don't expect at least one line of context")),
|
N_("don't expect at least one line of context")),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user