From: Junio C Hamano Date: Wed, 20 Jan 2010 01:10:35 +0000 (-0800) Subject: status: don't require the repository to be writable X-Git-Tag: v1.7.0-rc0~3^2~4^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=ab6854515ee2280f187fbc2ab08f9e9115438f3e;p=git.git status: don't require the repository to be writable We need to update the index before hooks run when actually making a commit, but we shouldn't have to write the index when running "status". If we can, then we have already spent cycles to refresh the index and it is a waste not to write it out, but it is not a disaster if we cannot write it out. The main reason the user is running "git status" is to get the "status", and refreshing the index is a mere side effect that we can do without. Discovery and initial attempted fix by Dscho. Signed-off-by: Junio C Hamano --- diff --git a/builtin-commit.c b/builtin-commit.c index 33aa593c2..83b7c353e 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -278,11 +278,13 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int * We still need to refresh the index here. */ if (!pathspec || !*pathspec) { - fd = hold_locked_index(&index_lock, 1); + fd = hold_locked_index(&index_lock, !is_status); refresh_cache(refresh_flags); - if (write_cache(fd, active_cache, active_nr) || - commit_locked_index(&index_lock)) - die("unable to write new_index file"); + if (0 <= fd) { + if (write_cache(fd, active_cache, active_nr) || + commit_locked_index(&index_lock)) + die("unable to write new_index file"); + } commit_style = COMMIT_AS_IS; return get_index_file(); }