mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 19:58:09 +00:00

git_status_file would always return GIT_ENOTFOUND for these files. The underlying bug was that git__strcmp_cb, which is used by git_path_with_stat_cmp to sort entries in the working directory, compares strings based on unsigned chars (this is confirmed by the strcmp(3) manpage), while git__prefixcmp, which is used by workdir_iterator__entry_cmp to search for a path in the working directory, compares strings based on char. So the sort puts this path at the end of the list, while the search expects it to be at the beginning. The fix was simply to make git__prefixcmp compare using unsigned chars, just like strcmp(3). The rest of the change is just adding/updating tests.
203 lines
4.9 KiB
C
203 lines
4.9 KiB
C
#include "status_helpers.h"
|
|
|
|
/* entries for a plain copy of tests/resources/status */
|
|
|
|
static const char *entry_paths0[] = {
|
|
"file_deleted",
|
|
"ignored_file",
|
|
"modified_file",
|
|
"new_file",
|
|
"staged_changes",
|
|
"staged_changes_file_deleted",
|
|
"staged_changes_modified_file",
|
|
"staged_delete_file_deleted",
|
|
"staged_delete_modified_file",
|
|
"staged_new_file",
|
|
"staged_new_file_deleted_file",
|
|
"staged_new_file_modified_file",
|
|
|
|
"subdir/deleted_file",
|
|
"subdir/modified_file",
|
|
"subdir/new_file",
|
|
|
|
"\xe8\xbf\x99",
|
|
};
|
|
|
|
static const unsigned int entry_statuses0[] = {
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_IGNORED,
|
|
GIT_STATUS_WT_MODIFIED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_INDEX_MODIFIED | GIT_STATUS_WT_MODIFIED,
|
|
GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_INDEX_DELETED | GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_INDEX_NEW | GIT_STATUS_WT_MODIFIED,
|
|
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_MODIFIED,
|
|
GIT_STATUS_WT_NEW,
|
|
|
|
GIT_STATUS_WT_NEW,
|
|
};
|
|
|
|
static const size_t entry_count0 = 16;
|
|
|
|
/* entries for a copy of tests/resources/status with all content
|
|
* deleted from the working directory
|
|
*/
|
|
|
|
static const char *entry_paths2[] = {
|
|
"current_file",
|
|
"file_deleted",
|
|
"modified_file",
|
|
"staged_changes",
|
|
"staged_changes_file_deleted",
|
|
"staged_changes_modified_file",
|
|
"staged_delete_file_deleted",
|
|
"staged_delete_modified_file",
|
|
"staged_new_file",
|
|
"staged_new_file_deleted_file",
|
|
"staged_new_file_modified_file",
|
|
"subdir.txt",
|
|
"subdir/current_file",
|
|
"subdir/deleted_file",
|
|
"subdir/modified_file",
|
|
};
|
|
|
|
static const unsigned int entry_statuses2[] = {
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
};
|
|
|
|
static const size_t entry_count2 = 15;
|
|
|
|
/* entries for a copy of tests/resources/status with some mods */
|
|
|
|
static const char *entry_paths3[] = {
|
|
".HEADER",
|
|
"42-is-not-prime.sigh",
|
|
"README.md",
|
|
"current_file",
|
|
"current_file/",
|
|
"file_deleted",
|
|
"ignored_file",
|
|
"modified_file",
|
|
"new_file",
|
|
"staged_changes",
|
|
"staged_changes_file_deleted",
|
|
"staged_changes_modified_file",
|
|
"staged_delete_file_deleted",
|
|
"staged_delete_modified_file",
|
|
"staged_new_file",
|
|
"staged_new_file_deleted_file",
|
|
"staged_new_file_modified_file",
|
|
"subdir",
|
|
"subdir/current_file",
|
|
"subdir/deleted_file",
|
|
"subdir/modified_file",
|
|
"\xe8\xbf\x99",
|
|
};
|
|
|
|
static const unsigned int entry_statuses3[] = {
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_IGNORED,
|
|
GIT_STATUS_WT_MODIFIED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_NEW,
|
|
};
|
|
|
|
static const size_t entry_count3 = 22;
|
|
|
|
|
|
/* entries for a copy of tests/resources/status with some mods
|
|
* and different options to the status call
|
|
*/
|
|
|
|
static const char *entry_paths4[] = {
|
|
".new_file",
|
|
"current_file",
|
|
"current_file/current_file",
|
|
"current_file/modified_file",
|
|
"current_file/new_file",
|
|
"file_deleted",
|
|
"modified_file",
|
|
"new_file",
|
|
"staged_changes",
|
|
"staged_changes_file_deleted",
|
|
"staged_changes_modified_file",
|
|
"staged_delete_file_deleted",
|
|
"staged_delete_modified_file",
|
|
"staged_new_file",
|
|
"staged_new_file_deleted_file",
|
|
"staged_new_file_modified_file",
|
|
"subdir",
|
|
"subdir/current_file",
|
|
"subdir/deleted_file",
|
|
"subdir/modified_file",
|
|
"zzz_new_dir/new_file",
|
|
"zzz_new_file",
|
|
"\xe8\xbf\x99",
|
|
};
|
|
|
|
static const unsigned int entry_statuses4[] = {
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_MODIFIED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_MODIFIED,
|
|
GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_WT_NEW | GIT_STATUS_INDEX_DELETED,
|
|
GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_DELETED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_MODIFIED | GIT_STATUS_INDEX_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_DELETED,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
GIT_STATUS_WT_NEW,
|
|
};
|
|
|
|
static const size_t entry_count4 = 23;
|