mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-20 13:05:47 +00:00
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.
This commit is contained in:
parent
2b90cc26de
commit
3b2a423c3f
@ -258,6 +258,9 @@ static int set_status_flags(struct status_entry *e)
|
||||
index_zero = git_oid_cmp(&zero, &e->index_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)
|
||||
e->status_flags |= GIT_STATUS_INDEX_NEW;
|
||||
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
|
||||
git_index *index;
|
||||
git_index_entry *index_entry;
|
||||
char temp_path[GIT_PATH_MAX];
|
||||
int idx;
|
||||
int idx, error;
|
||||
git_tree *tree;
|
||||
git_reference *head_ref, *resolved_head_ref;
|
||||
git_commit *head_commit;
|
||||
@ -377,7 +380,9 @@ int git_status_file(unsigned int *status_flags, git_repository *repo, const char
|
||||
strcpy(temp_path, repo->path_workdir);
|
||||
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;
|
||||
|
||||
free(e);
|
||||
|
||||
@ -184,9 +184,30 @@ BEGIN_TEST(singlestatus0, "test retrieving status for single file")
|
||||
git_futils_rmdir_r(TEMP_STATUS_FOLDER, 1);
|
||||
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)
|
||||
ADD_TEST(file0);
|
||||
ADD_TEST(statuscb0);
|
||||
ADD_TEST(singlestatus0);
|
||||
ADD_TEST(singlestatus1);
|
||||
END_SUITE
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user