On Fri, 3 Nov 2006, Junio C Hamano wrote: > > [remote."gitster"] Btw, why the '.'? It doesn't even work with a dot, you have to have a space, which is also a lot more readable.. Also, may I suggest that we just extend the format with a robust default value thing? It should be reasonably easy to have just the rule: - add a new "remote.<remote>.branch" thing that lists multiple simple branches separated by whitespace. - a "simple branch" is just a "implicit refspec" for the relationship "heads/<name>:remotes/<remote>/<name>" And then you should be able to write all of your cumbersome config options as a simple [remote "gitster"] url = gitster.example.com:/home/junio/git.git/ branch = maint master next +pu and you're all done. It would imply everything you said. This would basically require that "git-parse-remote" be re-written as a native builtin, because quite frankly, it would be too damn painful any other way, but it really shouldn't be that nasty. In fact, I think we should have done that long ago, because the shell-code is just horrid for things like this. For example, for builtin-push (which is currently the only thing that parses "remote" entries in C), you'd just need to do something like the appended.. It would generate the full refspecs from the "branch" config automatically. Linus --- diff --git a/builtin-push.c b/builtin-push.c index d23974e..805ffa8 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -123,15 +123,33 @@ static int get_remote_config(const char* { if (!strncmp(key, "remote.", 7) && !strncmp(key + 7, config_repo, config_repo_len)) { - if (!strcmp(key + 7 + config_repo_len, ".url")) { + const char *subkey = key + 7 + config_repo_len; + if (!strcmp(subkey, ".url")) { if (config_current_uri < MAX_URI) config_uri[config_current_uri++] = xstrdup(value); else error("more than %d URL's specified, ignoring the rest", MAX_URI); } - else if (config_get_refspecs && - !strcmp(key + 7 + config_repo_len, ".push")) - add_refspec(xstrdup(value)); + else if (config_get_refspecs) { + if (!strcmp(subkey, ".push")) + add_refspec(xstrdup(value)); + else if (!strcmp(subkey, ".branch")) { + while (isspace(*value)) + value++; + while (*value) { + const char *end = value; + while (!isspace(*end)) + end++; + add_refspec(xsprintf("heads/%.*s:remotes/%.*s/%.*s", + end-value, value, + config_repo_len, config_repo, + end-value, value)); + while (isspace(*end)) + end++; + value = end; + } + } + } } return 0; } - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html