Re: Implementing branch attributes in git config
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- May 8, 2006, 12:17 UTC
- Message-ID
- <Pine.LNX.4.63.0605081416140.29236@wbgn013.biozentrum.uni-wuerzburg.de>
- In-Reply-To
- <7vody8howu.fsf@assigned-by-dhcp.cox.net>
Hi,
On Mon, 8 May 2006, Junio C Hamano wrote:
> repo-config --get branchdata.description '\(.*\) for netdev$'
POSIX regexps do not want the backslashes...
Something like this?
--- [PATCH] repo-config: allow one group in value regexp
The regular expression for the value can now contain one group. In case there is one, the output will be just that group, not the whole value. Now you can say
git-repo-config --get branch.defaultremote '(.*) for junio'
and for a config like this:
[branch]
defaultRemote = sushi for juniothe output will be "sushi".
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
repo-config.c | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/repo-config.c b/repo-config.c index 63eda1b..9ac4c51 100644 --- a/repo-config.c +++ b/repo-config.c @@ -26,31 +26,41 @@ static int show_all_config(const char *k static int show_config(const char* key_, const char* value_) { char value[256]; - const char *vptr = value; + const char *vptr = value_; int dup_error = 0; if (value_ == NULL) - value_ = ""; + vptr = value_ = ""; if (!use_key_regexp && strcmp(key_, key)) return 0; if (use_key_regexp && regexec(key_regexp, key_, 0, NULL, 0)) return 0; - if (regexp != NULL && - (do_not_match ^ - regexec(regexp, value_, 0, NULL, 0))) - return 0; + if (regexp != NULL) { + regmatch_t matches[2]; + int len; + + if (do_not_match ^ regexec(regexp, value_, 2, matches, 0)) + return 0; + len = matches[1].rm_eo - matches[1].rm_so; + if (!do_not_match && len > 0) { + if (len > 255) + len = 255; + strncpy(value, value_ + matches[1].rm_so, len); + value[len] = 0; + vptr = value; + } + } if (show_keys) printf("%s ", key_); if (seen && !do_all) dup_error = 1; - if (type == T_INT) + if (type == T_INT) { sprintf(value, "%d", git_config_int(key_, value_)); - else if (type == T_BOOL) + vptr = value; + } else if (type == T_BOOL) vptr = git_config_bool(key_, value_) ? "true" : "false"; - else - vptr = value_; seen++; if (dup_error) { error("More than one value for the key %s: %s",
-- 1.3.1.g297e8-dirty