aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Casey <casey@nrlssc.navy.mil>2008-01-23 11:21:22 -0600
committerJunio C Hamano <gitster@pobox.com>2008-01-23 10:10:11 -0800
commit5a9dd3998fb4c3ddc048cbcab74a8df72bff91b7 (patch)
tree3b2e449ead130e471dd4f2c207ce017becb4e34b
parent28678b4f2f2e449986de4a6fc2dc93b32299ca74 (diff)
downloadgit-5a9dd3998fb4c3ddc048cbcab74a8df72bff91b7.tar.gz
git-5a9dd3998fb4c3ddc048cbcab74a8df72bff91b7.tar.xz
git-commit: exit non-zero if we fail to commit the index
In certain rare cases, the creation of the commit object and update of HEAD can succeed, but then installing the updated index will fail. This is most likely caused by a full disk or exceeded disk quota. When this happens the new index file will be removed, and the repository will be left with the original now-out-of-sync index. The user can recover with a "git reset HEAD" once the disk space issue is resolved. We should detect this failure and offer the user some helpful guidance. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin-commit.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/builtin-commit.c b/builtin-commit.c
index 02279360f..d8deb1ad0 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -122,19 +122,23 @@ static void rollback_index_files(void)
}
}
-static void commit_index_files(void)
+static int commit_index_files(void)
{
+ int err = 0;
+
switch (commit_style) {
case COMMIT_AS_IS:
break; /* nothing to do */
case COMMIT_NORMAL:
- commit_lock_file(&index_lock);
+ err = commit_lock_file(&index_lock);
break;
case COMMIT_PARTIAL:
- commit_lock_file(&index_lock);
+ err = commit_lock_file(&index_lock);
rollback_lock_file(&false_lock);
break;
}
+
+ return err;
}
/*
@@ -926,7 +930,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
unlink(git_path("MERGE_HEAD"));
unlink(git_path("MERGE_MSG"));
- commit_index_files();
+ if (commit_index_files())
+ die ("Repository has been updated, but unable to write\n"
+ "new_index file. Check that disk is not full or quota is\n"
+ "not exceeded, and then \"git reset HEAD\" to recover.");
rerere();
run_hook(get_index_file(), "post-commit", NULL);