Skip to content

Commit bf8b939

Browse files
committed
Merge branch 'status-no-lock-index'
This branch allows third-party tools to call `git status --no-lock-index` to avoid lock contention with the interactive Git usage of the actual human user. Signed-off-by: Johannes Schindelin <[email protected]>
2 parents 1af8abe + 478b1e0 commit bf8b939

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
@@ -111,6 +111,13 @@ configuration variable documented in linkgit:git-config[1].
111111
without options are equivalent to 'always' and 'never'
112112
respectively.
113113

114+
--no-lock-index::
115+
--lock-index::
116+
(DEPRECATED: use --no-optional-locks instead)
117+
Specifies whether `git status` should try to lock the index and
118+
update it afterwards if any changes were detected. Defaults to
119+
`--lock-index`.
120+
114121
<pathspec>...::
115122
See the 'pathspec' entry in linkgit:gitglossary[7].
116123

builtin/commit.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,7 @@ static int git_status_config(const char *k, const char *v, void *cb)
13401340

13411341
int cmd_status(int argc, const char **argv, const char *prefix)
13421342
{
1343+
static int no_lock_index = 0;
13431344
static struct wt_status s;
13441345
int fd;
13451346
struct object_id oid;
@@ -1369,6 +1370,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13691370
N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
13701371
PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
13711372
OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1373+
OPT_BOOL(0, "no-lock-index", &no_lock_index,
1374+
N_("(DEPRECATED: use `git --no-optional-locks status` "
1375+
"instead) Do not lock the index")),
13721376
OPT_END(),
13731377
};
13741378

@@ -1382,6 +1386,12 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13821386
finalize_colopts(&s.colopts, -1);
13831387
finalize_deferred_config(&s);
13841388

1389+
if (no_lock_index) {
1390+
warning("--no-lock-index is deprecated, use --no-optional-locks"
1391+
" instead");
1392+
setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1);
1393+
}
1394+
13851395
handle_untracked_files_arg(&s);
13861396
if (show_ignored_in_status)
13871397
s.show_ignored_files = 1;

t/t7508-status.sh

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

1674+
test_expect_success '--no-lock-index prevents index update and is deprecated' '
1675+
test-chmtime =1234567890 .git/index &&
1676+
git status --no-lock-index 2>err &&
1677+
grep "no-lock-index is deprecated" err &&
1678+
test-chmtime -v +0 .git/index >out &&
1679+
grep ^1234567890 out &&
1680+
git status &&
1681+
test-chmtime -v +0 .git/index >out &&
1682+
! grep ^1234567890 out
1683+
'
1684+
16741685
test_expect_success '--no-optional-locks prevents index update' '
16751686
test-chmtime =1234567890 .git/index &&
16761687
git --no-optional-locks status &&

0 commit comments

Comments
 (0)