git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Sverre Rabbelier <srabbelier@gmail.com>
To: "Git List" <git@vger.kernel.org>,
	"Daniel Barkalow" <barkalow@iabervon.org>,
	"Ramkumar Ramachandra" <artagnon@gmail.com>,
	"Jonathan Nieder" <jrnieder@gmail.com>
Cc: Sverre Rabbelier <srabbelier@gmail.com>
Subject: [PATCH 07/13] transport-helper: change import semantics
Date: Sat, 28 Aug 2010 22:45:34 -0500	[thread overview]
Message-ID: <1283053540-27042-8-git-send-email-srabbelier@gmail.com> (raw)
In-Reply-To: <1283053540-27042-1-git-send-email-srabbelier@gmail.com>

Currently the helper must somehow guess how many import statements to
read before it starts outputting its fast-export stream. This is
because the remote helper infrastructure runs fast-import only once,
so the helper is forced to output one stream for all import commands
it will receive. The only reason this worked in the past was because
only one ref was imported at a time.

Change the semantics of the import statement such that it matches
that of the list statement. That is, 'import\n' is followed by a list
of refs that should be exported, followed by '\n'.
---

  This changes the protcol a bit, but I don't think we have many
  users of the 'import' command yet, and if we do I would assume
  they're paying attention to development in the remote helper space.

 git-remote-testgit.py |   12 ++++++++++--
 transport-helper.c    |    7 ++++++-
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/git-remote-testgit.py b/git-remote-testgit.py
index 342a05d..50341ce 100644
--- a/git-remote-testgit.py
+++ b/git-remote-testgit.py
@@ -115,12 +115,20 @@ def do_import(repo, args):
     """Exports a fast-import stream from testgit for git to import.
     """
 
-    if len(args) != 1:
-        die("Import needs exactly one ref")
+    if args:
+        die("Import expects its ref seperately")
 
     if not repo.gitdir:
         die("Need gitdir to import")
 
+    refs = []
+
+    while True:
+        line = sys.stdin.readline()
+        if line == '\n':
+            break
+        refs.append(line.strip())
+
     repo = update_local_repo(repo)
     repo.exporter.export_repo(repo.gitdir)
 
diff --git a/transport-helper.c b/transport-helper.c
index ecaea25..13ebb3b 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -404,15 +404,20 @@ static int fetch_with_import(struct transport *transport,
 	if (get_importer(transport, &fastimport))
 		die("Couldn't run fast-import");
 
+	write_constant(data->helper->in, "import\n");
+
 	for (i = 0; i < nr_heads; i++) {
 		posn = to_fetch[i];
 		if (posn->status & REF_STATUS_UPTODATE)
 			continue;
 
-		strbuf_addf(&buf, "import %s\n", posn->name);
+		strbuf_addf(&buf, "%s\n", posn->name);
 		sendline(data, &buf);
 		strbuf_reset(&buf);
 	}
+
+	write_constant(data->helper->in, "\n");
+
 	if (finish_command(&fastimport))
 		die("Error while running fast-import");
 	free(fastimport.argv);
-- 
1.7.2.1.240.g6a95c3

  parent reply	other threads:[~2010-08-29  3:47 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-29  3:45 [PATCH 00/13] remote helper improvements Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 01/13] fast-import: add the 'done' command Sverre Rabbelier
2010-08-29 18:59   ` Daniel Barkalow
2010-08-29 20:23     ` Sverre Rabbelier
2010-08-29 21:24   ` Jonathan Nieder
2010-08-29 21:28     ` Sverre Rabbelier
2010-08-29 22:32       ` Jonathan Nieder
2010-08-30  0:30         ` Sverre Rabbelier
2010-08-30  2:02           ` Jonathan Nieder
2010-08-30  2:08             ` Sverre Rabbelier
2010-08-30  2:12               ` Jonathan Nieder
2011-02-13  9:42   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 02/13] fast-export: support done feature Sverre Rabbelier
2010-08-29 19:15   ` Daniel Barkalow
2010-08-29 20:25     ` Sverre Rabbelier
2010-08-29 23:42   ` Tay Ray Chuan
2010-08-30  0:32     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 03/13] transport-helper: factor out push_update_refs_status Sverre Rabbelier
2010-08-29 21:36   ` Jonathan Nieder
2010-08-29 21:45     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 04/13] transport-helper: check status code of finish_command Sverre Rabbelier
2010-08-29 21:52   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 05/13] transport-helper: use the new done feature to properly do imports Sverre Rabbelier
2010-08-29 22:02   ` Jonathan Nieder
2010-08-30  0:28     ` Sverre Rabbelier
2010-08-29  3:45 ` [RFC PATCH 06/13] transport-helper: update ref status after push with export Sverre Rabbelier
2010-08-29 22:25   ` Jonathan Nieder
2010-08-30  0:29     ` Sverre Rabbelier
2010-08-29  3:45 ` Sverre Rabbelier [this message]
2010-08-29 19:29   ` [PATCH 07/13] transport-helper: change import semantics Daniel Barkalow
2010-08-29 20:26     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 08/13] transport-helper: export should disconnect too Sverre Rabbelier
2010-08-29 19:32   ` Daniel Barkalow
2010-08-29 20:28     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 09/13] transport-helper: Use capname for gitdir capability too Sverre Rabbelier
2010-08-30  1:05   ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 10/13] transport-helper: implement marks location as capability Sverre Rabbelier
2010-08-29 19:52   ` Daniel Barkalow
2010-08-29 20:17     ` Sverre Rabbelier
2010-08-30  1:31   ` Jonathan Nieder
2010-08-30  1:35     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 11/13] remote-curl: accept empty line as terminator Sverre Rabbelier
2010-08-30  1:39   ` Jonathan Nieder
2010-08-30  2:02     ` Sverre Rabbelier
2010-08-29  3:45 ` [PATCH 12/13] git-remote-testgit: only push for non-local repositories Sverre Rabbelier
2010-08-30  1:48   ` Jonathan Nieder
2010-08-30  1:59     ` Sverre Rabbelier
2010-08-30  2:09       ` Jonathan Nieder
2010-08-29  3:45 ` [PATCH 13/13] git-remote-testgit: fix error handling Sverre Rabbelier
2010-08-30  1:53 ` [PATCH 00/13] remote helper improvements Jonathan Nieder
2010-08-30  2:01   ` Sverre Rabbelier
     [not found] ` <1283137728899-5476616.post@n2.nabble.com>
2010-08-30  5:54   ` Sverre Rabbelier

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=1283053540-27042-8-git-send-email-srabbelier@gmail.com \
    --to=srabbelier@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).