Commit def644e48a3cd4afd0cee975d3214eeeb3671c99

lhchavez 2017-01-01T17:35:29

Add a test

diff --git a/tests/pack/indexer.c b/tests/pack/indexer.c
index 49a106d..15a9017 100644
--- a/tests/pack/indexer.c
+++ b/tests/pack/indexer.c
@@ -125,3 +125,43 @@ void test_pack_indexer__fix_thin(void)
 		git_indexer_free(idx);
 	}
 }
+
+static int find_tmp_file_recurs(void *opaque, git_buf *path)
+{
+	int error = 0;
+	git_buf *first_tmp_file = opaque;
+	struct stat st;
+
+	if ((error = p_lstat_posixly(path->ptr, &st)) < 0)
+		return error;
+
+	if (S_ISDIR(st.st_mode))
+		return git_path_direach(path, 0, find_tmp_file_recurs, opaque);
+
+	/* This is the template that's used in git_futils_mktmp. */
+	if (strstr(git_buf_cstr(path), "_git2_") != NULL)
+		return git_buf_sets(first_tmp_file, git_buf_cstr(path));
+
+	return 0;
+}
+
+void test_pack_indexer__no_tmp_files(void)
+{
+	git_indexer *idx = NULL;
+	git_buf path = GIT_BUF_INIT;
+	git_buf first_tmp_file = GIT_BUF_INIT;
+
+	/* Precondition: there are no temporary files. */
+	cl_git_pass(git_buf_sets(&path, clar_sandbox_path()));
+	cl_git_pass(find_tmp_file_recurs(&first_tmp_file, &path));
+	if (git_buf_is_allocated(&first_tmp_file)) {
+		cl_warning("Found a temporary file before running the test");
+		cl_skip();
+	}
+
+	cl_git_pass(git_indexer_new(&idx, ".", 0, NULL, NULL, NULL));
+	git_indexer_free(idx);
+
+	cl_git_pass(find_tmp_file_recurs(&first_tmp_file, &path));
+	cl_check(!git_buf_is_allocated(&first_tmp_file));
+}