add: modify already added files when --chmod is given

When the chmod option was added to git add, it was hooked up to the diff
machinery, meaning that it only works when the version in the index
differs from the version on disk.

As the option was supposed to mirror the chmod option in update-index,
which always changes the mode in the index, regardless of the status of
the file, make sure the option behaves the same way in git add.

Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Thomas Gummerer
2016-09-14 22:07:47 +01:00
committed by Junio C Hamano
parent d9d7096662
commit 610d55af0f
6 changed files with 91 additions and 34 deletions

View File

@ -630,7 +630,7 @@ void set_object_name_for_intent_to_add_entry(struct cache_entry *ce)
hashcpy(ce->sha1, sha1);
}
int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags, int force_mode)
int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags)
{
int size, namelen, was_same;
mode_t st_mode = st->st_mode;
@ -659,11 +659,10 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
else
ce->ce_flags |= CE_INTENT_TO_ADD;
if (S_ISREG(st_mode) && force_mode)
ce->ce_mode = create_ce_mode(force_mode);
else if (trust_executable_bit && has_symlinks)
if (trust_executable_bit && has_symlinks) {
ce->ce_mode = create_ce_mode(st_mode);
else {
} else {
/* If there is an existing entry, pick the mode bits and type
* from it, otherwise assume unexecutable regular file.
*/
@ -722,13 +721,12 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
return 0;
}
int add_file_to_index(struct index_state *istate, const char *path,
int flags, int force_mode)
int add_file_to_index(struct index_state *istate, const char *path, int flags)
{
struct stat st;
if (lstat(path, &st))
die_errno("unable to stat '%s'", path);
return add_to_index(istate, path, &st, flags, force_mode);
return add_to_index(istate, path, &st, flags);
}
struct cache_entry *make_cache_entry(unsigned int mode,