diff options
author | nulltoken <emeric.fermas@gmail.com> | 2013-11-05 12:01:14 +0100 |
---|---|---|
committer | nulltoken <emeric.fermas@gmail.com> | 2013-11-05 14:03:51 +0100 |
commit | e8162fd091bbfd49fc5aaa60794a0a3558e895bb (patch) | |
tree | ac3458ed080f0f6d1d90921b5f72b7ab1114034b | |
parent | 3ae66ef1af2af9132c96c57bf5c6e2cfdb1f617c (diff) | |
download | libgit2-e8162fd091bbfd49fc5aaa60794a0a3558e895bb.tar.gz |
Propagate ELOCKED error when updating the config
-rw-r--r-- | src/config_file.c | 8 | ||||
-rw-r--r-- | tests-clar/config/write.c | 13 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/config_file.c b/src/config_file.c index 40dcc5a37..9b4a7c1b6 100644 --- a/src/config_file.c +++ b/src/config_file.c @@ -385,10 +385,10 @@ static int config_set(git_config_backend *cfg, const char *name, const char *val GITERR_CHECK_ALLOC(esc_value); } - if (config_write(b, key, NULL, esc_value) < 0) { + if ((ret = config_write(b, key, NULL, esc_value)) < 0) { git__free(esc_value); cvar_free(var); - return -1; + return ret; } git__free(esc_value); @@ -1210,8 +1210,8 @@ static int config_write(diskfile_backend *cfg, const char *key, const regex_t *p write_start = data_start; /* Lock the file */ - if (git_filebuf_open(&file, cfg->file_path, 0, GIT_CONFIG_FILE_MODE) < 0) - return -1; + if ((result = git_filebuf_open(&file, cfg->file_path, 0, GIT_CONFIG_FILE_MODE)) < 0) + return result; skip_bom(reader); ldot = strrchr(key, '.'); diff --git a/tests-clar/config/write.c b/tests-clar/config/write.c index 57b02a7d9..309fef65a 100644 --- a/tests-clar/config/write.c +++ b/tests-clar/config/write.c @@ -259,3 +259,16 @@ void test_config_write__can_set_an_empty_value(void) git_config_free(config); cl_git_sandbox_cleanup(); } + +void test_config_write__updating_a_locked_config_file_returns_ELOCKED(void) +{ + git_config *cfg; + + cl_git_pass(git_config_open_ondisk(&cfg, "config9")); + + cl_git_mkfile("config9.lock", "[core]\n"); + + cl_git_fail_with(git_config_set_string(cfg, "core.dump", "boom"), GIT_ELOCKED); + + git_config_free(cfg); +} |