optimize...
make the stage check faster by filtering the status list
This commit is contained in:
12
XD.c
12
XD.c
@ -188,9 +188,13 @@ has_staged(git_repository *repo)
|
|||||||
{
|
{
|
||||||
git_status_entry entry;
|
git_status_entry entry;
|
||||||
git_status_list *list = NULL;
|
git_status_list *list = NULL;
|
||||||
|
git_status_options opts = GIT_STATUS_OPTIONS_INIT;
|
||||||
int i, c, r = 0;
|
int i, c, r = 0;
|
||||||
|
|
||||||
if (git_status_list_new(&list, repo, NULL) < 0) {
|
opts.flags = GIT_STATUS_INDEX_NEW;
|
||||||
|
opts.show = GIT_STATUS_SHOW_INDEX_ONLY;
|
||||||
|
|
||||||
|
if (git_status_list_new(&list, repo, &opts) < 0) {
|
||||||
L("Error checking for staged changes: %s", git_error_last()->message);
|
L("Error checking for staged changes: %s", git_error_last()->message);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -200,9 +204,9 @@ has_staged(git_repository *repo)
|
|||||||
for (i = 0; i < c; i++) {
|
for (i = 0; i < c; i++) {
|
||||||
entry = *git_status_byindex(list, i);
|
entry = *git_status_byindex(list, i);
|
||||||
|
|
||||||
if (entry.status & GIT_STATUS_INDEX_NEW
|
if (entry.status & (GIT_STATUS_INDEX_NEW
|
||||||
|| entry.status & GIT_STATUS_INDEX_DELETED
|
| GIT_STATUS_INDEX_DELETED
|
||||||
|| entry.status & GIT_STATUS_INDEX_MODIFIED) {
|
| GIT_STATUS_INDEX_MODIFIED)) {
|
||||||
r = 1;
|
r = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user