mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 11:00:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdlib.h>
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #include "common.h"
 | |
| 
 | |
| // This part is not strictly libgit2-dependent, but you can use this
 | |
| // as a starting point for a git-like tool
 | |
| 
 | |
| struct {
 | |
| 	char *name;
 | |
| 	git_cb fn;
 | |
| } commands[] = {
 | |
| 	{"ls-remote", ls_remote},
 | |
| 	{"fetch", fetch},
 | |
| 	{"clone", do_clone},
 | |
| 	{"index-pack", index_pack},
 | |
| 	{ NULL, NULL}
 | |
| };
 | |
| 
 | |
| static int run_command(git_cb fn, int argc, char **argv)
 | |
| {
 | |
| 	int error;
 | |
| 	git_repository *repo;
 | |
| 
 | |
| 	// Before running the actual command, create an instance of the local
 | |
| 	// repository and pass it to the function.
 | |
| 
 | |
| 	error = git_repository_open(&repo, ".git");
 | |
| 	if (error < 0)
 | |
| 		repo = NULL;
 | |
| 
 | |
| 	// Run the command. If something goes wrong, print the error message to stderr
 | |
| 	error = fn(repo, argc, argv);
 | |
| 	if (error < 0) {
 | |
| 		if (giterr_last() == NULL)
 | |
| 			fprintf(stderr, "Error without message");
 | |
| 		else
 | |
| 			fprintf(stderr, "Bad news:\n %s\n", giterr_last()->message);
 | |
| 	}
 | |
| 
 | |
| 	if(repo)
 | |
| 		git_repository_free(repo);
 | |
| 
 | |
| 	return !!error;
 | |
| }
 | |
| 
 | |
| int main(int argc, char **argv)
 | |
| {
 | |
| 	int i;
 | |
| 	int return_code = 1;
 | |
| 
 | |
| 	if (argc < 2) {
 | |
| 		fprintf(stderr, "usage: %s <cmd> [repo]\n", argv[0]);
 | |
| 		exit(EXIT_FAILURE);
 | |
| 	}
 | |
| 
 | |
| 	git_libgit2_init();
 | |
| 
 | |
| 	for (i = 0; commands[i].name != NULL; ++i) {
 | |
| 		if (!strcmp(argv[1], commands[i].name)) {
 | |
| 			return_code = run_command(commands[i].fn, --argc, ++argv);
 | |
| 			goto shutdown;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	fprintf(stderr, "Command not found: %s\n", argv[1]);
 | |
| 
 | |
| shutdown:
 | |
| 	git_libgit2_shutdown();
 | |
| 
 | |
| 	return return_code;
 | |
| }
 | 
