Re: [PATCH] git add: respect core.filemode even with unmerged entries in the index
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 17 quoted lines
> diff --git a/read-cache.c b/read-cache.c
> index 4362b11..a74e4a7 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -382,6 +382,12 @@ int add_file_to_index(struct index_state *istate, const char *path, int verbose)
> struct cache_entry *ent;
> int pos = index_name_pos(istate, path, namelen);
>
> + /* might be unmerged */
> + if (pos < 0 && 1-pos < istate->cache_nr &&
> + namelen == ce_namelen(istate->cache[1-pos]) &&
> + !memcmp(path, istate->cache[1-pos]->name,
> + namelen))
> + pos = 1-pos;
> ent = (0 <= pos) ? istate->cache[pos] : NULL;
> ce->ce_mode = ce_mode_from_stat(ent, st.st_mode);
> }
Hmph.
* Are you sure about (1-pos)?
* I _think_ we would want to favor our stage (i.e. #2) when
unmerged, over other stages. Perhaps like this:
if (pos < 0) {
int a_pos = -1, our_pos = -1;
pos = -pos-1;
while ((pos < istate->cache_nr) &&
namelen == ce_namelen(istate->cache[pos]) &&
!memcmp(path, istate->cache[pos]->name, namelen))
if (a_pos < 0)
a_pos = pos;
if (ce_stage(istate->cache[pos]) == 2)
our_pos = pos;
pos++;
}
if (our_pos >= 0)
pos = our_pos;
else if (a_pos >= 0)
pos = a_pos;
else
pos = -1;
}
ent = (0 <= pos) ? istate->cache[pos] : NULL;
ce->ce_mode = ce_mode_from_stat(ent, st.st_mode);