Commit b8cd7aa9 by Vicent Martí

Merge pull request #1704 from arrbee/kill-status-index-then-workdir

Remove GIT_STATUS_SHOW_INDEX_THEN_WORKDIR option
parents 77fa06f3 2a16914c
......@@ -60,25 +60,24 @@ typedef int (*git_status_cb)(
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
* matches `git status --porcelain` where each file gets a callback
* indicating its status in the index and in the working directory.
* matches `git status --porcelain` regarding which files are
* included and in what order.
* - GIT_STATUS_SHOW_INDEX_ONLY only gives status based on HEAD to index
* comparison, not looking at working directory changes.
* - GIT_STATUS_SHOW_WORKDIR_ONLY only gives status based on index to
* 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 {
GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
GIT_STATUS_SHOW_INDEX_ONLY = 1,
GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
GIT_STATUS_SHOW_INDEX_THEN_WORKDIR = 3,
} git_status_show_t;
/**
......
......@@ -1249,6 +1249,8 @@ int git_diff__paired_foreach(
i_max = head2idx ? head2idx->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,
* even if that isn't true now. Index-to-workdir diffs may or may not
......
......@@ -257,9 +257,8 @@ int git_status_list_new(
opts ? opts->show : GIT_STATUS_SHOW_INDEX_AND_WORKDIR;
int error = 0;
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;
......@@ -308,10 +307,8 @@ int git_status_list_new(
&status->head2idx, repo, head, NULL, &diffopt)) < 0)
goto done;
head2idx = status->head2idx;
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;
}
......@@ -325,16 +322,8 @@ int git_status_list_new(
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(
head2idx, status->idx2wd, status_collect, status)) < 0)
status->head2idx, status->idx2wd, status_collect, status)) < 0)
goto done;
if (flags & GIT_STATUS_OPT_SORT_CASE_SENSITIVELY)
......
......@@ -320,60 +320,3 @@ static const unsigned int entry_statuses6[] = {
};
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);
}
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 */
void test_status_worktree__empty_repository(void)
{
......
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