@matheusbsbs / matheus-bagliano / commits / 5a9dd3998f
Fork 0

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>

Brandon Casey committed Jan 23, 2008 at 11:21 UTC 5a9dd3998fb4c3ddc048cbcab74a8df72bff91b7
1 file changed +11 -4
builtin-commit.c
+11 -4
@@ -122,19 +122,23 @@ static void rollback_index_files(void)
122 }
123 }
124
125 -static void commit_index_files(void)
125 +static int commit_index_files(void)
126 {
127 + int err = 0;
128 +
129 switch (commit_style) {
130 case COMMIT_AS_IS:
131 break; /* nothing to do */
132 case COMMIT_NORMAL:
131 - commit_lock_file(&index_lock);
133 + err = commit_lock_file(&index_lock);
134 break;
135 case COMMIT_PARTIAL:
134 - commit_lock_file(&index_lock);
136 + err = commit_lock_file(&index_lock);
137 rollback_lock_file(&false_lock);
138 break;
139 }
140 +
141 + return err;
142 }
143
144 /*
@@ -926,7 +930,10 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
930 unlink(git_path("MERGE_HEAD"));
931 unlink(git_path("MERGE_MSG"));
932
929 - commit_index_files();
933 + if (commit_index_files())
934 + die ("Repository has been updated, but unable to write\n"
935 + "new_index file. Check that disk is not full or quota is\n"
936 + "not exceeded, and then \"git reset HEAD\" to recover.");
937
938 rerere();
939 run_hook(get_index_file(), "post-commit", NULL);