transport-helper: change import semantics

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 push statement. That is, the import statement is followed by a series of import statements that are terminated by a '\n'. Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sverre Rabbelier committed Jul 16, 2011 at 15:03 UTC 9504bc9d5a1e672ce5945679f86294e61bbea3a6
3 files changed +19 -2
git-remote-testgit.py
+15 -1
@@ -120,8 +120,22 @@ def do_import(repo, args):
120 if not repo.gitdir:
121 die("Need gitdir to import")
122
123 + ref = args[0]
124 + refs = [ref]
125 +
126 + while True:
127 + line = sys.stdin.readline()
128 + if line == '\n':
129 + break
130 + if not line.startswith('import '):
131 + die("Expected import line.")
132 +
133 + # strip of leading 'import '
134 + ref = line[7:].strip()
135 + refs.append(ref)
136 +
137 repo = update_local_repo(repo)
124 - repo.exporter.export_repo(repo.gitdir, args)
138 + repo.exporter.export_repo(repo.gitdir, refs)
139
140 print "done"
141
t/t5800-remote-helpers.sh
+1 -1
@@ -98,7 +98,7 @@ test_expect_success 'fetch new branch' '
98 compare_refs public HEAD localclone FETCH_HEAD
99 '
100
101 -test_expect_failure 'fetch multiple branches' '
101 +test_expect_success 'fetch multiple branches' '
102 (cd localclone &&
103 git fetch
104 ) &&
transport-helper.c
+3
@@ -418,6 +418,9 @@ static int fetch_with_import(struct transport *transport,
418 sendline(data, &buf);
419 strbuf_reset(&buf);
420 }
421 +
422 + write_constant(data->helper->in, "\n");
423 +
424 if (finish_command(&fastimport))
425 die("Error while running fast-import");
426 free(fastimport.argv);