Stefan Beller <sbeller@xxxxxxxxxx> writes: > +int add_possible_reference_from_superproject( > + struct alternate_object_database *alt, void *sas_cb) > +{ > + struct submodule_alternate_setup *sas = sas_cb; > + > + ... > + size_t namelen = alt->name - alt->base - 1; > + struct strbuf name = STRBUF_INIT; > + strbuf_add(&name, alt->base, namelen); > + > + /* > + * If the alternate object store is another repository, try the > + * standard layout with .git/modules/<name>/objects > + */ > + if (ends_with(name.buf, ".git/objects")) { > + char *sm_alternate; > + struct strbuf sb = STRBUF_INIT; > + struct strbuf err = STRBUF_INIT; > + strbuf_add(&sb, name.buf, name.len - strlen("objects")); > + /* > + * We need to end the new path with '/' to mark it as a dir, > + * otherwise a submodule name containing '/' will be broken > + * as the last part of a missing submodule reference would > + * be taken as a file name. > + */ > + strbuf_addf(&sb, "modules/%s/", sas->submodule_name); > + > + sm_alternate = compute_alternate_path(sb.buf, &err); OK. Thanks to the refactoring in the earlier step, this has become quite straight-forward and robust; this code will always decide if the other directory can be used as an alternate the same way the "git clone" we will call would decide. Good. -- 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