Commit 7b2b6da661f76cc6f2eb6afbb7b47c7829cf9f9e

Vicent Martí 2013-09-01T13:39:11

Merge pull request #1822 from kadamski/examples-cleanup Small cleanup in examples.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c70ec2..317ed1b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -426,4 +426,19 @@ IF (BUILD_EXAMPLES)
 
 	ADD_EXECUTABLE(git-rev-list examples/rev-list.c)
 	TARGET_LINK_LIBRARIES(git-rev-list git2)
+
+	ADD_EXECUTABLE(git-rev-parse examples/rev-parse.c)
+	TARGET_LINK_LIBRARIES(git-rev-parse git2)
+
+	ADD_EXECUTABLE(git-log examples/log.c)
+	TARGET_LINK_LIBRARIES(git-log git2)
+
+	ADD_EXECUTABLE(git-status examples/status.c)
+	TARGET_LINK_LIBRARIES(git-status git2)
+
+	ADD_EXECUTABLE(git-init examples/init.c)
+	TARGET_LINK_LIBRARIES(git-init git2)
+
+	ADD_EXECUTABLE(git-cat-file examples/cat-file.c)
+	TARGET_LINK_LIBRARIES(git-cat-file git2)
 ENDIF ()
diff --git a/examples/network/Makefile b/examples/network/Makefile
index 810eb70..f65c6cb 100644
--- a/examples/network/Makefile
+++ b/examples/network/Makefile
@@ -11,7 +11,8 @@ OBJECTS = \
   ls-remote.o \
   fetch.o \
   clone.o \
-  index-pack.o
+  index-pack.o \
+  common.o
 
 all: $(OBJECTS)
 	$(CC) $(CFLAGS) $(LDFLAGS) -o git2 $(OBJECTS) $(LIBRARIES)
diff --git a/examples/network/clone.c b/examples/network/clone.c
index 00c25c1..a09a947 100644
--- a/examples/network/clone.c
+++ b/examples/network/clone.c
@@ -9,19 +9,6 @@
 # include <unistd.h>
 #endif
 
