diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-12-07 11:11:26 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-12-07 11:31:58 -0800 |
commit | 89d38fb26664038a85eb5a0da8fa4d23228e450d (patch) | |
tree | 73714c2903ad447134f8b1a5d09499d5998a9809 | |
parent | 8d7a455ed52e2a96debc080dfc011b6bb00db5d2 (diff) | |
download | git-89d38fb26664038a85eb5a0da8fa4d23228e450d.tar.gz |
wt-status: implement opportunisitc index update correctly
The require_clean_work_tree() function calls hold_locked_index()
with die_on_error=0 to signal that it is OK if it fails to obtain
the lock, but unconditionally calls update_index_if_able(), which
will try to write into fd=-1.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | wt-status.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/wt-status.c b/wt-status.c index a2e9d332d8..a715e71906 100644 --- a/wt-status.c +++ b/wt-status.c @@ -2258,11 +2258,12 @@ int has_uncommitted_changes(int ignore_submodules) int require_clean_work_tree(const char *action, const char *hint, int ignore_submodules, int gently) { struct lock_file *lock_file = xcalloc(1, sizeof(*lock_file)); - int err = 0; + int err = 0, fd; - hold_locked_index(lock_file, 0); + fd = hold_locked_index(lock_file, 0); refresh_cache(REFRESH_QUIET); - update_index_if_able(&the_index, lock_file); + if (0 <= fd) + update_index_if_able(&the_index, lock_file); rollback_lock_file(lock_file); if (has_unstaged_changes(ignore_submodules)) { |