common.h 4.41 KB
Newer Older
1
/*
2
 * Utilities library for libgit2 examples
3
 *
4 5 6 7 8 9 10 11 12
 * Written by the libgit2 contributors
 *
 * To the extent possible under law, the author(s) have dedicated all copyright
 * and related and neighboring rights to this software to the public domain
 * worldwide. This software is distributed without any warranty.
 *
 * You should have received a copy of the CC0 Public Domain Dedication along
 * with this software. If not, see
 * <http://creativecommons.org/publicdomain/zero/1.0/>.
13
 */
14 15
#ifndef INCLUDE_examples_common_h__
#define INCLUDE_examples_common_h__
16

17
#include <assert.h>
18 19
#include <sys/types.h>
#include <sys/stat.h>
20 21 22 23
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <git2.h>
24 25 26 27 28 29 30 31 32 33 34 35 36
#include <fcntl.h>

#ifdef _WIN32
# include <io.h>
# include <Windows.h>
# define open _open
# define read _read
# define close _close
# define ssize_t int
# define sleep(a) Sleep(a * 1000)
#else
# include <unistd.h>
#endif
37

38
#ifndef PRIuZ
Aaron Franke committed
39
/* Define the printf format specifier to use for size_t output */
40 41 42 43 44 45 46
#if defined(_MSC_VER) || defined(__MINGW32__)
#	define PRIuZ "Iu"
#else
#	define PRIuZ "zu"
#endif
#endif

47 48 49 50 51
#ifdef _MSC_VER
#define snprintf sprintf_s
#define strcasecmp strcmpi
#endif

52
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(*x))
53 54
#define UNUSED(x) (void)(x)

55 56
#include "args.h"

57 58 59 60 61
extern int lg2_add(git_repository *repo, int argc, char **argv);
extern int lg2_blame(git_repository *repo, int argc, char **argv);
extern int lg2_cat_file(git_repository *repo, int argc, char **argv);
extern int lg2_checkout(git_repository *repo, int argc, char **argv);
extern int lg2_clone(git_repository *repo, int argc, char **argv);
62
extern int lg2_commit(git_repository *repo, int argc, char **argv);
63
extern int lg2_config(git_repository *repo, int argc, char **argv);
64 65 66 67 68 69 70 71 72 73 74
extern int lg2_describe(git_repository *repo, int argc, char **argv);
extern int lg2_diff(git_repository *repo, int argc, char **argv);
extern int lg2_fetch(git_repository *repo, int argc, char **argv);
extern int lg2_for_each_ref(git_repository *repo, int argc, char **argv);
extern int lg2_general(git_repository *repo, int argc, char **argv);
extern int lg2_index_pack(git_repository *repo, int argc, char **argv);
extern int lg2_init(git_repository *repo, int argc, char **argv);
extern int lg2_log(git_repository *repo, int argc, char **argv);
extern int lg2_ls_files(git_repository *repo, int argc, char **argv);
extern int lg2_ls_remote(git_repository *repo, int argc, char **argv);
extern int lg2_merge(git_repository *repo, int argc, char **argv);
75
extern int lg2_push(git_repository *repo, int argc, char **argv);
76 77 78 79
extern int lg2_remote(git_repository *repo, int argc, char **argv);
extern int lg2_rev_list(git_repository *repo, int argc, char **argv);
extern int lg2_rev_parse(git_repository *repo, int argc, char **argv);
extern int lg2_show_index(git_repository *repo, int argc, char **argv);
80
extern int lg2_stash(git_repository *repo, int argc, char **argv);
81 82 83
extern int lg2_status(git_repository *repo, int argc, char **argv);
extern int lg2_tag(git_repository *repo, int argc, char **argv);

84 85 86 87 88 89 90
/**
 * Check libgit2 error code, printing error to stderr on failure and
 * exiting the program.
 */
extern void check_lg2(int error, const char *message, const char *extra);

/**
91 92 93 94 95 96 97 98
 * Read a file into a buffer
 *
 * @param path The path to the file that shall be read
 * @return NUL-terminated buffer if the file was successfully read, NULL-pointer otherwise
 */
extern char *read_file(const char *path);

/**
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
 * Exit the program, printing error to stderr
 */
extern void fatal(const char *message, const char *extra);

/**
 * Basic output function for plain text diff output
 * Pass `FILE*` such as `stdout` or `stderr` as payload (or NULL == `stdout`)
 */
extern int diff_output(
	const git_diff_delta*, const git_diff_hunk*, const git_diff_line*, void*);

/**
 * Convert a treeish argument to an actual tree; this will call check_lg2
 * and exit the program if `treeish` cannot be resolved to a tree
 */
extern void treeish_to_tree(
	git_tree **out, git_repository *repo, const char *treeish);
116 117 118 119 120

/**
 * A realloc that exits on failure
 */
extern void *xrealloc(void *oldp, size_t newsz);
121 122 123 124 125

/**
 * Convert a refish to an annotated commit.
 */
extern int resolve_refish(git_annotated_commit **commit, git_repository *repo, const char *refish);
126 127 128 129

/**
 * Acquire credentials via command line
 */
130
extern int cred_acquire_cb(git_credential **out,
131 132 133 134
		const char *url,
		const char *username_from_url,
		unsigned int allowed_types,
		void *payload);
135 136

#endif