git/list[1] front-page[2] threads[3] people[4] search[5] about
 

send-pack question.

From
Junio C Hamano <junkio@cox.net>
Date
Jul 31, 2005, 05:47 UTC
Message-ID
<7v1x5fwmpk.fsf@assigned-by-dhcp.cox.net>

I have been looking at send-pack because some people seem to want to push into a remote repository that names heads differently from local. I have some questions that do not have to do with anything about their request, but about what the current code intends to do.

 * Right now, "send-pack --all" into an empty repository does
   not do anything, but "send-pack --all master" into an empty
   repository pushes all local heads.  This is because we do not
   check "send_all" when deciding if we want to call try_match
   on local references.  I am assuming this is an oversight; am
   I correct?  If so, does the attached patch look OK?
 * It appears to me that you can say "send-pack net", and
   depending on how the remote lists its refs, you can end up
   updating their refs/heads/net or refs/tags/net.  More
   confusingly, you could say "send-pack net net" to update
   both.  More realistically, you could get confused with a
   remote that has refs/heads/jgarzik/net and
   refs/heads/dsmiller/net in this way.  I think it should
   detect, stop and warn about the ambiguity and require the
   user to be more explicit.  Am I reading the current code
   correctly?
   I've always _hated_ the interface to path_match() which
   pretends to be just a boolean function but actually has a
   grave side effect, by the way.

--- # - pu: git-fetch-script http fix. # + (working tree)

diff --git a/send-pack.c b/send-pack.c
--- a/send-pack.c
+++ b/send-pack.c
@@ -4,7 +4,8 @@
 #include "pkt-line.h"
 
 static const char send_pack_usage[] =
-"git-send-pack [--exec=git-receive-pack] [host:]directory [heads]*";
+"git-send-pack [--all] [--exec=git-receive-pack] <remote> [<head>...]\n"
+"  --all and explicit <head> specification are mutually exclusive.";
 static const char *exec = "git-receive-pack";
 static int send_all = 0;
 static int force_update = 0;
@@ -214,7 +215,7 @@ static int send_pack(int in, int out, in
 	/*
 	 * See if we have any refs that the other end didn't have
 	 */
-	if (nr_match) {
+	if (nr_match || send_all) {
 		local_ref_nr_match = nr_match;
 		local_ref_match = match;
 		local_ref_list = ref_list;
@@ -281,6 +282,8 @@ int main(int argc, char **argv)
 	}
 	if (!dest)
 		usage(send_pack_usage);
+	if (heads && send_all)
+		usage(send_pack_usage);
 	pid = git_connect(fd, dest, exec);
 	if (pid < 0)
 		return 1;


   
Next: Linus Torvalds
Message 1 of 2 in “send-pack question.”
  1. Junio C HamanoJul 31, 2005
  2. Linus TorvaldsJul 31, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.