Stefan Beller <sbel...@google.com> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to