Commit 16adc9fa by Russell Belfer

Typedef git_config_level_t and use it everywhere

The GIT_CONFIG_LEVEL constants actually work well as an enum
because they are mutually exclusive, so this adds a typedef to
the enum and uses that everywhere that one of these constants are
expected, instead of the old code that typically used an unsigned
int.
parent 2e62e7c2
...@@ -27,18 +27,33 @@ GIT_BEGIN_DECL ...@@ -27,18 +27,33 @@ GIT_BEGIN_DECL
* git_config_open_default() and git_repository_config() honor those * git_config_open_default() and git_repository_config() honor those
* priority levels as well. * priority levels as well.
*/ */
enum { typedef enum {
GIT_CONFIG_LEVEL_SYSTEM = 1, /**< System-wide configuration file. */ /** System-wide configuration file; /etc/gitconfig on Linux systems */
GIT_CONFIG_LEVEL_XDG = 2, /**< XDG compatible configuration file (.config/git/config). */ GIT_CONFIG_LEVEL_SYSTEM = 1,
GIT_CONFIG_LEVEL_GLOBAL = 3, /**< User-specific configuration file, also called Global configuration file. */
GIT_CONFIG_LEVEL_LOCAL = 4, /**< Repository specific configuration file. */ /** XDG compatible configuration file; typically ~/.config/git/config */
GIT_CONFIG_HIGHEST_LEVEL = -1, /**< Represents the highest level of a config file. */ GIT_CONFIG_LEVEL_XDG = 2,
};
/** User-specific configuration file (also called Global configuration
* file); typically ~/.gitconfig
*/
GIT_CONFIG_LEVEL_GLOBAL = 3,
/** Repository specific configuration file; $WORK_DIR/.git/config on
* non-bare repos
*/
GIT_CONFIG_LEVEL_LOCAL = 4,
/** Represents the highest level available config file (i.e. the most
* specific config file available that actually is loaded)
*/
GIT_CONFIG_HIGHEST_LEVEL = -1,
} git_config_level_t;
typedef struct { typedef struct {
const char *name; const char *name;
const char *value; const char *value;
unsigned int level; git_config_level_t level;
} git_config_entry; } git_config_entry;
typedef int (*git_config_foreach_cb)(const git_config_entry *, void *); typedef int (*git_config_foreach_cb)(const git_config_entry *, void *);
...@@ -155,7 +170,7 @@ GIT_EXTERN(int) git_config_new(git_config **out); ...@@ -155,7 +170,7 @@ GIT_EXTERN(int) git_config_new(git_config **out);
GIT_EXTERN(int) git_config_add_file_ondisk( GIT_EXTERN(int) git_config_add_file_ondisk(
git_config *cfg, git_config *cfg,
const char *path, const char *path,
unsigned int level, git_config_level_t level,
int force); int force);
/** /**
...@@ -192,7 +207,7 @@ GIT_EXTERN(int) git_config_open_ondisk(git_config **out, const char *path); ...@@ -192,7 +207,7 @@ GIT_EXTERN(int) git_config_open_ondisk(git_config **out, const char *path);
GIT_EXTERN(int) git_config_open_level( GIT_EXTERN(int) git_config_open_level(
git_config **out, git_config **out,
const git_config *parent, const git_config *parent,
unsigned int level); git_config_level_t level);
/** /**
* Open the global/XDG configuration file according to git's rules * Open the global/XDG configuration file according to git's rules
...@@ -241,7 +256,7 @@ GIT_EXTERN(void) git_config_free(git_config *cfg); ...@@ -241,7 +256,7 @@ GIT_EXTERN(void) git_config_free(git_config *cfg);
* @return 0 or an error code * @return 0 or an error code
*/ */
GIT_EXTERN(int) git_config_get_entry( GIT_EXTERN(int) git_config_get_entry(
const git_config_entry **out, const git_config_entry **out,
const git_config *cfg, const git_config *cfg,
const char *name); const char *name);
......
...@@ -29,7 +29,7 @@ struct git_config_backend { ...@@ -29,7 +29,7 @@ struct git_config_backend {
struct git_config *cfg; struct git_config *cfg;
/* Open means open the file/database and parse if necessary */ /* Open means open the file/database and parse if necessary */
int (*open)(struct git_config_backend *, unsigned int level); int (*open)(struct git_config_backend *, git_config_level_t level);
int (*get)(const struct git_config_backend *, const char *key, const git_config_entry **entry); int (*get)(const struct git_config_backend *, const char *key, const git_config_entry **entry);
int (*get_multivar)(struct git_config_backend *, const char *key, const char *regexp, git_config_foreach_cb callback, void *payload); int (*get_multivar)(struct git_config_backend *, const char *key, const char *regexp, git_config_foreach_cb callback, void *payload);
int (*set)(struct git_config_backend *, const char *key, const char *value); int (*set)(struct git_config_backend *, const char *key, const char *value);
...@@ -63,7 +63,7 @@ struct git_config_backend { ...@@ -63,7 +63,7 @@ struct git_config_backend {
GIT_EXTERN(int) git_config_add_backend( GIT_EXTERN(int) git_config_add_backend(
git_config *cfg, git_config *cfg,
git_config_backend *file, git_config_backend *file,
unsigned int level, git_config_level_t level,
int force); int force);
/** @} */ /** @} */
......
...@@ -23,7 +23,7 @@ typedef struct { ...@@ -23,7 +23,7 @@ typedef struct {
git_refcount rc; git_refcount rc;
git_config_backend *file; git_config_backend *file;
unsigned int level; git_config_level_t level;
} file_internal; } file_internal;
static void file_internal_free(file_internal *internal) static void file_internal_free(file_internal *internal)
...@@ -87,7 +87,7 @@ int git_config_new(git_config **out) ...@@ -87,7 +87,7 @@ int git_config_new(git_config **out)
int git_config_add_file_ondisk( int git_config_add_file_ondisk(
git_config *cfg, git_config *cfg,
const char *path, const char *path,
unsigned int level, git_config_level_t level,
int force) int force)
{ {
git_config_backend *file = NULL; git_config_backend *file = NULL;
...@@ -138,11 +138,11 @@ int git_config_open_ondisk(git_config **out, const char *path) ...@@ -138,11 +138,11 @@ int git_config_open_ondisk(git_config **out, const char *path)
static int find_internal_file_by_level( static int find_internal_file_by_level(
file_internal **internal_out, file_internal **internal_out,
const git_config *cfg, const git_config *cfg,
int level) git_config_level_t level)
{ {
int pos = -1; int pos = -1;
file_internal *internal; file_internal *internal;
unsigned int i; size_t i;
/* when passing GIT_CONFIG_HIGHEST_LEVEL, the idea is to get the config file /* when passing GIT_CONFIG_HIGHEST_LEVEL, the idea is to get the config file
* which has the highest level. As config files are stored in a vector * which has the highest level. As config files are stored in a vector
...@@ -153,14 +153,14 @@ static int find_internal_file_by_level( ...@@ -153,14 +153,14 @@ static int find_internal_file_by_level(
pos = 0; pos = 0;
} else { } else {
git_vector_foreach(&cfg->files, i, internal) { git_vector_foreach(&cfg->files, i, internal) {
if (internal->level == (unsigned int)level) if (internal->level == level)
pos = i; pos = i;
} }
} }
if (pos == -1) { if (pos == -1) {
giterr_set(GITERR_CONFIG, giterr_set(GITERR_CONFIG,
"No config file exists for the given level '%i'", level); "No config file exists for the given level '%i'", (int)level);
return GIT_ENOTFOUND; return GIT_ENOTFOUND;
} }
...@@ -175,17 +175,17 @@ static int duplicate_level(void **old_raw, void *new_raw) ...@@ -175,17 +175,17 @@ static int duplicate_level(void **old_raw, void *new_raw)
GIT_UNUSED(new_raw); GIT_UNUSED(new_raw);
giterr_set(GITERR_CONFIG, "A file with the same level (%i) has already been added to the config", (*old)->level); giterr_set(GITERR_CONFIG, "A file with the same level (%i) has already been added to the config", (int)(*old)->level);
return GIT_EEXISTS; return GIT_EEXISTS;
} }
static void try_remove_existing_file_internal( static void try_remove_existing_file_internal(
git_config *cfg, git_config *cfg,
unsigned int level) git_config_level_t level)
{ {
int pos = -1; int pos = -1;
file_internal *internal; file_internal *internal;
unsigned int i; size_t i;
git_vector_foreach(&cfg->files, i, internal) { git_vector_foreach(&cfg->files, i, internal) {
if (internal->level == level) if (internal->level == level)
...@@ -206,7 +206,7 @@ static void try_remove_existing_file_internal( ...@@ -206,7 +206,7 @@ static void try_remove_existing_file_internal(
static int git_config__add_internal( static int git_config__add_internal(
git_config *cfg, git_config *cfg,
file_internal *internal, file_internal *internal,
unsigned int level, git_config_level_t level,
int force) int force)
{ {
int result; int result;
...@@ -238,7 +238,7 @@ int git_config_open_global(git_config **cfg_out, git_config *cfg) ...@@ -238,7 +238,7 @@ int git_config_open_global(git_config **cfg_out, git_config *cfg)
int git_config_open_level( int git_config_open_level(
git_config **cfg_out, git_config **cfg_out,
const git_config *cfg_parent, const git_config *cfg_parent,
unsigned int level) git_config_level_t level)
{ {
git_config *cfg; git_config *cfg;
file_internal *internal; file_internal *internal;
...@@ -263,7 +263,7 @@ int git_config_open_level( ...@@ -263,7 +263,7 @@ int git_config_open_level(
int git_config_add_backend( int git_config_add_backend(
git_config *cfg, git_config *cfg,
git_config_backend *file, git_config_backend *file,
unsigned int level, git_config_level_t level,
int force) int force)
{ {
file_internal *internal; file_internal *internal;
......
...@@ -81,10 +81,10 @@ typedef struct { ...@@ -81,10 +81,10 @@ typedef struct {
time_t file_mtime; time_t file_mtime;
size_t file_size; size_t file_size;
unsigned int level; git_config_level_t level;
} diskfile_backend; } diskfile_backend;
static int config_parse(diskfile_backend *cfg_file, unsigned int level); static int config_parse(diskfile_backend *cfg_file, git_config_level_t level);
static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_value); static int parse_variable(diskfile_backend *cfg, char **var_name, char **var_value);
static int config_write(diskfile_backend *cfg, const char *key, const regex_t *preg, const char *value); static int config_write(diskfile_backend *cfg, const char *key, const regex_t *preg, const char *value);
static char *escape_value(const char *ptr); static char *escape_value(const char *ptr);
...@@ -181,7 +181,7 @@ static void free_vars(git_strmap *values) ...@@ -181,7 +181,7 @@ static void free_vars(git_strmap *values)
git_strmap_free(values); git_strmap_free(values);
} }
static int config_open(git_config_backend *cfg, unsigned int level) static int config_open(git_config_backend *cfg, git_config_level_t level)
{ {
int res; int res;
diskfile_backend *b = (diskfile_backend *)cfg; diskfile_backend *b = (diskfile_backend *)cfg;
...@@ -965,7 +965,7 @@ static int strip_comments(char *line, int in_quotes) ...@@ -965,7 +965,7 @@ static int strip_comments(char *line, int in_quotes)
return quote_count; return quote_count;
} }
static int config_parse(diskfile_backend *cfg_file, unsigned int level) static int config_parse(diskfile_backend *cfg_file, git_config_level_t level)
{ {
int c; int c;
char *current_section = NULL; char *current_section = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment