Thomas Gummerer <t.gummerer@xxxxxxxxx> writes: > As there are chmod options for both add and update-index, introduce a > new chmod_index_entry function to do the work. Use it in update-index, > while it will be used in add in the next patch. > > Signed-off-by: Thomas Gummerer <t.gummerer@xxxxxxxxx> > --- > builtin/update-index.c | 16 ++-------------- > cache.h | 2 ++ > read-cache.c | 29 +++++++++++++++++++++++++++++ > 3 files changed, 33 insertions(+), 14 deletions(-) > > diff --git a/builtin/update-index.c b/builtin/update-index.c > index bbdf0d9..9e9e040 100644 > --- a/builtin/update-index.c > +++ b/builtin/update-index.c > @@ -423,26 +423,14 @@ static void chmod_path(char flip, const char *path) > { > ... > - mode = ce->ce_mode; > - if (!S_ISREG(mode)) > - goto fail; > - switch (flip) { > - case '+': > - ce->ce_mode |= 0111; break; > - case '-': > - ce->ce_mode &= ~0111; break; > - default: > + if (chmod_cache_entry(ce, flip) < 0) > goto fail; > - } > - cache_tree_invalidate_path(&the_index, path); This used to always work on the default index, hence the_index reference is here, but ... > +int chmod_index_entry(struct index_state *istate, struct cache_entry *ce, > + char flip) > +{ > + if (!S_ISREG(ce->ce_mode)) > + return -1; > + switch (flip) { > + case '+': > + ce->ce_mode |= 0111; > + break; > + case '-': > + ce->ce_mode &= ~0111; > + break; > + default: > + return -2; > + } > + cache_tree_invalidate_path(&the_index, ce->name); ... this one takes istate, so you need to use it, instead of the hard-coded the_index reference. > + ce->ce_flags |= CE_UPDATE_IN_BASE; > + istate->cache_changed |= CE_ENTRY_CHANGED; > + > + return 0; > +} > + > int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) > { > int len = ce_namelen(a); Other than that, this looks good to me.