diff options
author | nulltoken <emeric.fermas@gmail.com> | 2012-09-07 17:13:11 +0400 |
---|---|---|
committer | nulltoken <emeric.fermas@gmail.com> | 2012-10-25 19:42:31 +0400 |
commit | 0b98a8a4246c9a7825df6c90a1553e799d68146d (patch) | |
tree | a4597d2f9ef561a4f43d317f35971f0807c176f5 /src/branch.c | |
parent | 5edb846e03961cac06d1aab4cb5e2329936837f1 (diff) |
branch: remove config section upon deletion
Diffstat (limited to 'src/branch.c')
-rw-r--r-- | src/branch.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/branch.c b/src/branch.c index 991314508..a1c2abce6 100644 --- a/src/branch.c +++ b/src/branch.c @@ -89,6 +89,50 @@ cleanup: return error; } +static int delete_config_entries_cb( + const char *var_name, + const char *value, + void *payload) +{ + git_config *config; + + GIT_UNUSED(value); + + config = (git_config *)payload; + + return git_config_delete(config, var_name); +} + +static int delete_branch_config_entries( + git_repository *repo, + const char *branch_name) +{ + git_config *config; + git_buf pattern = GIT_BUF_INIT; + int error = -1; + + git_buf_sets(&pattern, "branch\\."); + git_buf_puts_escape_regex(&pattern, branch_name); + git_buf_puts(&pattern, "\\..+"); + if (git_buf_oom(&pattern)) + goto cleanup; + + if (git_repository_config__weakptr(&config, repo) < 0) + goto cleanup; + + if ((error = git_config_foreach_match( + config, + git_buf_cstr(&pattern), + delete_config_entries_cb, config)) < 0) + goto cleanup; + + error = 0; + +cleanup: + git_buf_free(&pattern); + return error; +} + int git_branch_delete(git_reference *branch) { int is_head; @@ -110,6 +154,11 @@ int git_branch_delete(git_reference *branch) return -1; } + if (delete_branch_config_entries( + git_reference_owner(branch), + git_reference_name(branch) + strlen(GIT_REFS_HEADS_DIR)) < 0) + goto on_error; + return git_reference_delete(branch); } |