diff options
Diffstat (limited to 'XD.c')
-rw-r--r-- | XD.c | 40 |
1 files changed, 33 insertions, 7 deletions
@@ -7,12 +7,6 @@ #ifdef GIT #include <git2.h> -#include <git2/common.h> -#include <git2/errors.h> -#include <git2/global.h> -#include <git2/refs.h> -#include <git2/repository.h> -#include <git2/status.h> #endif enum face { EYES, NOSE, MOUTH }; @@ -126,6 +120,36 @@ has_untracked(git_repository *repo) git_status_list_free(list); return r; } + +int +has_staged(git_repository *repo) +{ + git_status_entry entry; + git_status_list *list = NULL; + int i, c, r = 0; + + if (git_status_list_new(&list, repo, NULL) < 0) { + l("Error checking for staged changes: %s", git_error_last()->message); + return 0; + } + + /* if any staged changes are found return 1 */ + if ((c = git_status_list_entrycount(list)) > 0) { + for (i = 0; i < c; i++) { + entry = *git_status_byindex(list, i); + + if (entry.status & GIT_STATUS_INDEX_NEW + || entry.status & GIT_STATUS_INDEX_DELETED + || entry.status & GIT_STATUS_INDEX_MODIFIED) { + r = 1; + break; + } + } + } + + git_status_list_free(list); + return r; +} #endif int @@ -153,7 +177,9 @@ main(int argc, char *argv[]) } /* change the nose depending on the current git repo's status */ - if (has_untracked(repo)) { + if (has_staged(repo)) { + face[NOSE] = '*'; /* change to broken nose for staged changes */ + } else if (has_untracked(repo)) { face[NOSE] = '^'; /* add a little nose when there are untracked changes in the repo */ } else if (git_repository_head_detached(repo)) { face[NOSE] = '-'; /* add a minus nose when the HEAD is detached */ |