Re: Implementing branch attributes in git config

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: sean <seanlkml@...>
Cc: <junkio@...>, <Johannes.Schindelin@...>, <git@...>
Date: Tuesday, May 9, 2006 - 8:17 pm

On Tue, 9 May 2006, sean wrote:

Well, obviously it's _simpler_ to have the machine-readable format as-is,
and say "don't try to make it human-readable". But the repo-config patch
to make it human-readable isn't that hard.

And it's _not_ that hard to make repo-config do the right thing.

Here's a pretty lightly tested patch (on top of my previous one) that does
exactly that.

(The first part just fixes an indentation bug)

Linus
---
diff --git a/config.c b/config.c
index f3b74e0..12c51b1 100644
--- a/config.c
+++ b/config.c
@@ -372,10 +372,12 @@ static int store_aux(const char* key, co
store.offset[store.seen] = ftell(config_file);
store.state = KEY_SEEN;
store.seen++;
- } else if (strrchr(key, '.') - key == store.baselen &&
+ } else {
+ if (strrchr(key, '.') - key == store.baselen &&
!strncmp(key, store.key, store.baselen)) {
store.state = SECTION_SEEN;
store.offset[store.seen] = ftell(config_file);
+ }
}
}
return 0;
@@ -383,8 +385,30 @@ static int store_aux(const char* key, co

static void store_write_section(int fd, const char* key)
{
+ const char *dot = strchr(key, '.');
+ int len1 = store.baselen, len2 = -1;
+
+ dot = strchr(key, '.');
+ if (dot) {
+ int dotlen = dot - key;
+ if (dotlen < len1) {
+ len2 = len1 - dotlen - 1;
+ len1 = dotlen;
+ }
+ }
+
write(fd, "[", 1);
- write(fd, key, store.baselen);
+ write(fd, key, len1);
+ if (len2 >= 0) {
+ write(fd, " \"", 2);
+ while (--len2 >= 0) {
+ unsigned char c = *++dot;
+ if (c == '"')
+ write(fd, "\\", 1);
+ write(fd, &c, 1);
+ }
+ write(fd, "\"", 1);
+ }
write(fd, "]\n", 2);
}

@@ -458,7 +482,7 @@ int git_config_set(const char* key, cons
int git_config_set_multivar(const char* key, const char* value,
const char* value_regex, int multi_replace)
{
- int i;
+ int i, dot;
int fd = -1, in_fd;
int ret;
char* config_filename = strdup(git_path("config"));
@@ -483,16 +507,23 @@ int git_config_set_multivar(const char*
* Validate the key and while at it, lower case it for matching.
*/
store.key = (char*)malloc(strlen(key)+1);
- for (i = 0; key[i]; i++)
- if (i != store.baselen &&
- ((!isalnum(key[i]) && key[i] != '.') ||
- (i == store.baselen+1 && !isalpha(key[i])))) {
- fprintf(stderr, "invalid key: %s\n", key);
- free(store.key);
- ret = 1;
- goto out_free;
- } else
- store.key[i] = tolower(key[i]);
+ dot = 0;
+ for (i = 0; key[i]; i++) {
+ unsigned char c = key[i];
+ if (c == '.')
+ dot = 1;
+ /* Leave the extended basename untouched.. */
+ if (!dot || i > store.baselen) {
+ if (!isalnum(c) || (i == store.baselen+1 && !isalpha(c))) {
+ fprintf(stderr, "invalid key: %s\n", key);
+ free(store.key);
+ ret = 1;
+ goto out_free;
+ }
+ c = tolower(c);
+ }
+ store.key[i] = c;
+ }
store.key[i] = 0;

/*
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: Implementing branch attributes in git config, Junio C Hamano, (Tue May 9, 2:03 pm)
Re: Implementing branch attributes in git config, Linus Torvalds, (Tue May 9, 3:24 pm)
Re: Implementing branch attributes in git config, Junio C Hamano, (Thu May 11, 1:22 pm)
Re: Implementing branch attributes in git config, Linus Torvalds, (Tue May 9, 8:17 pm)
Re: Implementing branch attributes in git config, Linus Torvalds, (Tue May 9, 10:08 pm)
Re: Implementing branch attributes in git config, Martin Langhoff, (Wed May 10, 3:19 am)
Re: Implementing branch attributes in git config, Linus Torvalds, (Wed May 10, 11:37 am)
Re: Implementing branch attributes in git config, Martin Langhoff, (Wed May 10, 7:17 pm)
Re: Implementing branch attributes in git config, Linus Torvalds, (Wed May 10, 7:55 pm)
Re: Implementing branch attributes in git config, Nicolas Pitre, (Wed May 10, 9:53 pm)
Re: Implementing branch attributes in git config, Martin Langhoff, (Wed May 10, 8:13 pm)
Re: Implementing branch attributes in git config, Johannes Schindelin, (Thu May 11, 6:30 am)
Re: Implementing branch attributes in git config, Linus Torvalds, (Wed May 10, 8:11 pm)
Re: Implementing branch attributes in git config, Jeff King, (Thu May 11, 5:51 am)
Re: Implementing branch attributes in git config, Jeff King, (Thu May 11, 7:39 am)
Re: Implementing branch attributes in git config, Johannes Schindelin, (Wed May 10, 7:07 am)
Re: Implementing branch attributes in git config, Junio C Hamano, (Tue May 9, 6:42 pm)