Skip to content

Commit 7c8ce59

Browse files
dschoGit for Windows Build Agent
authored and
Git for Windows Build Agent
committed
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 <[email protected]>
1 parent 0e92ccf commit 7c8ce59

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

Documentation/git-status.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ ignored, then the directory is not shown, but all contents are shown.
149149
threshold.
150150
See also linkgit:git-diff[1] `--find-renames`.
151151

152+
--no-lock-index::
153+
--lock-index::
154+
(DEPRECATED: use --no-optional-locks instead)
155+
Specifies whether `git status` should try to lock the index and
156+
update it afterwards if any changes were detected. Defaults to
157+
`--lock-index`.
158+
152159
<pathspec>...::
153160
See the 'pathspec' entry in linkgit:gitglossary[7].
154161

builtin/commit.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,6 +1475,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
14751475
{
14761476
static int no_renames = -1;
14771477
static const char *rename_score_arg = (const char *)-1;
1478+
static int no_lock_index = 0;
14781479
static struct wt_status s;
14791480
unsigned int progress_flag = 0;
14801481
int fd;
@@ -1513,6 +1514,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
15131514
OPT_CALLBACK_F('M', "find-renames", &rename_score_arg,
15141515
N_("n"), N_("detect renames, optionally set similarity index"),
15151516
PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score),
1517+
OPT_BOOL(0, "no-lock-index", &no_lock_index,
1518+
N_("(DEPRECATED: use `git --no-optional-locks status` "
1519+
"instead) Do not lock the index")),
15161520
OPT_END(),
15171521
};
15181522

@@ -1529,6 +1533,12 @@ int cmd_status(int argc, const char **argv, const char *prefix)
15291533
finalize_colopts(&s.colopts, -1);
15301534
finalize_deferred_config(&s);
15311535

1536+
if (no_lock_index) {
1537+
warning("--no-lock-index is deprecated, use --no-optional-locks"
1538+
" instead");
1539+
setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1);
1540+
}
1541+
15321542
handle_untracked_files_arg(&s);
15331543
handle_ignored_arg(&s);
15341544

t/t7508-status.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,6 +1646,17 @@ test_expect_success '"Initial commit" should not be noted in commit template' '
16461646
test_i18ngrep ! "Initial commit" output
16471647
'
16481648

1649+
test_expect_success '--no-lock-index prevents index update and is deprecated' '
1650+
test-tool chmtime =1234567890 .git/index &&
1651+
git status --no-lock-index 2>err &&
1652+
grep "no-lock-index is deprecated" err &&
1653+
test-tool chmtime -v +0 .git/index >out &&
1654+
grep ^1234567890 out &&
1655+
git status &&
1656+
test-tool chmtime -v +0 .git/index >out &&
1657+
! grep ^1234567890 out
1658+
'
1659+
16491660
test_expect_success '--no-optional-locks prevents index update' '
16501661
test_set_magic_mtime .git/index &&
16511662
git --no-optional-locks status &&

0 commit comments

Comments
 (0)