Skip to content

Commit

Permalink
do not write out index when status does not have to
Browse files Browse the repository at this point in the history
Some codepaths, such as "git status" and "git commit --dry-run",
tried to opportunisticly refresh the index and write the result
out.  But they did so without checking if there was actually any
change that needs to be written out.

Noticed by Jeff King and Daniel at Rutgers.edu

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Jul 7, 2010
1 parent b4cf0f1 commit d5f5d0a
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,9 +334,13 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
if (!pathspec || !*pathspec) {
fd = hold_locked_index(&index_lock, 1);
refresh_cache_or_die(refresh_flags);
if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(&index_lock))
die("unable to write new_index file");
if (active_cache_changed) {
if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(&index_lock))
die("unable to write new_index file");
} else {
rollback_lock_file(&index_lock);
}
commit_style = COMMIT_AS_IS;
return get_index_file();
}
Expand Down Expand Up @@ -1067,9 +1071,11 @@ int cmd_status(int argc, const char **argv, const char *prefix)

fd = hold_locked_index(&index_lock, 0);
if (0 <= fd) {
if (!write_cache(fd, active_cache, active_nr))
if (active_cache_changed &&
!write_cache(fd, active_cache, active_nr))
commit_locked_index(&index_lock);
rollback_lock_file(&index_lock);
else
rollback_lock_file(&index_lock);
}

s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
Expand Down

0 comments on commit d5f5d0a

Please sign in to comment.