Skip to content

Commit

Permalink
add_file_to_index: skip rehashing if the cached stat already matches
Browse files Browse the repository at this point in the history
An earlier commit 366bfcb broke git-add by moving read_cache()
call down, because it wanted the directory walking code to grab
paths that are already in the index.  The change serves its
purpose, but introduces a regression because the responsibility
of avoiding unnecessary reindexing by matching the cached stat
is shifted nowhere.

This makes it the job of add_file_to_index() function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Jul 31, 2007
1 parent bf655fd commit 0781b8a
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion read-cache.c
Expand Up @@ -380,7 +380,7 @@ static int index_name_pos_also_unmerged(struct index_state *istate,

int add_file_to_index(struct index_state *istate, const char *path, int verbose)
{
int size, namelen;
int size, namelen, pos;
struct stat st;
struct cache_entry *ce;

Expand Down Expand Up @@ -414,6 +414,15 @@ int add_file_to_index(struct index_state *istate, const char *path, int verbose)
ce->ce_mode = ce_mode_from_stat(ent, st.st_mode);
}

pos = index_name_pos(istate, ce->name, namelen);
if (0 <= pos &&
!ce_stage(istate->cache[pos]) &&
!ie_modified(istate, istate->cache[pos], &st, 1)) {
/* Nothing changed, really */
free(ce);
return 0;
}

if (index_path(ce->sha1, path, &st, 1))
die("unable to index file %s", path);
if (add_index_entry(istate, ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE))
Expand Down

0 comments on commit 0781b8a

Please sign in to comment.