/* * Utilities library for libgit2 examples * * 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 * . */ #include #include #include #include /** * 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); /** * Exit the program, printing error to stderr */ extern void fatal(const char *message, const char *extra); /** * Check if a string has the given prefix. Returns 0 if not prefixed * or the length of the prefix if it is. */ extern size_t is_prefixed(const char *str, const char *pfx); /** * Match an integer string, returning 1 if matched, 0 if not. */ extern int is_integer(int *out, const char *str, int allow_negative); struct args_info { int argc; char **argv; int pos; }; #define ARGS_INFO_INIT { argc, argv, 0 } /** * Check current `args` entry against `opt` string. If it matches * exactly, take the next arg as a string; if it matches as a prefix with * an equal sign, take the remainder as a string; if value not supplied, * default value `def` will be given. otherwise return 0. */ extern int optional_str_arg( const char **out, struct args_info *args, const char *opt, const char *def); /** * Check current `args` entry against `opt` string. If it matches * exactly, take the next arg as a string; if it matches as a prefix with * an equal sign, take the remainder as a string; otherwise return 0. */ extern int match_str_arg( const char **out, struct args_info *args, const char *opt); /** * Check current `args` entry against `opt` string parsing as uint16. If * `opt` matches exactly, take the next arg as a uint16_t value; if `opt` * is a prefix (equal sign optional), take the remainder of the arg as a * uint16_t value; otherwise return 0. */ extern int match_uint16_arg( uint16_t *out, struct args_info *args, const char *opt); /** * Check current `args` entry against `opt` string parsing as uint32. If * `opt` matches exactly, take the next arg as a uint16_t value; if `opt` * is a prefix (equal sign optional), take the remainder of the arg as a * uint32_t value; otherwise return 0. */ extern int match_uint32_arg( uint32_t *out, struct args_info *args, const char *opt); /** * Check current `args` entry against `opt` string parsing as int. If * `opt` matches exactly, take the next arg as an int value; if it matches * as a prefix (equal sign optional), take the remainder of the arg as a * int value; otherwise return 0. */ extern int match_int_arg( int *out, struct args_info *args, const char *opt, int allow_negative); /** * 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);