mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-04 10:05:14 +00:00
Merge pull request #497 from carlosmn/config
Don't fail when opening a new config file
This commit is contained in:
commit
880b6f0c22
@ -256,7 +256,11 @@ static int config_open(git_config_file *cfg)
|
||||
diskfile_backend *b = (diskfile_backend *)cfg;
|
||||
|
||||
error = git_futils_readbuffer(&b->reader.buffer, b->file_path);
|
||||
if(error < GIT_SUCCESS)
|
||||
/* It's fine if the file doesn't exist */
|
||||
if (error == GIT_ENOTFOUND)
|
||||
return GIT_SUCCESS;
|
||||
|
||||
if (error < GIT_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
error = config_parse(b);
|
||||
@ -714,6 +718,9 @@ static int skip_bom(diskfile_backend *cfg)
|
||||
{
|
||||
static const char *utf8_bom = "\xef\xbb\xbf";
|
||||
|
||||
if (cfg->reader.buffer.len < sizeof(utf8_bom))
|
||||
return GIT_SUCCESS;
|
||||
|
||||
if (memcmp(cfg->reader.read_ptr, utf8_bom, sizeof(utf8_bom)) == 0)
|
||||
cfg->reader.read_ptr += sizeof(utf8_bom);
|
||||
|
||||
@ -882,14 +889,23 @@ static int config_write(diskfile_backend *cfg, cvar_t *var)
|
||||
|
||||
/* We need to read in our own config file */
|
||||
error = git_futils_readbuffer(&cfg->reader.buffer, cfg->file_path);
|
||||
if (error < GIT_SUCCESS) {
|
||||
if (error < GIT_SUCCESS && error != GIT_ENOTFOUND) {
|
||||
return git__rethrow(error, "Failed to read existing config file %s", cfg->file_path);
|
||||
}
|
||||
|
||||
/* Initialise the reading position */
|
||||
cfg->reader.read_ptr = cfg->reader.buffer.data;
|
||||
cfg->reader.eof = 0;
|
||||
data_start = cfg->reader.read_ptr;
|
||||
if (error == GIT_ENOTFOUND) {
|
||||
error = GIT_SUCCESS;
|
||||
cfg->reader.read_ptr = NULL;
|
||||
cfg->reader.eof = 1;
|
||||
data_start = NULL;
|
||||
cfg->reader.buffer.len = 0;
|
||||
cfg->reader.buffer.data = NULL;
|
||||
} else {
|
||||
cfg->reader.read_ptr = cfg->reader.buffer.data;
|
||||
cfg->reader.eof = 0;
|
||||
data_start = cfg->reader.read_ptr;
|
||||
}
|
||||
|
||||
/* Lock the file */
|
||||
error = git_filebuf_open(&file, cfg->file_path, 0);
|
||||
|
||||
@ -59,6 +59,7 @@ void cl_fixture_cleanup(const char *fixture_name);
|
||||
*/
|
||||
extern void test_buf_basic__printf(void);
|
||||
extern void test_buf_basic__resize(void);
|
||||
extern void test_config_new__write_new_config(void);
|
||||
extern void test_config_stress__cleanup(void);
|
||||
extern void test_config_stress__dont_break_on_invalid_input(void);
|
||||
extern void test_config_stress__initialize(void);
|
||||
|
||||
@ -108,6 +108,9 @@ static const struct clay_func _clay_cb_buf_basic[] = {
|
||||
{"printf", &test_buf_basic__printf},
|
||||
{"resize", &test_buf_basic__resize}
|
||||
};
|
||||
static const struct clay_func _clay_cb_config_new[] = {
|
||||
{"write_new_config", &test_config_new__write_new_config}
|
||||
};
|
||||
static const struct clay_func _clay_cb_config_stress[] = {
|
||||
{"dont_break_on_invalid_input", &test_config_stress__dont_break_on_invalid_input}
|
||||
};
|
||||
@ -227,6 +230,12 @@ static const struct clay_suite _clay_suites[] = {
|
||||
{NULL, NULL},
|
||||
{NULL, NULL},
|
||||
_clay_cb_buf_basic, 2
|
||||
},
|
||||
{
|
||||
"config::new",
|
||||
{NULL, NULL},
|
||||
{NULL, NULL},
|
||||
_clay_cb_config_new, 1
|
||||
},
|
||||
{
|
||||
"config::stress",
|
||||
@ -362,8 +371,8 @@ static const struct clay_suite _clay_suites[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static size_t _clay_suite_count = 23;
|
||||
static size_t _clay_callback_count = 70;
|
||||
static size_t _clay_suite_count = 24;
|
||||
static size_t _clay_callback_count = 71;
|
||||
|
||||
/* Core test functions */
|
||||
static void
|
||||
|
||||
36
tests-clay/config/new.c
Normal file
36
tests-clay/config/new.c
Normal file
@ -0,0 +1,36 @@
|
||||
#include "clay_libgit2.h"
|
||||
|
||||
#include "filebuf.h"
|
||||
#include "fileops.h"
|
||||
#include "posix.h"
|
||||
|
||||
#define TEST_CONFIG "git-new-config"
|
||||
|
||||
void test_config_new__write_new_config(void)
|
||||
{
|
||||
const char *out;
|
||||
struct git_config_file *file;
|
||||
git_config *config;
|
||||
|
||||
cl_git_pass(git_config_file__ondisk(&file, TEST_CONFIG));
|
||||
cl_git_pass(git_config_new(&config));
|
||||
cl_git_pass(git_config_add_file(config, file, 0));
|
||||
|
||||
cl_git_pass(git_config_set_string(config, "color.ui", "auto"));
|
||||
cl_git_pass(git_config_set_string(config, "core.editor", "ed"));
|
||||
|
||||
git_config_free(config);
|
||||
|
||||
cl_git_pass(git_config_file__ondisk(&file, TEST_CONFIG));
|
||||
cl_git_pass(git_config_new(&config));
|
||||
cl_git_pass(git_config_add_file(config, file, 0));
|
||||
|
||||
cl_git_pass(git_config_get_string(config, "color.ui", &out));
|
||||
cl_assert(strcmp(out, "auto") == 0);
|
||||
cl_git_pass(git_config_get_string(config, "core.editor", &out));
|
||||
cl_assert(strcmp(out, "ed") == 0);
|
||||
|
||||
git_config_free(config);
|
||||
|
||||
p_unlink(TEST_CONFIG);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user