Commit d39fff36484e908438beb17ee043689962182460

Russell Belfer 2013-06-23T20:33:57

Basic framework for log command

diff --git a/examples/Makefile b/examples/Makefile
index 140cc4d..6288906 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -3,7 +3,7 @@
 CC = gcc
 CFLAGS = -g -I../include -I../src -Wall -Wextra -Wmissing-prototypes -Wno-missing-field-initializers
 LFLAGS = -L../build -lgit2 -lz
-APPS = general showindex diff rev-list cat-file status
+APPS = general showindex diff rev-list cat-file status log
 
 all: $(APPS)
 
diff --git a/examples/log.c b/examples/log.c
new file mode 100644
index 0000000..f92b669
--- /dev/null
+++ b/examples/log.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <git2.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void check(int error, const char *message)
+{
+	if (error) {
+		fprintf(stderr, "%s (%d)\n", message, error);
+		exit(1);
+	}
+}
+
+static int check_str_param(const char *arg, const char *pat, const char **val)
+{
+	size_t len = strlen(pat);
+	if (strncmp(arg, pat, len))
+		return 0;
+	*val = (const char *)(arg + len);
+	return 1;
+}
+
+static void usage(const char *message, const char *arg)
+{
+	if (message && arg)
+		fprintf(stderr, "%s: %s\n", message, arg);
+	else if (message)
+		fprintf(stderr, "%s\n", message);
+	fprintf(stderr, "usage: log [<options>]\n");
+	exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+	int i;
+	char *a;
+	const char *dir = ".";
+	git_repository *repo;
+
+	git_threads_init();
+
+	for (i = 1; i < argc; ++i) {
+		a = argv[i];
+
+		if (a[0] != '-') {
+		}
+		else if (!check_str_param(a, "--git-dir=", &dir))
+			usage("Unknown argument", a);
+	}
+
+	check(git_repository_open_ext(&repo, dir, 0, NULL),
+		"Could not open repository");
+
+	git_repository_free(repo);
+	git_threads_shutdown();
+
+	return 0;
+}