git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ralf Thielow <ralf.thielow@gmail.com>
To: gitster@pobox.com
Cc: pclouds@gmail.com, git@vger.kernel.org,
	Ralf Thielow <ralf.thielow@gmail.com>
Subject: [PATCHv2] clone: fix refspec on "--single-branch" option
Date: Fri, 14 Sep 2012 20:11:07 +0200	[thread overview]
Message-ID: <1347646267-25891-1-git-send-email-ralf.thielow@gmail.com> (raw)
In-Reply-To: <7vipbh6qxa.fsf@alter.siamese.dyndns.org>

After a repo was cloned with the "--single-branch"
option, the configured refspec looks like
"+refs/heads/*:refs/remotes/origin/*".
After fetching from this repo again, it'll receive
all refs instead of just the ref from the single
branch. Fixing this by configure exactly the ref
of the branch the user specified in the "git clone"
command.

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
---

> Alternatively, if you can move the logic to set up this
> configuration further down so that it happens after we talked to the
> other side and figured out remote_head_points_at, you could instead
> set it up to keep a single remote tracking branch.
>
> Even if you did so, guess_remote_head() may not find any branch when
> the other repository's HEAD is detached, so you would need to decide
> what to do in such a case, and "fetch and integrate their HEAD
> without using any remote tracking branch" may be a reasonable thing
> to do in such a case.

This second version now covers also the "--single-branch"
option when it was called without "--branch". It also covers
the "detached HEAD" case.
I've tested all the use-cases that have been described above and it works
as expected with this patch. But there's just one thing. It fetches
also all the tags even if they're not on this branch. I'm still in the
"learning process", perhaps someone else can fix this problem or point
me to the reason. 
I think it comes from "transport_fetch_refs(transport, mapped_refs);"
on line 813 which is called with a full "+refs/heads/*:refs/remotes/origin/*"
refspec. Thanks

 builtin/clone.c | 41 +++++++++++++++++++++++++++--------------
 1 Datei geändert, 27 Zeilen hinzugefügt(+), 14 Zeilen entfernt(-)

diff --git a/builtin/clone.c b/builtin/clone.c
index 5e8f3ba..3ddf5ab 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -755,20 +755,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 	}
 
 	strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
-
-	if (option_mirror || !option_bare) {
-		/* Configure the remote */
-		strbuf_addf(&key, "remote.%s.fetch", option_origin);
-		git_config_set_multivar(key.buf, value.buf, "^$", 0);
-		strbuf_reset(&key);
-
-		if (option_mirror) {
-			strbuf_addf(&key, "remote.%s.mirror", option_origin);
-			git_config_set(key.buf, "true");
-			strbuf_reset(&key);
-		}
-	}
-
 	strbuf_addf(&key, "remote.%s.url", option_origin);
 	git_config_set(key.buf, repo);
 	strbuf_reset(&key);
@@ -853,6 +839,33 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 					      "refs/heads/master");
 	}
 
+	if (option_mirror || !option_bare) {
+		strbuf_reset(&value);
+		if (option_single_branch) {
+			if (option_branch)
+				strbuf_addf(&value, "+%s%s:%s%s", src_ref_prefix, option_branch,
+						branch_top.buf, option_branch);
+			else if (remote_head_points_at)
+					strbuf_addf(&value, "+%s:%s%s", our_head_points_at->name,
+									branch_top.buf, prettify_refname(remote_head_points_at->name));
+		} else {
+			strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
+		}
+		/* Configure the remote */
+		if (value.len) {
+			strbuf_reset(&key);
+			strbuf_addf(&key, "remote.%s.fetch", option_origin);
+			git_config_set_multivar(key.buf, value.buf, "^$", 0);
+			strbuf_reset(&key);
+
+			if (option_mirror) {
+				strbuf_addf(&key, "remote.%s.mirror", option_origin);
+				git_config_set(key.buf, "true");
+				strbuf_reset(&key);
+			}
+		}
+	}
+
 	if (is_local)
 		clone_local(path, git_dir);
 	else if (refs && complete_refs_before_fetch)
-- 
1.7.12.395.g6b149ce.dirty

  parent reply	other threads:[~2012-09-14 18:11 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-13 18:38 is this behaviour expected for "git clone --single-branch"? Ralf Thielow
2012-09-13 18:45 ` Junio C Hamano
2012-09-13 18:48   ` Ralf Thielow
2012-09-14  5:09     ` [PATCH] clone: fix refspec on "--single-branch" option Ralf Thielow
2012-09-14  5:35       ` Junio C Hamano
2012-09-14  6:48         ` Junio C Hamano
2012-09-14 13:10           ` Nguyen Thai Ngoc Duy
2012-09-14 14:25             ` Ralf Thielow
2012-09-14 16:02             ` Junio C Hamano
2012-09-14 18:11           ` Ralf Thielow [this message]
2012-09-14 19:22             ` [PATCHv2] " Junio C Hamano
2012-09-14 21:13               ` [PATCHv3] " Ralf Thielow
2012-09-14 22:45                 ` Junio C Hamano
2012-09-16  8:13                   ` [PATCHv4] clone --single: limit the fetch refspec to fetched branch Ralf Thielow
2012-09-17  4:48                     ` Junio C Hamano
2012-09-17 12:06                     ` Nguyen Thai Ngoc Duy
2012-09-17 12:11                       ` Nguyen Thai Ngoc Duy
2012-09-17 19:21                         ` [PATCHv5] " Ralf Thielow
2012-09-17 20:18                           ` Junio C Hamano
2012-09-17 21:04                             ` Ralf Thielow
2012-09-17 21:39                               ` Junio C Hamano
2012-09-18 14:08                                 ` Ralf Thielow
2012-09-18 16:57                                   ` Junio C Hamano
2012-09-18 19:14                           ` [PATCHv6] " Ralf Thielow
2012-09-18 19:42                             ` Junio C Hamano
2012-09-18 19:45                             ` Junio C Hamano
2012-09-19 16:45                               ` [PATCHv7] " Ralf Thielow
2012-09-19 23:26                                 ` Junio C Hamano
2012-09-20 18:04                                   ` [PATCHv8] " Ralf Thielow
2012-09-20 21:17                                     ` Junio C Hamano
2012-09-19  7:36                             ` [PATCHv6] " Nguyen Thai Ngoc Duy
2012-09-19  8:24                               ` Ralf Thielow
2012-09-17 20:09                         ` [PATCHv4] " Junio C Hamano
2012-09-18  1:04                           ` Nguyen Thai Ngoc Duy
2012-09-18  3:56                             ` Junio C Hamano
2012-09-17 13:25                       ` Ralf Thielow
2012-09-17 20:08                       ` Junio C Hamano
2012-09-18  1:02                         ` Nguyen Thai Ngoc Duy
2012-09-14 18:42           ` [PATCH] clone: fix refspec on "--single-branch" option Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1347646267-25891-1-git-send-email-ralf.thielow@gmail.com \
    --to=ralf.thielow@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pclouds@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).