summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorMarkus Heidelberg <markus.heidelberg@web.de>2010-04-02 23:44:21 +0200
committerJunio C Hamano <gitster@pobox.com>2010-04-02 21:25:59 -0700
commit4bb6644d03f6932b94c24c3825e28865f493b692 (patch)
treea91894ee1aabd73cc58488ac8dee36b51dc1220d /builtin
parent4c926b37c21a088163871bb8e6ccdfc4b4952e34 (diff)
downloadgit-4bb6644d03f6932b94c24c3825e28865f493b692.tar.gz
git status: refresh the index if possible
This was already the case before commit 9e4b7ab6 (git status: not "commit --dry-run" anymore, 2009-08-15) with the difference that it died at failure. It got lost during the new implementation of "git status", which was meant to only change behaviour when invoked with arguments. Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/commit.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index c5ab683d5b..3c14ade9dd 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1017,6 +1017,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)
{
struct wt_status s;
+ int fd;
unsigned char sha1[20];
static struct option builtin_status_options[] = {
OPT__VERBOSE(&verbose),
@@ -1050,6 +1051,14 @@ int cmd_status(int argc, const char **argv, const char *prefix)
read_cache_preload(s.pathspec);
refresh_index(&the_index, REFRESH_QUIET|REFRESH_UNMERGED, s.pathspec, NULL, NULL);
+
+ fd = hold_locked_index(&index_lock, 0);
+ if (0 <= fd) {
+ if (!write_cache(fd, active_cache, active_nr))
+ commit_locked_index(&index_lock);
+ rollback_lock_file(&index_lock);
+ }
+
s.is_initial = get_sha1(s.reference, sha1) ? 1 : 0;
s.in_merge = in_merge;
wt_status_collect(&s);