Skip to content

Commit

Permalink
Merge branch 'status-no-lock-index'
Browse files Browse the repository at this point in the history
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 <johannes.schindelin@gmx.de>
  • Loading branch information
dscho committed Jan 24, 2020
2 parents a35e8b7 + df90a23 commit 76c8e45
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Documentation/git-status.txt
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,13 @@ ignored, then the directory is not shown, but all contents are shown.
threshold.
See also linkgit:git-diff[1] `--find-renames`.

--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`.

<pathspec>...::
See the 'pathspec' entry in linkgit:gitglossary[7].

Expand Down
10 changes: 10 additions & 0 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1382,6 +1382,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
{
static int no_renames = -1;
static const char *rename_score_arg = (const char *)-1;
static int no_lock_index = 0;
static struct wt_status s;
unsigned int progress_flag = 0;
int fd;
Expand Down Expand Up @@ -1420,6 +1421,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
{ OPTION_CALLBACK, 'M', "find-renames", &rename_score_arg,
N_("n"), N_("detect renames, optionally set similarity index"),
PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score },
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(),
};

Expand All @@ -1433,6 +1437,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);

Expand Down
11 changes: 11 additions & 0 deletions t/t7508-status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1610,6 +1610,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-tool chmtime =1234567890 .git/index &&
git status --no-lock-index 2>err &&
grep "no-lock-index is deprecated" err &&
test-tool chmtime -v +0 .git/index >out &&
grep ^1234567890 out &&
git status &&
test-tool chmtime -v +0 .git/index >out &&
! grep ^1234567890 out
'

test_expect_success '--no-optional-locks prevents index update' '
test-tool chmtime =1234567890 .git/index &&
git --no-optional-locks status &&
Expand Down

0 comments on commit 76c8e45

Please sign in to comment.