diff options
| author | Russell Belfer <rb@github.com> | 2012-04-11 11:52:59 -0700 |
|---|---|---|
| committer | Russell Belfer <rb@github.com> | 2012-04-11 12:11:35 -0700 |
| commit | 7784bcbbee972d1f00ea88655a5592fb44ca767d (patch) | |
| tree | 75926bc03a5f7f072878af8eb3e0e37b7fa66d4f /src/config.c | |
| parent | 1de77cd31432a1bdff060181c6d9ec25a412a0c2 (diff) | |
| download | libgit2-7784bcbbee972d1f00ea88655a5592fb44ca767d.tar.gz | |
Refactor git_repository_open with new options
Add a new command `git_repository_open_ext` with extended options
that control how searching for a repository will be done. The
existing `git_repository_open` and `git_repository_discover` are
reimplemented on top of it. We may want to change the default
behavior of `git_repository_open` but this commit does not do that.
Improve support for "gitdir" files where the work dir is separate
from the repo and support for the "separate-git-dir" config. Also,
add support for opening repos created with `git-new-workdir` script
(although I have only confirmed that they can be opened, not that
all functions work correctly).
There are also a few minor changes that came up:
- Fix `git_path_prettify` to allow in-place prettifying.
- Fix `git_path_root` to support backslashes on Win32. This fix
should help many repo open/discover scenarios - it is the one
function called when opening before prettifying the path.
- Tweak `git_config_get_string` to set the "out" pointer to NULL
if the config value is not found. Allows some other cleanup.
- Fix a couple places that should have been calling
`git_repository_config__weakptr` and were not.
- Fix `cl_git_sandbox_init` clar helper to support bare repos.
Diffstat (limited to 'src/config.c')
| -rw-r--r-- | src/config.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/src/config.c b/src/config.c index 250bfa652..f5cfa9ec0 100644 --- a/src/config.c +++ b/src/config.c @@ -327,11 +327,11 @@ int git_config_lookup_map_value( int git_config_get_mapped(git_config *cfg, const char *name, git_cvar_map *maps, size_t map_n, int *out) { const char *value; - int error; + int ret; - error = git_config_get_string(cfg, name, &value); - if (error < 0) - return error; + ret = git_config_get_string(cfg, name, &value); + if (ret < 0) + return ret; if (!git_config_lookup_map_value(maps, map_n, value, out)) return 0; @@ -371,7 +371,7 @@ int git_config_get_int32(git_config *cfg, const char *name, int32_t *out) giterr_set(GITERR_CONFIG, "Failed to parse '%s' as a 32-bit integer", value); return -1; } - + return 0; } @@ -399,26 +399,17 @@ int git_config_get_bool(git_config *cfg, const char *name, int *out) int git_config_get_string(git_config *cfg, const char *name, const char **out) { file_internal *internal; - git_config_file *file; - int ret = GIT_ENOTFOUND; unsigned int i; assert(cfg->files.length); - for (i = 0; i < cfg->files.length; ++i) { - internal = git_vector_get(&cfg->files, i); - file = internal->file; - - ret = file->get(file, name, out); - if (ret == 0) - return 0; + *out = NULL; - /* File backend doesn't set error message on variable - * not found */ - if (ret == GIT_ENOTFOUND) - continue; - - return ret; + git_vector_foreach(&cfg->files, i, internal) { + git_config_file *file = internal->file; + int ret = file->get(file, name, out); + if (ret != GIT_ENOTFOUND) + return ret; } giterr_set(GITERR_CONFIG, "Config variable '%s' not found", name); |
