Re: [PATCH v3 07/10] clone: --branch=<branch> always means refs/heads/<branch>

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

 



Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes:

> It does not make sense to look outside refs/heads for HEAD's target
> (src_ref_prefix can be set to "refs/" if --mirror is used) because ref
> code only allows symref in form refs/heads/...
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx>
> ---
>  builtin/clone.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/clone.c b/builtin/clone.c
> index 05224d7..960242f 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -463,7 +463,7 @@ static void update_remote_refs(const struct ref *refs,
>  static void update_head(const struct ref *our, const struct ref *remote,
>  			const char *msg)
>  {
> -	if (our) {
> +	if (our && !prefixcmp(our->name, "refs/heads/")) {
>  		/* Local default branch link */
>  		create_symref("HEAD", our->name, NULL);
>  		if (!option_bare) {

I think this makes sense. In the following three casees:

 - When cloning without --branch, if we could not find a branch that match
   HEAD at the remote;

 - When cloning with --branch, if we did not see such a branch at the
   remote; or

 - When cloning from an empty repository

we come here with "our" set to NULL. Additionally, if the remote HEAD
points outside refs/heads/ and the transport could detect that case
(e.g. a helper that reads from ls-remote output), we can see our->name
outside refs/heads/. Is there any other case where our is not NULL and
our->name does not start with refs/heads/?

The "else if (remote)" clause (not shown, outside the context) that
follows still has comments that says it is a case for "Source had detached
HEAD pointing somewhere", and needs to be adjusted for this change, no? It
is "(1) we know the HEAD points at a non-branch, (2) HEAD may point at a
branch but we do not know which one, or (3) we asked for a specific branch
but it did not exist there" (cloning from an empty will have NULL in
remote and the comment would not apply to that case).

> @@ -760,7 +760,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
>  
>  		if (option_branch) {
>  			struct strbuf head = STRBUF_INIT;
> -			strbuf_addstr(&head, src_ref_prefix);
> +			strbuf_addstr(&head, "refs/heads/");
>  			strbuf_addstr(&head, option_branch);
>  			our_head_points_at =
>  				find_ref_by_name(mapped_refs, head.buf);
--
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


[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]