Christian Couder <christian.couder@xxxxxxxxx> writes: > To libify the apply functionality the 'unidiff_zero' variable should > not be static and global to the file. Let's move it into > 'struct apply_state'. > > Reviewed-by: Stefan Beller <sbeller@xxxxxxxxxx> > Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> > --- Looks correct; I would have expected from the flow of thought in the series that p_value and linenr that were already mentioned would be the first two to be put in this, but that would have to wait until more functions are taught to pass the state around, so this ordering would probably be fine. > builtin/apply.c | 42 ++++++++++++++++++++++++------------------ > 1 file changed, 24 insertions(+), 18 deletions(-) > > diff --git a/builtin/apply.c b/builtin/apply.c > index e133033..44ae95d 100644 > --- a/builtin/apply.c > +++ b/builtin/apply.c > @@ -24,6 +24,8 @@ > struct apply_state { > const char *prefix; > int prefix_length; > + > + int unidiff_zero; > }; > > /* > @@ -37,7 +39,6 @@ struct apply_state { > */ > static int newfd = -1; > > -static int unidiff_zero; > static int state_p_value = 1; > static int p_value_known; > static int check_index; > @@ -2694,7 +2695,8 @@ static void update_image(struct image *img, > * postimage) for the hunk. Find lines that match "preimage" in "img" and > * replace the part of "img" with "postimage" text. > */ > -static int apply_one_fragment(struct image *img, struct fragment *frag, > +static int apply_one_fragment(struct apply_state *state, > + struct image *img, struct fragment *frag, > int inaccurate_eof, unsigned ws_rule, > int nth_fragment) > { > @@ -2836,7 +2838,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag, > * without leading context must match at the beginning. > */ > match_beginning = (!frag->oldpos || > - (frag->oldpos == 1 && !unidiff_zero)); > + (frag->oldpos == 1 && !state->unidiff_zero)); > > /* > * A hunk without trailing lines must match at the end. > @@ -2844,7 +2846,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag, > * from the lack of trailing lines if the patch was generated > * with unidiff without any context. > */ > - match_end = !unidiff_zero && !trailing; > + match_end = !state->unidiff_zero && !trailing; > > pos = frag->newpos ? (frag->newpos - 1) : 0; > preimage.buf = oldlines; > @@ -3067,7 +3069,7 @@ static int apply_binary(struct image *img, struct patch *patch) > return 0; > } > > -static int apply_fragments(struct image *img, struct patch *patch) > +static int apply_fragments(struct apply_state *state, struct image *img, struct patch *patch) > { > struct fragment *frag = patch->fragments; > const char *name = patch->old_name ? patch->old_name : patch->new_name; > @@ -3080,7 +3082,7 @@ static int apply_fragments(struct image *img, struct patch *patch) > > while (frag) { > nth++; > - if (apply_one_fragment(img, frag, inaccurate_eof, ws_rule, nth)) { > + if (apply_one_fragment(state, img, frag, inaccurate_eof, ws_rule, nth)) { > error(_("patch failed: %s:%ld"), name, frag->oldpos); > if (!apply_with_reject) > return -1; > @@ -3388,8 +3390,11 @@ static int load_current(struct image *image, struct patch *patch) > return 0; > } > > -static int try_threeway(struct image *image, struct patch *patch, > - struct stat *st, const struct cache_entry *ce) > +static int try_threeway(struct apply_state *state, > + struct image *image, > + struct patch *patch, > + struct stat *st, > + const struct cache_entry *ce) > { > unsigned char pre_sha1[20], post_sha1[20], our_sha1[20]; > struct strbuf buf = STRBUF_INIT; > @@ -3415,7 +3420,7 @@ static int try_threeway(struct image *image, struct patch *patch, > img = strbuf_detach(&buf, &len); > prepare_image(&tmp_image, img, len, 1); > /* Apply the patch to get the post image */ > - if (apply_fragments(&tmp_image, patch) < 0) { > + if (apply_fragments(state, &tmp_image, patch) < 0) { > clear_image(&tmp_image); > return -1; > } > @@ -3459,7 +3464,8 @@ static int try_threeway(struct image *image, struct patch *patch, > return 0; > } > > -static int apply_data(struct patch *patch, struct stat *st, const struct cache_entry *ce) > +static int apply_data(struct apply_state *state, struct patch *patch, > + struct stat *st, const struct cache_entry *ce) > { > struct image image; > > @@ -3467,9 +3473,9 @@ static int apply_data(struct patch *patch, struct stat *st, const struct cache_e > return -1; > > if (patch->direct_to_threeway || > - apply_fragments(&image, patch) < 0) { > + apply_fragments(state, &image, patch) < 0) { > /* Note: with --reject, apply_fragments() returns 0 */ > - if (!threeway || try_threeway(&image, patch, st, ce) < 0) > + if (!threeway || try_threeway(state, &image, patch, st, ce) < 0) > return -1; > } > patch->result = image.buf; > @@ -3717,7 +3723,7 @@ static void die_on_unsafe_path(struct patch *patch) > * Check and apply the patch in-core; leave the result in patch->result > * for the caller to write it out to the final destination. > */ > -static int check_patch(struct patch *patch) > +static int check_patch(struct apply_state *state, struct patch *patch) > { > struct stat st; > const char *old_name = patch->old_name; > @@ -3816,13 +3822,13 @@ static int check_patch(struct patch *patch) > return error(_("affected file '%s' is beyond a symbolic link"), > patch->new_name); > > - if (apply_data(patch, &st, ce) < 0) > + if (apply_data(state, patch, &st, ce) < 0) > return error(_("%s: patch does not apply"), name); > patch->rejected = 0; > return 0; > } > > -static int check_patch_list(struct patch *patch) > +static int check_patch_list(struct apply_state *state, struct patch *patch) > { > int err = 0; > > @@ -3832,7 +3838,7 @@ static int check_patch_list(struct patch *patch) > if (apply_verbosely) > say_patch_name(stderr, > _("Checking patch %s..."), patch); > - err |= check_patch(patch); > + err |= check_patch(state, patch); > patch = patch->next; > } > return err; > @@ -4434,7 +4440,7 @@ static int apply_patch(struct apply_state *state, > } > > if ((check || apply) && > - check_patch_list(list) < 0 && > + check_patch_list(state, list) < 0 && > !apply_with_reject) > exit(1); > > @@ -4597,7 +4603,7 @@ int cmd_apply(int argc, const char **argv, const char *prefix_) > PARSE_OPT_NOARG, option_parse_space_change }, > OPT_BOOL('R', "reverse", &apply_in_reverse, > N_("apply the patch in reverse")), > - OPT_BOOL(0, "unidiff-zero", &unidiff_zero, > + OPT_BOOL(0, "unidiff-zero", &state.unidiff_zero, > N_("don't expect at least one line of context")), > OPT_BOOL(0, "reject", &apply_with_reject, > N_("leave the rejected hunks in corresponding *.rej files")), -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html