Subject: Re: [PATCH v3 06/28] connect.c: teach get_remote_heads to parse "shallow" lines

From: Junio C Hamano <[email-masked]>
Date: Mon, 25 Nov 2013 13:42:07 -0800

Nguyễn Thái Ngọc Duy  <[email-masked]> writes:

> No callers pass a non-empty pointer as shallow_points at this
> stage. As a result, all clients still refuse to talk to shallow
> repository on the other end.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <[email-masked]>
> ---
>  builtin/fetch-pack.c |  2 +-
>  builtin/send-pack.c  |  2 +-
>  connect.c            | 12 +++++++++++-
>  remote-curl.c        |  2 +-
>  remote.h             |  3 ++-
>  transport.c          |  7 ++++---
>  6 files changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
> index c8e8582..c1d918f 100644
> --- a/builtin/fetch-pack.c
> +++ b/builtin/fetch-pack.c
> @@ -150,7 +150,7 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
>  				   args.verbose ? CONNECT_VERBOSE : 0);
>  	}
>  
> -	get_remote_heads(fd[0], NULL, 0, &ref, 0, NULL);
> +	get_remote_heads(fd[0], NULL, 0, &ref, 0, NULL, NULL);
>  
>  	ref = fetch_pack(&args, fd, conn, ref, dest,
>  			 sought, nr_sought, pack_lockfile_ptr);
> diff --git a/builtin/send-pack.c b/builtin/send-pack.c
> index 51121f2..bfa9253 100644
> --- a/builtin/send-pack.c
> +++ b/builtin/send-pack.c
> @@ -233,7 +233,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
>  
>  	memset(&extra_have, 0, sizeof(extra_have));
>  
> -	get_remote_heads(fd[0], NULL, 0, &remote_refs, REF_NORMAL, &extra_have);
> +	get_remote_heads(fd[0], NULL, 0, &remote_refs, REF_NORMAL, &extra_have, NULL);
>  
>  	transport_verify_remote_names(nr_refspecs, refspecs);
>  
> diff --git a/connect.c b/connect.c
> index 06e88b0..d0602b0 100644
> --- a/connect.c
> +++ b/connect.c
> @@ -122,7 +122,8 @@ static void annotate_refs_with_symref_info(struct ref *ref)
>   */
>  struct ref **get_remote_heads(int in, char *src_buf, size_t src_len,
>  			      struct ref **list, unsigned int flags,
> -			      struct extra_have_objects *extra_have)
> +			      struct extra_have_objects *extra_have,
> +			      struct extra_have_objects *shallow_points)

The _shape_ of the information you would want to keep track of for
the shallow cut-off points may exactly be the same as that is for
extra-have endspoints, but it still feels wrong to throw these
shallow cut-off points into a structure called "extra have". After
all, these are objects the other end does not have, which is the
direct opposite of extra-have.

Perhaps a preparatory patch needs to rename the structure type to
object_name_list or something.  And then we can make the variable
names, not typenames, responsible for signalling what they mean,
i.e.

	get_remote_heads(...
        	struct list_of_objects *extra_have,
                struct list_of_objects *shallow_points);

when we introduce the new parameter.