This makes git-status work semi-decently in a read-only repository. Earlier, the command simply died with "cannot lock the index file" before giving any useful information to the user. Because index won't be updated in a read-only repository, stat-dirty paths appear in the "Changed but not updated" list. Signed-off-by: Junio C Hamano <junkio@xxxxxxx> --- Junio C Hamano <junkio@xxxxxxx> writes: > [gmane=http://thread.gmane.org/gmane.comp.version-control.git] > > * "git status" is not a read-only operation. > > It needs to do enough lstat(2) to run "update-index --refresh" to come > up with the information it needs to give. We could do so internally > without writing out the result to the index (there is a patch to do > this) even if a repository is not writable. > > $gmane/39205 > $gmane/39206 > > However, a big downside of this approach is that doing so > unconditionally would mean the expensive lstat(2) is wasted > afterwards. > > $gmane/39246 > > Currently an workaround is to run git-runstatus and live with the fact > that otherwise unmodified but stat-dirty paths to show up in the > output. I think (iff somebody feels strongly about it) a possible > compromise would be to see if we can update the index, and do what the > current code does if we can, and otherwise fall back on the new code > that does the internal "update-index --refresh". I did not feel strongly enough about it, so here is another approach. git-commit.sh | 21 +++++++++++---------- 1 files changed, 11 insertions(+), 10 deletions(-) diff --git a/git-commit.sh b/git-commit.sh index ec506d9..cfa1511 100755 --- a/git-commit.sh +++ b/git-commit.sh @@ -13,10 +13,10 @@ git-rev-parse --verify HEAD >/dev/null 2>&1 || initial_commit=t case "$0" in *status) status_only=t - unmerged_ok_if_status=--unmerged ;; + ;; *commit) status_only= - unmerged_ok_if_status= ;; + ;; esac refuse_partial () { @@ -389,16 +389,17 @@ else USE_INDEX="$THIS_INDEX" fi -GIT_INDEX_FILE="$USE_INDEX" \ - git-update-index -q $unmerged_ok_if_status --refresh || exit - -################################################################ -# If the request is status, just show it and exit. - -case "$0" in -*status) +case "$status_only" in +t) + # This will silently fail in a read-only repository, which is + # what we want. + GIT_INDEX_FILE="$USE_INDEX" git-update-index -q --unmerged --refresh run_status exit $? + ;; +'') + GIT_INDEX_FILE="$USE_INDEX" git-update-index -q --refresh || exit + ;; esac ################################################################ -- 1.5.0.1.619.g04c5c - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html