On Tue, 24 Apr 2018 14:59:09 -0700
Stefan Beller <sbel...@google.com> wrote:

> This involves also adapting oid_object_info_extended and a some
> internal functions that are used to implement these. It all has to
> happen in one patch, because of a single recursive chain of calls visits
> all these functions.

I wrote about delta_base_cache in a reply [1] to an earlier version,
which is indeed safe (as discussed), but I think that other reviewers
might have questions about that too so I think it's worth noting that in
the commit message. Maybe write something like:

  Among the functions modified to handle arbitrary repositories,
  unpack_entry() is one of them. Note that it still references the
  globals "delta_base_cache" and "delta_base_cached", but those are safe
  to be referenced (the former is indexed partly by "struct packed_git
  *", which is repo-specific, and the latter is only used to limit the
  size of the former as an optimization).

[1] 
https://public-inbox.org/git/20180424112332.38c0d04d96689f030e968...@google.com/

> sha1_object_info_extended is also used in partial clones, which allow
> fetching missing objects. As this series will not add the repository
> struct to the transport code and fetch_object(), add a TODO note and
> bug out if a user tries to use a partial clone in a repository other than
> the_repository.

s/sha1_object/oid_object/ (in the 2nd paragraph)

Also, you sent 2 versions of PATCHv2 9/9.
  
> @@ -1290,9 +1291,12 @@ int oid_object_info_extended_the_repository(const 
> struct object_id *oid, struct
>               if (fetch_if_missing && repository_format_partial_clone &&
>                   !already_retried) {
>                       /*
> -                      * TODO Investigate haveing fetch_object() return
> +                      * TODO Investigate having fetch_object() return
>                        * TODO error/success and stopping the music here.
> +                      * TODO Pass a repository struct through fetch_object.
>                        */
> +                     if (r != the_repository)
> +                             die(_("partial clones only supported in 
> the_repository"));
>                       fetch_object(repository_format_partial_clone, 
> real->hash);
>                       already_retried = 1;
>                       continue;

This most likely means that a partial clone with a submodule would
wrongly error out here. Instead, the "r == the_repository" check should
be done in the same "if" statement as repository_format_partial_clone
(and no "die"-ing occurs if it fails - just that there will be no
fetching of objects).

Reply via email to