| /* |
| * Copyright (C) 2009-2011 the libgit2 contributors |
| * |
| * 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_config_h__ |
| #define INCLUDE_git_config_h__ |
| |
| #include "common.h" |
| #include "types.h" |
| |
| /** |
| * @file git2/config.h |
| * @brief Git config management routines |
| * @defgroup git_config Git config management routines |
| * @ingroup Git |
| * @{ |
| */ |
| GIT_BEGIN_DECL |
| |
| /** |
| * Generic backend that implements the interface to |
| * access a configuration file |
| */ |
| struct git_config_file { |
| struct git_config *cfg; |
| |
| /* Open means open the file/database and parse if necessary */ |
| int (*open)(struct git_config_file *); |
| int (*get)(struct git_config_file *, const char *key, const char **value); |
| int (*set)(struct git_config_file *, const char *key, const char *value); |
| int (*foreach)(struct git_config_file *, int (*fn)(const char *, const char *, void *), void *data); |
| void (*free)(struct git_config_file *); |
| }; |
| |
| /** |
| * Locate the path to the global configuration file |
| * |
| * The user or global configuration file is usually |
| * located in `$HOME/.gitconfig`. |
| * |
| * This method will try to guess the full path to that |
| * file, if the file exists. The returned path |
| * may be used on any `git_config` call to load the |
| * global configuration file. |
| * |
| * @param global_config_path Buffer of GIT_PATH_MAX length to store the path |
| * @return GIT_SUCCESS if a global configuration file has been |
| * found. Its path will be stored in `buffer`. |
| */ |
| GIT_EXTERN(int) git_config_find_global(char *global_config_path); |
| |
| /** |
| * Locate the path to the system configuration file |
| * |
| * If /etc/gitconfig doesn't exist, it will look for |
| * %PROGRAMFILES%\Git\etc\gitconfig. |
| |
| * @param system_config_path Buffer of GIT_PATH_MAX length to store the path |
| * @return GIT_SUCCESS if a system configuration file has been |
| * found. Its path will be stored in `buffer`. |
| */ |
| GIT_EXTERN(int) git_config_find_system(char *system_config_path); |
| |
| /** |
| * Open the global configuration file |
| * |
| * Utility wrapper that calls `git_config_find_global` |
| * and opens the located file, if it exists. |
| * |
| * @param out Pointer to store the config instance |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_open_global(git_config **out); |
| |
| /** |
| * Create a configuration file backend for ondisk files |
| * |
| * These are the normal `.gitconfig` files that Core Git |
| * processes. Note that you first have to add this file to a |
| * configuration object before you can query it for configuration |
| * variables. |
| * |
| * @param out the new backend |
| * @param path where the config file is located |
| */ |
| GIT_EXTERN(int) git_config_file__ondisk(struct git_config_file **out, const char *path); |
| |
| /** |
| * Allocate a new configuration object |
| * |
| * This object is empty, so you have to add a file to it before you |
| * can do anything with it. |
| * |
| * @param out pointer to the new configuration |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_new(git_config **out); |
| |
| /** |
| * Add a generic config file instance to an existing config |
| * |
| * Note that the configuration object will free the file |
| * automatically. |
| * |
| * Further queries on this config object will access each |
| * of the config file instances in order (instances with |
| * a higher priority will be accessed first). |
| * |
| * @param cfg the configuration to add the file to |
| * @param file the configuration file (backend) to add |
| * @param priority the priority the backend should have |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_add_file(git_config *cfg, git_config_file *file, int priority); |
| |
| /** |
| * Add an on-disk config file instance to an existing config |
| * |
| * The on-disk file pointed at by `path` will be opened and |
| * parsed; it's expected to be a native Git config file following |
| * the default Git config syntax (see man git-config). |
| * |
| * Note that the configuration object will free the file |
| * automatically. |
| * |
| * Further queries on this config object will access each |
| * of the config file instances in order (instances with |
| * a higher priority will be accessed first). |
| * |
| * @param cfg the configuration to add the file to |
| * @param path path to the configuration file (backend) to add |
| * @param priority the priority the backend should have |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_add_file_ondisk(git_config *cfg, const char *path, int priority); |
| |
| |
| /** |
| * Create a new config instance containing a single on-disk file |
| * |
| * This method is a simple utility wrapper for the following sequence |
| * of calls: |
| * - git_config_new |
| * - git_config_add_file_ondisk |
| * |
| * @param cfg The configuration instance to create |
| * @param path Path to the on-disk file to open |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_open_ondisk(git_config **cfg, const char *path); |
| |
| /** |
| * Free the configuration and its associated memory and files |
| * |
| * @param cfg the configuration to free |
| */ |
| GIT_EXTERN(void) git_config_free(git_config *cfg); |
| |
| /** |
| * Get the value of an integer config variable. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param out pointer to the variable where the value should be stored |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_get_int32(git_config *cfg, const char *name, int32_t *out); |
| |
| /** |
| * Get the value of a long integer config variable. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param out pointer to the variable where the value should be stored |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_get_int64(git_config *cfg, const char *name, int64_t *out); |
| |
| /** |
| * Get the value of a boolean config variable. |
| * |
| * This function uses the usual C convention of 0 being false and |
| * anything else true. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param out pointer to the variable where the value should be stored |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_get_bool(git_config *cfg, const char *name, int *out); |
| |
| /** |
| * Get the value of a string config variable. |
| * |
| * The string is owned by the variable and should not be freed by the |
| * user. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param out pointer to the variable's value |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_get_string(git_config *cfg, const char *name, const char **out); |
| |
| /** |
| * Set the value of an integer config variable. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param value Integer value for the variable |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_set_int32(git_config *cfg, const char *name, int32_t value); |
| |
| /** |
| * Set the value of a long integer config variable. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param value Long integer value for the variable |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_set_int64(git_config *cfg, const char *name, int64_t value); |
| |
| /** |
| * Set the value of a boolean config variable. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param value the value to store |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_set_bool(git_config *cfg, const char *name, int value); |
| |
| /** |
| * Set the value of a string config variable. |
| * |
| * A copy of the string is made and the user is free to use it |
| * afterwards. |
| * |
| * @param cfg where to look for the variable |
| * @param name the variable's name |
| * @param value the string to store. |
| * @return GIT_SUCCESS or an error code |
| */ |
| GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const char *value); |
| |
| /** |
| * Delete a config variable |
| * |
| * @param cfg the configuration |
| * @param name the variable to delete |
| */ |
| GIT_EXTERN(int) git_config_delete(git_config *cfg, const char *name); |
| |
| /** |
| * Perform an operation on each config variable. |
| * |
| * The callback receives the normalized name and value of each variable |
| * in the config backend, and the data pointer passed to this function. |
| * As soon as one of the callback functions returns something other than 0, |
| * this function returns that value. |
| * |
| * @param cfg where to get the variables from |
| * @param callback the function to call on each variable |
| * @param payload the data to pass to the callback |
| * @return GIT_SUCCESS or the return value of the callback which didn't return 0 |
| */ |
| GIT_EXTERN(int) git_config_foreach( |
| git_config *cfg, |
| int (*callback)(const char *var_name, const char *value, void *payload), |
| void *payload); |
| |
| /** @} */ |
| GIT_END_DECL |
| #endif |