Commit 3b2a423c by Jason Penny Committed by Vicent Marti

status: nonexistent file with git_status_file()

Throws GIT_ENOTFOUND error if given a filename that is not in
HEAD, index, nor the work tree.
parent 2b90cc26
...@@ -258,6 +258,9 @@ static int set_status_flags(struct status_entry *e) ...@@ -258,6 +258,9 @@ static int set_status_flags(struct status_entry *e)
index_zero = git_oid_cmp(&zero, &e->index_oid); index_zero = git_oid_cmp(&zero, &e->index_oid);
wt_zero = git_oid_cmp(&zero, &e->wt_oid); wt_zero = git_oid_cmp(&zero, &e->wt_oid);
if (head_zero == 0 && index_zero == 0 && wt_zero == 0)
return GIT_ENOTFOUND;
if (head_zero == 0 && index_zero != 0) if (head_zero == 0 && index_zero != 0)
e->status_flags |= GIT_STATUS_INDEX_NEW; e->status_flags |= GIT_STATUS_INDEX_NEW;
else if (index_zero == 0 && head_zero != 0) else if (index_zero == 0 && head_zero != 0)
...@@ -345,7 +348,7 @@ int git_status_file(unsigned int *status_flags, git_repository *repo, const char ...@@ -345,7 +348,7 @@ int git_status_file(unsigned int *status_flags, git_repository *repo, const char
git_index *index; git_index *index;
git_index_entry *index_entry; git_index_entry *index_entry;
char temp_path[GIT_PATH_MAX]; char temp_path[GIT_PATH_MAX];
int idx; int idx, error;
git_tree *tree; git_tree *tree;
git_reference *head_ref, *resolved_head_ref; git_reference *head_ref, *resolved_head_ref;
git_commit *head_commit; git_commit *head_commit;
...@@ -377,7 +380,9 @@ int git_status_file(unsigned int *status_flags, git_repository *repo, const char ...@@ -377,7 +380,9 @@ int git_status_file(unsigned int *status_flags, git_repository *repo, const char
strcpy(temp_path, repo->path_workdir); strcpy(temp_path, repo->path_workdir);
git_futils_direach(temp_path, GIT_PATH_MAX, single_dirent_cb, &e); git_futils_direach(temp_path, GIT_PATH_MAX, single_dirent_cb, &e);
set_status_flags(e); if ((error = set_status_flags(e)) < GIT_SUCCESS)
return git__throw(error, "Nonexistent file");
*status_flags = e->status_flags; *status_flags = e->status_flags;
free(e); free(e);
......
...@@ -184,9 +184,30 @@ BEGIN_TEST(singlestatus0, "test retrieving status for single file") ...@@ -184,9 +184,30 @@ BEGIN_TEST(singlestatus0, "test retrieving status for single file")
git_futils_rmdir_r(TEMP_STATUS_FOLDER, 1); git_futils_rmdir_r(TEMP_STATUS_FOLDER, 1);
END_TEST END_TEST
BEGIN_TEST(singlestatus1, "test retrieving status for nonexistent file")
char path_statusfiles[GIT_PATH_MAX];
char temp_path[GIT_PATH_MAX];
git_repository *repo;
unsigned int status_flags;
int error;
must_pass(copy_status_repo(path_statusfiles, temp_path));
must_pass(git_repository_open(&repo, temp_path));
// "nonexistent" does not exist in HEAD, Index or the worktree
error = git_status_file(&status_flags, repo, "nonexistent");
must_be_true(error == GIT_ENOTFOUND);
git_repository_free(repo);
git_futils_rmdir_r(TEMP_STATUS_FOLDER, 1);
END_TEST
BEGIN_SUITE(status) BEGIN_SUITE(status)
ADD_TEST(file0); ADD_TEST(file0);
ADD_TEST(statuscb0); ADD_TEST(statuscb0);
ADD_TEST(singlestatus0); ADD_TEST(singlestatus0);
ADD_TEST(singlestatus1);
END_SUITE END_SUITE
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment