From e8162fd091bbfd49fc5aaa60794a0a3558e895bb Mon Sep 17 00:00:00 2001 From: nulltoken Date: Tue, 5 Nov 2013 12:01:14 +0100 Subject: [PATCH] Propagate ELOCKED error when updating the config --- src/config_file.c | 8 ++++---- 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); +}