diff options
author | Junio C Hamano <junkio@cox.net> | 2006-12-19 01:38:18 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-12-19 01:38:18 -0800 |
commit | 5fed4668153c9ca6e44ec84a0976089f515705aa (patch) | |
tree | 82f3ce0d2ea76ca31cebd3a5b40d0993e019859a /config.c | |
parent | 63085fabbdeaad9eb8b29d39d0998c704e6cd232 (diff) | |
parent | 8683a45d66967b0969516a2b72cdbf136c2064a2 (diff) | |
download | git-5fed4668153c9ca6e44ec84a0976089f515705aa.tar.gz |
Merge branch 'jc/test-clone' into jc/clone
* jc/test-clone: (35 commits)
Introduce GIT_TEMPLATE_DIR
Revert "fix testsuite: make sure they use templates freshly built from the source"
fix testsuite: make sure they use templates freshly built from the source
rerere: fix breakage of resolving.
Add config example with respect to branch
Add documentation for show-branch --topics
make git a bit less cryptic on fetch errors
make patch_delta() error cases a bit more verbose
racy-git: documentation updates.
show-ref: fix --exclude-existing
parse-remote::expand_refs_wildcard()
vim syntax: follow recent changes to commit template
show-ref: fix --verify --hash=length
show-ref: fix --quiet --verify
avoid accessing _all_ loose refs in git-show-ref --verify
git-fetch: Avoid reading packed refs over and over again
Teach show-branch how to show ref-log data.
markup fix in svnimport documentation.
Documentation: new option -P for git-svnimport
Fix mis-mark-up in git-merge-file.txt documentation
...
Diffstat (limited to 'config.c')
-rw-r--r-- | config.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -746,4 +746,68 @@ out_free: return ret; } +int git_config_rename_section(const char *old_name, const char *new_name) +{ + int ret = 0; + const char *config_filename; + struct lock_file *lock = xcalloc(sizeof(struct lock_file), 1); + int out_fd; + char buf[1024]; + + config_filename = getenv("GIT_CONFIG"); + if (!config_filename) { + config_filename = getenv("GIT_CONFIG_LOCAL"); + if (!config_filename) + config_filename = git_path("config"); + } + config_filename = xstrdup(config_filename); + out_fd = hold_lock_file_for_update(lock, config_filename, 0); + if (out_fd < 0) + return error("Could not lock config file!"); + + if (!(config_file = fopen(config_filename, "rb"))) + return error("Could not open config file!"); + + while (fgets(buf, sizeof(buf), config_file)) { + int i; + for (i = 0; buf[i] && isspace(buf[i]); i++) + ; /* do nothing */ + if (buf[i] == '[') { + /* it's a section */ + int j = 0, dot = 0; + for (i++; buf[i] && buf[i] != ']'; i++) { + if (!dot && isspace(buf[i])) { + dot = 1; + if (old_name[j++] != '.') + break; + for (i++; isspace(buf[i]); i++) + ; /* do nothing */ + if (buf[i] != '"') + break; + continue; + } + if (buf[i] == '\\' && dot) + i++; + else if (buf[i] == '"' && dot) { + for (i++; isspace(buf[i]); i++) + ; /* do_nothing */ + break; + } + if (buf[i] != old_name[j++]) + break; + } + if (buf[i] == ']') { + /* old_name matches */ + ret++; + store.baselen = strlen(new_name); + store_write_section(out_fd, new_name); + continue; + } + } + write(out_fd, buf, strlen(buf)); + } + if (close(out_fd) || commit_lock_file(lock) < 0) + return error("Cannot commit config file!"); + return ret; +} |