From: Junio C Hamano Date: Wed, 7 Jul 2010 04:53:11 +0000 (-0700) Subject: do not write out index when status does not have to X-Git-Tag: v1.7.2~25^2 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/d5f5d0a9443c3892cdf9665ed8e0f9004706ed65?hp=--cc do not write out index when status does not have to 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 --- d5f5d0a9443c3892cdf9665ed8e0f9004706ed65 diff --git a/builtin/commit.c b/builtin/commit.c index 80c621dc06..da18287ca9 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -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(); } @@ -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;