From dbc4aa0750717e08efe41a0267347d8046462c5c Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Fri, 28 Dec 2012 22:00:24 -0800 Subject: [PATCH] Update showindex example I find the showindex example to be pretty useful on occasion, but there were are couple of output tweaks I wanted, plus I wanted the ability to specify a path to an actual index file instead of having to open the whole repository. This makes those changes and expands the example slightly. --- examples/showindex.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/examples/showindex.c b/examples/showindex.c index 4b50ffd0f..e92a9c8de 100644 --- a/examples/showindex.c +++ b/examples/showindex.c @@ -1,28 +1,41 @@ #include #include +#include int main (int argc, char** argv) { - git_repository *repo; + git_repository *repo = NULL; git_index *index; unsigned int i, ecount; char *dir = "."; + size_t dirlen; char out[41]; out[40] = '\0'; if (argc > 1) dir = argv[1]; - if (argc > 2) { + if (!dir || argc > 2) { fprintf(stderr, "usage: showindex []\n"); return 1; } - if (git_repository_open_ext(&repo, dir, 0, NULL) < 0) { - fprintf(stderr, "could not open repository: %s\n", dir); - return 1; + dirlen = strlen(dir); + if (dirlen > 5 && strcmp(dir + dirlen - 5, "index") == 0) { + if (git_index_open(&index, dir) < 0) { + fprintf(stderr, "could not open index: %s\n", dir); + return 1; + } + } else { + if (git_repository_open_ext(&repo, dir, 0, NULL) < 0) { + fprintf(stderr, "could not open repository: %s\n", dir); + return 1; + } + if (git_repository_index(&index, repo) < 0) { + fprintf(stderr, "could not open repository index\n"); + return 1; + } } - git_repository_index(&index, repo); git_index_read(index); ecount = git_index_entrycount(index); @@ -37,11 +50,10 @@ int main (int argc, char** argv) printf("File Path: %s\n", e->path); printf(" Stage: %d\n", git_index_entry_stage(e)); printf(" Blob SHA: %s\n", out); - printf("File Size: %d\n", (int)e->file_size); - printf(" Device: %d\n", (int)e->dev); - printf(" Inode: %d\n", (int)e->ino); - printf(" UID: %d\n", (int)e->uid); - printf(" GID: %d\n", (int)e->gid); + printf("File Mode: %07o\n", e->mode); + printf("File Size: %d bytes\n", (int)e->file_size); + printf("Dev/Inode: %d/%d\n", (int)e->dev, (int)e->ino); + printf(" UID/GID: %d/%d\n", (int)e->uid, (int)e->gid); printf(" ctime: %d\n", (int)e->ctime.seconds); printf(" mtime: %d\n", (int)e->mtime.seconds); printf("\n");