Skip to content

Commit

Permalink
status: offer *not* to lock the index and update it
Browse files Browse the repository at this point in the history
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.

Let's introduce the option `--no-lock-index` to prevent such problems.
The idea is that the third-party tool calls `git status` with this
option, preventing it from ever updating the index.

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.

Note that the regression test added in this commit does not *really*
verify that no index.lock file was written; that test is not possible in
a portable way. Instead, we verify that .git/index is rewritten *only*
when `git status` is run without `--no-lock-index`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
dscho committed Oct 19, 2017
1 parent 3ceb93e commit b8b0c5a
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 1 deletion.
1 change: 0 additions & 1 deletion Documentation/git-status.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ configuration variable documented in linkgit:git-config[1].
without options are equivalent to 'always' and 'never'
respectively.

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

OUTPUT
Expand Down
3 changes: 3 additions & 0 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1350,6 +1350,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;
Expand Down Expand Up @@ -1381,6 +1382,8 @@ 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_("do not lock the index")),
OPT_END(),
};

Expand Down

0 comments on commit b8b0c5a

Please sign in to comment.