summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2012-12-28 22:00:24 -0800
committerRussell Belfer <rb@github.com>2012-12-28 22:00:24 -0800
commitdbc4aa0750717e08efe41a0267347d8046462c5c (patch)
treed4b4109cb0c9945e7a9ed3a631fc3b5b4bbe3b5d /examples
parent3d4064a2cba57fca3f86c5b4d00051ab88f3760d (diff)
downloadlibgit2-dbc4aa0750717e08efe41a0267347d8046462c5c.tar.gz
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.
Diffstat (limited to 'examples')
-rw-r--r--examples/showindex.c34
1 files 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 <git2.h>
#include <stdio.h>
+#include <string.h>
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 [<repo-dir>]\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");