-/* Shamelessly borrowed from http://stackoverflow.com/questions/3417837/
- * with permission of the original author, Martin Pool.
- * http://sourcefrog.net/weblog/software/languages/C/unused.html
- */
-#ifdef UNUSED
-#elif defined(__GNUC__)
-# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
-#elif defined(__LCLINT__)
-# define UNUSED(x) /*@unused@*/ x
-#else
-# define UNUSED(x) x
-#endif
-
 typedef struct progress_data {
 	git_transfer_progress fetch_progress;
 	size_t completed_steps;
@@ -63,24 +50,6 @@ static void checkout_progress(const char *path, size_t cur, size_t tot, void *pa
 	print_progress(pd);
 }
 
-static int cred_acquire(git_cred **out,
-		const char * UNUSED(url),
-		const char * UNUSED(username_from_url),
-		unsigned int UNUSED(allowed_types),
-		void * UNUSED(payload))
-{
-	char username[128] = {0};
-	char password[128] = {0};
-
-	printf("Username: ");
-	scanf("%s", username);
-
-	/* Yup. Right there on your terminal. Careful where you copy/paste output. */
-	printf("Password: ");
-	scanf("%s", password);
-
-	return git_cred_userpass_plaintext_new(out, username, password);
-}
 
 int do_clone(git_repository *repo, int argc, char **argv)
 {
@@ -107,7 +76,7 @@ int do_clone(git_repository *repo, int argc, char **argv)
 	clone_opts.checkout_opts = checkout_opts;
 	clone_opts.fetch_progress_cb = &fetch_progress;
 	clone_opts.fetch_progress_payload = &pd;
-	clone_opts.cred_acquire_cb = cred_acquire;
+	clone_opts.cred_acquire_cb = cred_acquire_cb;
 
 	// Do the clone
 	error = git_clone(&cloned_repo, url, path, &clone_opts);
diff --git a/examples/network/common.c b/examples/network/common.c
new file mode 100644
index 0000000..d123eed
--- /dev/null
+++ b/examples/network/common.c
@@ -0,0 +1,34 @@
+#include "common.h"
+#include <stdio.h>
+
+/* Shamelessly borrowed from http://stackoverflow.com/questions/3417837/
+ * with permission of the original author, Martin Pool.
+ * http://sourcefrog.net/weblog/software/languages/C/unused.html
+ */
+#ifdef UNUSED
+#elif defined(__GNUC__)
+# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
+#elif defined(__LCLINT__)
+# define UNUSED(x) /*@unused@*/ x
+#else
+# define UNUSED(x) x
+#endif
+
+int cred_acquire_cb(git_cred **out,
+		const char * UNUSED(url),
+		const char * UNUSED(username_from_url),
+		unsigned int UNUSED(allowed_types),
+		void * UNUSED(payload))
+{
+	char username[128] = {0};
+	char password[128] = {0};
+
+	printf("Username: ");
+	scanf("%s", username);
+
+	/* Yup. Right there on your terminal. Careful where you copy/paste output. */
+	printf("Password: ");
+	scanf("%s", password);
+
+	return git_cred_userpass_plaintext_new(out, username, password);
+}
diff --git a/examples/network/common.h b/examples/network/common.h
index a4cfa1a..1b09caa 100644
--- a/examples/network/common.h
+++ b/examples/network/common.h
@@ -12,6 +12,12 @@ int fetch(git_repository *repo, int argc, char **argv);
 int index_pack(git_repository *repo, int argc, char **argv);
 int do_clone(git_repository *repo, int argc, char **argv);
 
+int cred_acquire_cb(git_cred **out,
+		const char * url,
+		const char * username_from_url,
+		unsigned int allowed_types,
+		void *payload);
+
 #ifndef PRIuZ
 /* Define the printf format specifer to use for size_t output */
 #if defined(_MSC_VER) || defined(__MINGW32__)
diff --git a/examples/network/fetch.c b/examples/network/fetch.c
index 6020ec6..ce016ce 100644
--- a/examples/network/fetch.c
+++ b/examples/network/fetch.c
@@ -92,6 +92,7 @@ int fetch(git_repository *repo, int argc, char **argv)
 	callbacks.update_tips = &update_cb;
 	callbacks.progress = &progress_cb;
 	git_remote_set_callbacks(remote, &callbacks);
+	git_remote_set_cred_acquire_cb(remote, &cred_acquire_cb, NULL);
 
 	// Set up the information for the background worker thread
 	data.remote = remote;
diff --git a/examples/network/ls-remote.c b/examples/network/ls-remote.c
index 2520118..b22ac47 100644
--- a/examples/network/ls-remote.c
+++ b/examples/network/ls-remote.c
@@ -14,31 +14,6 @@ static int show_ref__cb(git_remote_head *head, void *payload)
 	return 0;
 }
 
-static int use_unnamed(git_repository *repo, const char *url)
-{
-	git_remote *remote = NULL;
-	int error;
-
-	// Create an instance of a remote from the URL. The transport to use
-	// is detected from the URL
-	error = git_remote_create_inmemory(&remote, repo, NULL, url);
-	if (error < 0)
-		goto cleanup;
-
-	// When connecting, the underlying code needs to know wether we
-	// want to push or fetch
-	error = git_remote_connect(remote, GIT_DIRECTION_FETCH);
-	if (error < 0)
-		goto cleanup;
-
-	// With git_remote_ls we can retrieve the advertised heads
-	error = git_remote_ls(remote, &show_ref__cb, NULL);
-
-cleanup:
-	git_remote_free(remote);
-	return error;
-}
-
 static int use_remote(git_repository *repo, char *name)
 {
 	git_remote *remote = NULL;
@@ -46,8 +21,13 @@ static int use_remote(git_repository *repo, char *name)
 
 	// Find the remote by name
 	error = git_remote_load(&remote, repo, name);
-	if (error < 0)
-		goto cleanup;
+	if (error < 0) {
+		error = git_remote_create_inmemory(&remote, repo, NULL, name);
+		if (error < 0)
+			goto cleanup;
+	}
+
+	git_remote_set_cred_acquire_cb(remote, &cred_acquire_cb, NULL);
 
 	error = git_remote_connect(remote, GIT_DIRECTION_FETCH);
 	if (error < 0)
@@ -72,12 +52,7 @@ int ls_remote(git_repository *repo, int argc, char **argv)
 		return EXIT_FAILURE;
 	}
 
-	/* If there's a ':' in the name, assume it's an URL */
-	if (strchr(argv[1], ':') != NULL) {
-		error = use_unnamed(repo, argv[1]);
-	} else {
-		error = use_remote(repo, argv[1]);
-	}
+	error = use_remote(repo, argv[1]);
 
 	return error;
 }