On 08/13, Nguyễn Thái Ngọc Duy wrote: > Since attr checking API now take the index, there's no need to set an > index in advance with this call. Most call sites are straightforward > because they either pass the_index or NULL (which defaults back to > the_index previously). There's only one suspicious call site in > unpack-trees.c where it sets a different index. > > This code in unpack-trees is about to check out entries from the > new/temporary index after merging is done in it. The attributes will > be used by entry.c code to do crlf conversion if needed. entry.c now > respects struct checkout's istate field, and this field is correctly > set in unpack-trees.c, there should be no regression from this change. Thanks for fixing this! The API is now that much cleaner :) > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > archive.c | 2 +- > attr.c | 15 +++------------ > attr.h | 3 +-- > builtin/check-attr.c | 2 +- > unpack-trees.c | 4 ++-- > 5 files changed, 8 insertions(+), 18 deletions(-) > > diff --git a/archive.c b/archive.c > index c81e35bf23..aca9179d03 100644 > --- a/archive.c > +++ b/archive.c > @@ -274,7 +274,7 @@ int write_archive_entries(struct archiver_args *args, > init_tree_desc(&t, args->tree->buffer, args->tree->size); > if (unpack_trees(1, &t, &opts)) > return -1; > - git_attr_set_direction(GIT_ATTR_INDEX, &the_index); > + git_attr_set_direction(GIT_ATTR_INDEX); > } > > err = read_tree_recursive(args->tree, "", 0, 0, &args->pathspec, > diff --git a/attr.c b/attr.c > index 863fad3bd1..98e4953f6e 100644 > --- a/attr.c > +++ b/attr.c > @@ -708,10 +708,8 @@ static struct attr_stack *read_attr_from_array(const char **list) > * another thread could potentially be calling into the attribute system. > */ > static enum git_attr_direction direction; > -static const struct index_state *use_index; > > -void git_attr_set_direction(enum git_attr_direction new_direction, > - const struct index_state *istate) > +void git_attr_set_direction(enum git_attr_direction new_direction) > { > if (is_bare_repository() && new_direction != GIT_ATTR_INDEX) > BUG("non-INDEX attr direction in a bare repo"); > @@ -720,7 +718,6 @@ void git_attr_set_direction(enum git_attr_direction new_direction, > drop_all_attr_stacks(); > > direction = new_direction; > - use_index = istate; > } > > static struct attr_stack *read_attr_from_file(const char *path, int macro_ok) > @@ -750,17 +747,11 @@ static struct attr_stack *read_attr_from_index(const struct index_state *istate, > struct attr_stack *res; > char *buf, *sp; > int lineno = 0; > - const struct index_state *to_read_from; > > - /* > - * Temporary workaround for c24f3abace (apply: file commited > - * with CRLF should roundtrip diff and apply - 2017-08-19) > - */ > - to_read_from = use_index ? use_index : istate; > - if (!to_read_from) > + if (!istate) > return NULL; > > - buf = read_blob_data_from_index(to_read_from, path, NULL); > + buf = read_blob_data_from_index(istate, path, NULL); > if (!buf) > return NULL; > > diff --git a/attr.h b/attr.h > index 3daca3c0cb..01dab4a126 100644 > --- a/attr.h > +++ b/attr.h > @@ -77,8 +77,7 @@ enum git_attr_direction { > GIT_ATTR_CHECKOUT, > GIT_ATTR_INDEX > }; > -void git_attr_set_direction(enum git_attr_direction new_direction, > - const struct index_state *istate); > +void git_attr_set_direction(enum git_attr_direction new_direction); > > void attr_start(void); > > diff --git a/builtin/check-attr.c b/builtin/check-attr.c > index f7b59993d3..c05573ff9c 100644 > --- a/builtin/check-attr.c > +++ b/builtin/check-attr.c > @@ -120,7 +120,7 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix) > } > > if (cached_attrs) > - git_attr_set_direction(GIT_ATTR_INDEX, NULL); > + git_attr_set_direction(GIT_ATTR_INDEX); > > doubledash = -1; > for (i = 0; doubledash < 0 && i < argc; i++) { > diff --git a/unpack-trees.c b/unpack-trees.c > index 14e9043f9d..f25089b878 100644 > --- a/unpack-trees.c > +++ b/unpack-trees.c > @@ -353,7 +353,7 @@ static int check_updates(struct unpack_trees_options *o) > progress = get_progress(o); > > if (o->update) > - git_attr_set_direction(GIT_ATTR_CHECKOUT, index); > + git_attr_set_direction(GIT_ATTR_CHECKOUT); > > if (should_update_submodules() && o->update && !o->dry_run) > load_gitmodules_file(index, NULL); > @@ -413,7 +413,7 @@ static int check_updates(struct unpack_trees_options *o) > stop_progress(&progress); > errs |= finish_delayed_checkout(&state); > if (o->update) > - git_attr_set_direction(GIT_ATTR_CHECKIN, NULL); > + git_attr_set_direction(GIT_ATTR_CHECKIN); > return errs != 0; > } > > -- > 2.18.0.1004.g6639190530 > -- Brandon Williams