Re: [PATCH 19/44] builtin/clone: initialize hash algorithm properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 13 May 2020 at 02:57, brian m. carlson
<sandals@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> When performing a clone, we don't know what hash algorithm the other end
> will support.  Currently, we don't support fetching data belonging to a
> different algorithm, so we must know what algorithm the remote side is
> using in order to properly initialize the repository.  We can know that
> only after fetching the refs, so if the remote side has any references,
> use that information to reinitialize the repository with the correct
> hash algorithm information.
>
> Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx>
> ---
>  builtin/clone.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/builtin/clone.c b/builtin/clone.c
> index cb48a291ca..f27d38bc8e 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -1217,6 +1217,15 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
>         refs = transport_get_remote_refs(transport, &ref_prefixes);
>
>         if (refs) {
> +               int hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
> +
> +               /*
> +                * Now that we know what algorithm the remote side is using,
> +                * let's set ours to the same thing.
> +                */
> +               initialize_repository_version(hash_algo);

This made me go "huh". It's not really new in this series, it's just
that from `initialize_repository_version(int)` I would have expected the
argument to be the, well, repository version, not a hash algo
identifier. But it all makes sense once you realize that the function is
"please initialize the repository version based on this stuff that I
give you" where, currently, the only input is a hash algo. (I see that
Han-Wen's reftable series adds another parameter here.)

> +               repo_set_hash_algo(the_repository, hash_algo);

I first wondered whether all calls to `repo_set_hash_algo()` would want
to be preceded by `initialize_repository_version()`, which might call
for the latter being called by the former. But I guess not. Various
users of `repo_set_hash_algo()` -- not that there would be a lot of them
-- might want to do similar updating and/or sanity checks, but the exact
details would differ.


Martin



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux