mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-26 19:43:23 +00:00
Merge pull request #1704 from arrbee/kill-status-index-then-workdir
Remove GIT_STATUS_SHOW_INDEX_THEN_WORKDIR option
This commit is contained in:
commit
b8cd7aa9f6
@ -60,25 +60,24 @@ typedef int (*git_status_cb)(
|
|||||||
const char *path, unsigned int status_flags, void *payload);
|
const char *path, unsigned int status_flags, void *payload);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For extended status, select the files on which to report status.
|
* Select the files on which to report status.
|
||||||
|
*
|
||||||
|
* With `git_status_foreach_ext`, this will control which changes get
|
||||||
|
* callbacks. With `git_status_list_new`, these will control which
|
||||||
|
* changes are included in the list.
|
||||||
*
|
*
|
||||||
* - GIT_STATUS_SHOW_INDEX_AND_WORKDIR is the default. This roughly
|
* - GIT_STATUS_SHOW_INDEX_AND_WORKDIR is the default. This roughly
|
||||||
* matches `git status --porcelain` where each file gets a callback
|
* matches `git status --porcelain` regarding which files are
|
||||||
* indicating its status in the index and in the working directory.
|
* included and in what order.
|
||||||
* - GIT_STATUS_SHOW_INDEX_ONLY only gives status based on HEAD to index
|
* - GIT_STATUS_SHOW_INDEX_ONLY only gives status based on HEAD to index
|
||||||
* comparison, not looking at working directory changes.
|
* comparison, not looking at working directory changes.
|
||||||
* - GIT_STATUS_SHOW_WORKDIR_ONLY only gives status based on index to
|
* - GIT_STATUS_SHOW_WORKDIR_ONLY only gives status based on index to
|
||||||
* working directory comparison, not comparing the index to the HEAD.
|
* working directory comparison, not comparing the index to the HEAD.
|
||||||
* - GIT_STATUS_SHOW_INDEX_THEN_WORKDIR runs index-only then workdir-only,
|
|
||||||
* issuing (up to) two callbacks per file (first index, then workdir).
|
|
||||||
* This is slightly more efficient than separate calls and can make it
|
|
||||||
* easier to emulate plain `git status` text output.
|
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
|
GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
|
||||||
GIT_STATUS_SHOW_INDEX_ONLY = 1,
|
GIT_STATUS_SHOW_INDEX_ONLY = 1,
|
||||||
GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
|
GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
|
||||||
GIT_STATUS_SHOW_INDEX_THEN_WORKDIR = 3,
|
|
||||||
} git_status_show_t;
|
} git_status_show_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1249,6 +1249,8 @@ int git_diff__paired_foreach(
|
|||||||
|
|
||||||
i_max = head2idx ? head2idx->deltas.length : 0;
|
i_max = head2idx ? head2idx->deltas.length : 0;
|
||||||
j_max = idx2wd ? idx2wd->deltas.length : 0;
|
j_max = idx2wd ? idx2wd->deltas.length : 0;
|
||||||
|
if (!i_max && !j_max)
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* At some point, tree-to-index diffs will probably never ignore case,
|
/* At some point, tree-to-index diffs will probably never ignore case,
|
||||||
* even if that isn't true now. Index-to-workdir diffs may or may not
|
* even if that isn't true now. Index-to-workdir diffs may or may not
|
||||||
|
17
src/status.c
17
src/status.c
@ -257,9 +257,8 @@ int git_status_list_new(
|
|||||||
opts ? opts->show : GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
|
opts ? opts->show : GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
unsigned int flags = opts ? opts->flags : GIT_STATUS_OPT_DEFAULTS;
|
unsigned int flags = opts ? opts->flags : GIT_STATUS_OPT_DEFAULTS;
|
||||||
git_diff_list *head2idx = NULL;
|
|
||||||
|
|
||||||
assert(show <= GIT_STATUS_SHOW_INDEX_THEN_WORKDIR);
|
assert(show <= GIT_STATUS_SHOW_WORKDIR_ONLY);
|
||||||
|
|
||||||
*out = NULL;
|
*out = NULL;
|
||||||
|
|
||||||
@ -308,10 +307,8 @@ int git_status_list_new(
|
|||||||
&status->head2idx, repo, head, NULL, &diffopt)) < 0)
|
&status->head2idx, repo, head, NULL, &diffopt)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
head2idx = status->head2idx;
|
|
||||||
|
|
||||||
if ((flags & GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX) != 0 &&
|
if ((flags & GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX) != 0 &&
|
||||||
(error = git_diff_find_similar(head2idx, NULL)) < 0)
|
(error = git_diff_find_similar(status->head2idx, NULL)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,16 +322,8 @@ int git_status_list_new(
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show == GIT_STATUS_SHOW_INDEX_THEN_WORKDIR) {
|
|
||||||
if ((error = git_diff__paired_foreach(
|
|
||||||
head2idx, NULL, status_collect, status)) < 0)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
head2idx = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((error = git_diff__paired_foreach(
|
if ((error = git_diff__paired_foreach(
|
||||||
head2idx, status->idx2wd, status_collect, status)) < 0)
|
status->head2idx, status->idx2wd, status_collect, status)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (flags & GIT_STATUS_OPT_SORT_CASE_SENSITIVELY)
|
if (flags & GIT_STATUS_OPT_SORT_CASE_SENSITIVELY)
|
||||||
|
@ -320,60 +320,3 @@ static const unsigned int entry_statuses6[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const int entry_count6 = 13;
|
static const int entry_count6 = 13;
|
||||||
|
|
||||||
|
|
||||||
/* entries for a copy of tests/resources/status with options
|
|
||||||
* passed to the status call in order to get the differences
|
|
||||||
* between the HEAD and the index and then between the workdir
|
|
||||||
* and the index.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const char *entry_paths7[] = {
|
|
||||||
"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",
|
|
||||||
"file_deleted",
|
|
||||||
"ignored_file",
|
|
||||||
"modified_file",
|
|
||||||
"new_file",
|
|
||||||
"staged_changes_file_deleted",
|
|
||||||
"staged_changes_modified_file",
|
|
||||||
"staged_delete_modified_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_statuses7[] = {
|
|
||||||
GIT_STATUS_INDEX_MODIFIED,
|
|
||||||
GIT_STATUS_INDEX_MODIFIED,
|
|
||||||
GIT_STATUS_INDEX_MODIFIED,
|
|
||||||
GIT_STATUS_INDEX_DELETED,
|
|
||||||
GIT_STATUS_INDEX_DELETED,
|
|
||||||
GIT_STATUS_INDEX_NEW,
|
|
||||||
GIT_STATUS_INDEX_NEW,
|
|
||||||
GIT_STATUS_INDEX_NEW,
|
|
||||||
GIT_STATUS_WT_DELETED,
|
|
||||||
GIT_STATUS_IGNORED,
|
|
||||||
GIT_STATUS_WT_MODIFIED,
|
|
||||||
GIT_STATUS_WT_NEW,
|
|
||||||
GIT_STATUS_WT_DELETED,
|
|
||||||
GIT_STATUS_WT_MODIFIED,
|
|
||||||
GIT_STATUS_WT_NEW,
|
|
||||||
GIT_STATUS_WT_DELETED,
|
|
||||||
GIT_STATUS_WT_MODIFIED,
|
|
||||||
GIT_STATUS_WT_DELETED,
|
|
||||||
GIT_STATUS_WT_MODIFIED,
|
|
||||||
GIT_STATUS_WT_NEW,
|
|
||||||
GIT_STATUS_WT_NEW,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const int entry_count7 = 21;
|
|
||||||
|
@ -82,12 +82,6 @@ void test_status_worktree__show_workdir_only(void)
|
|||||||
GIT_STATUS_SHOW_WORKDIR_ONLY);
|
GIT_STATUS_SHOW_WORKDIR_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_status_worktree__show_index_then_workdir_only(void)
|
|
||||||
{
|
|
||||||
assert_show(entry_count7, entry_paths7, entry_statuses7,
|
|
||||||
GIT_STATUS_SHOW_INDEX_THEN_WORKDIR);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this test is equivalent to t18-status.c:statuscb1 */
|
/* this test is equivalent to t18-status.c:statuscb1 */
|
||||||
void test_status_worktree__empty_repository(void)
|
void test_status_worktree__empty_repository(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user