mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-04 05:13:50 +00:00

The goal of this work is to expose the search logic for "global", "system", and "xdg" files through the git_libgit2_opts() interface. Behind the scenes, I changed the logic for finding files to have a notion of a git_strarray that represents a search path and to store a separate search path for each of the three tiers of config file. For each tier, I implemented a function to initialize it to default values (generally based on environment variables), and then general interfaces to get it, set it, reset it, and prepend new directories to it. Next, I exposed these interfaces through the git_libgit2_opts interface, reusing the GIT_CONFIG_LEVEL_SYSTEM, etc., constants for the user to control which search path they were modifying. There are alternative designs for the opts interface / argument ordering, so I'm putting this phase out for discussion. Additionally, I ended up doing a little bit of clean up regarding attr.h and attr_file.h, adding a new attrcache.h so the other two files wouldn't have to be included in so many places.
185 lines
4.9 KiB
C
185 lines
4.9 KiB
C
/*
|
|
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
*
|
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
*/
|
|
#ifndef INCLUDE_git_common_h__
|
|
#define INCLUDE_git_common_h__
|
|
|
|
#include <time.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef _MSC_VER
|
|
# include "inttypes.h"
|
|
#else
|
|
# include <inttypes.h>
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
# define GIT_BEGIN_DECL extern "C" {
|
|
# define GIT_END_DECL }
|
|
#else
|
|
/** Start declarations in C mode */
|
|
# define GIT_BEGIN_DECL /* empty */
|
|
/** End declarations in C mode */
|
|
# define GIT_END_DECL /* empty */
|
|
#endif
|
|
|
|
/** Declare a public function exported for application use. */
|
|
#if __GNUC__ >= 4
|
|
# define GIT_EXTERN(type) extern \
|
|
__attribute__((visibility("default"))) \
|
|
type
|
|
#elif defined(_MSC_VER)
|
|
# define GIT_EXTERN(type) __declspec(dllexport) type
|
|
#else
|
|
# define GIT_EXTERN(type) extern type
|
|
#endif
|
|
|
|
/** Declare a function as always inlined. */
|
|
#if defined(_MSC_VER)
|
|
# define GIT_INLINE(type) static __inline type
|
|
#else
|
|
# define GIT_INLINE(type) static inline type
|
|
#endif
|
|
|
|
/** Declare a function's takes printf style arguments. */
|
|
#ifdef __GNUC__
|
|
# define GIT_FORMAT_PRINTF(a,b) __attribute__((format (printf, a, b)))
|
|
#else
|
|
# define GIT_FORMAT_PRINTF(a,b) /* empty */
|
|
#endif
|
|
|
|
#if (defined(_WIN32)) && !defined(__CYGWIN__)
|
|
#define GIT_WIN32 1
|
|
#endif
|
|
|
|
#ifdef __amigaos4__
|
|
#include <netinet/in.h>
|
|
#endif
|
|
|
|
/**
|
|
* @file git2/common.h
|
|
* @brief Git common platform definitions
|
|
* @defgroup git_common Git common platform definitions
|
|
* @ingroup Git
|
|
* @{
|
|
*/
|
|
|
|
GIT_BEGIN_DECL
|
|
|
|
/**
|
|
* The separator used in path list strings (ie like in the PATH
|
|
* environment variable). A semi-colon ";" is used on Windows, and
|
|
* a colon ":" for all other systems.
|
|
*/
|
|
#ifdef GIT_WIN32
|
|
#define GIT_PATH_LIST_SEPARATOR ';'
|
|
#else
|
|
#define GIT_PATH_LIST_SEPARATOR ':'
|
|
#endif
|
|
|
|
/**
|
|
* The maximum length of a valid git path.
|
|
*/
|
|
#define GIT_PATH_MAX 4096
|
|
|
|
/**
|
|
* The string representation of the null object ID.
|
|
*/
|
|
#define GIT_OID_HEX_ZERO "0000000000000000000000000000000000000000"
|
|
|
|
/**
|
|
* Return the version of the libgit2 library
|
|
* being currently used.
|
|
*
|
|
* @param major Store the major version number
|
|
* @param minor Store the minor version number
|
|
* @param rev Store the revision (patch) number
|
|
*/
|
|
GIT_EXTERN(void) git_libgit2_version(int *major, int *minor, int *rev);
|
|
|
|
/**
|
|
* Combinations of these values describe the capabilities of libgit2.
|
|
*/
|
|
enum {
|
|
GIT_CAP_THREADS = ( 1 << 0 ),
|
|
GIT_CAP_HTTPS = ( 1 << 1 )
|
|
};
|
|
|
|
/**
|
|
* Query compile time options for libgit2.
|
|
*
|
|
* @return A combination of GIT_CAP_* values.
|
|
*
|
|
* - GIT_CAP_THREADS
|
|
* Libgit2 was compiled with thread support. Note that thread support is still to be seen as a
|
|
* 'work in progress'.
|
|
*
|
|
* - GIT_CAP_HTTPS
|
|
* Libgit2 supports the https:// protocol. This requires the open ssl library to be
|
|
* found when compiling libgit2.
|
|
*/
|
|
GIT_EXTERN(int) git_libgit2_capabilities(void);
|
|
|
|
|
|
enum {
|
|
GIT_OPT_GET_MWINDOW_SIZE,
|
|
GIT_OPT_SET_MWINDOW_SIZE,
|
|
GIT_OPT_GET_MWINDOW_MAPPED_LIMIT,
|
|
GIT_OPT_SET_MWINDOW_MAPPED_LIMIT,
|
|
GIT_OPT_GET_SEARCH_PATH,
|
|
GIT_OPT_SET_SEARCH_PATH,
|
|
GIT_OPT_PREPEND_SEARCH_PATH,
|
|
};
|
|
|
|
/**
|
|
* Set or query a library global option
|
|
*
|
|
* Available options:
|
|
*
|
|
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):
|
|
* Get the maximum mmap window size
|
|
*
|
|
* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):
|
|
* Set the maximum mmap window size
|
|
*
|
|
* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):
|
|
* Get the maximum memory that will be mapped in total by the library
|
|
*
|
|
* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):
|
|
* Set the maximum amount of memory that can be mapped at any time
|
|
* by the library
|
|
*
|
|
* opts(GIT_OPT_GET_SEARCH_PATH, const git_strarray **, int level)
|
|
* Get a strarray of the search path for a given level of config
|
|
* data. "level" must be one of GIT_CONFIG_LEVEL_SYSTEM,
|
|
* GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search
|
|
* path applies to shared attributes and ignore files, too.
|
|
*
|
|
* opts(GIT_OPT_SET_SEARCH_PATH, int level, const git_strarray *)
|
|
* Set the search path for a given level of config data. Passing
|
|
* NULL for the git_strarray pointer resets the search path to the
|
|
* default (which is generally based on environment variables).
|
|
* "level" must be one of GIT_CONFIG_LEVEL_SYSTEM,
|
|
* GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search
|
|
* path applies to shared attributes and ignore files, too.
|
|
*
|
|
* opts(GIT_OPT_PREPEND_SEARCH_PATH, int level, const git_strarray *)
|
|
* Prepend new directories to the search path for a given level of
|
|
* config data. "level" must be one of GIT_CONFIG_LEVEL_SYSTEM,
|
|
* GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search
|
|
* path applies to shared attributes and ignore files, too.
|
|
*
|
|
* @param option Option key
|
|
* @param ... value to set the option
|
|
* @return 0 on success, <0 on failure
|
|
*/
|
|
GIT_EXTERN(int) git_libgit2_opts(int option, ...);
|
|
|
|
/** @} */
|
|
GIT_END_DECL
|
|
|
|
#endif
|