From e3142ec417a1ba4cc59126cdafd24f2638fa94ce Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 12 Aug 2016 10:54:26 +0200 Subject: [PATCH] status: carry the --no-lock-index option for backwards-compatibility When a third-party tool periodically runs `git status` in order to keep track of the state of the working tree, it is a bad idea to lock the index: it might interfere with interactive commands executed by the user, e.g. when the user wants to commit files. Git for Windows introduced the `--no-lock-index` option a long time ago to fix that (it made it into Git for Windows v2.9.2(3)) by simply avoiding to write that file. The downside is that the periodic `git status` calls will be a little bit more wasteful because they may have to refresh the index repeatedly, only to throw away the updates when it exits. This cannot really be helped, though, as tools wanting to get a periodic update of the status have no way to predict when the user may want to lock the index herself. Sadly, a competing approach was submitted (by somebody who apparently has less work on their plate than this maintainer) that made it into v2.15.0 but is *different*: instead of a `git status`-only option, it is an option that comes *before* the Git command and is called differently, too. Let's give previous users a chance to upgrade to newer Git for Windows versions by handling the `--no-lock-index` option, still, though with a big fat warning. Signed-off-by: Johannes Schindelin --- Documentation/git-status.txt | 7 +++++++ builtin/commit.c | 10 ++++++++++ t/t7508-status.sh | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt index 6c230c0c72..2050ff07ba 100644 --- a/Documentation/git-status.txt +++ b/Documentation/git-status.txt @@ -135,6 +135,13 @@ ignored, then the directory is not shown, but all contents are shown. Display or do not display detailed ahead/behind counts for the branch relative to its upstream branch. Defaults to true. +--no-lock-index:: +--lock-index:: + (DEPRECATED: use --no-optional-locks instead) + Specifies whether `git status` should try to lock the index and + update it afterwards if any changes were detected. Defaults to + `--lock-index`. + ...:: See the 'pathspec' entry in linkgit:gitglossary[7]. diff --git a/builtin/commit.c b/builtin/commit.c index 37fcb55ab0..37535919df 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1265,6 +1265,7 @@ static int git_status_config(const char *k, const char *v, void *cb) int cmd_status(int argc, const char **argv, const char *prefix) { + static int no_lock_index = 0; static struct wt_status s; int fd; struct object_id oid; @@ -1298,6 +1299,9 @@ int cmd_status(int argc, const char **argv, const char *prefix) N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")), + OPT_BOOL(0, "no-lock-index", &no_lock_index, + N_("(DEPRECATED: use `git --no-optional-locks status` " + "instead) Do not lock the index")), OPT_END(), }; @@ -1311,6 +1315,12 @@ int cmd_status(int argc, const char **argv, const char *prefix) finalize_colopts(&s.colopts, -1); finalize_deferred_config(&s); + if (no_lock_index) { + warning("--no-lock-index is deprecated, use --no-optional-locks" + " instead"); + setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1); + } + handle_untracked_files_arg(&s); handle_ignored_arg(&s); diff --git a/t/t7508-status.sh b/t/t7508-status.sh index 50052e2872..3941f7b095 100755 --- a/t/t7508-status.sh +++ b/t/t7508-status.sh @@ -1671,6 +1671,17 @@ test_expect_success '"Initial commit" should not be noted in commit template' ' test_i18ngrep ! "Initial commit" output ' +test_expect_success '--no-lock-index prevents index update and is deprecated' ' + test-chmtime =1234567890 .git/index && + git status --no-lock-index 2>err && + grep "no-lock-index is deprecated" err && + test-chmtime -v +0 .git/index >out && + grep ^1234567890 out && + git status && + test-chmtime -v +0 .git/index >out && + ! grep ^1234567890 out +' + test_expect_success '--no-optional-locks prevents index update' ' test-chmtime =1234567890 .git/index && git --no-optional-locks status &&