transport-helper: change import semantics
authorSverre Rabbelier <srabbelier@gmail.com>
Sat, 16 Jul 2011 13:03:38 +0000 (15:03 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 Jul 2011 18:17:48 +0000 (11:17 -0700)
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>
git-remote-testgit.py
t/t5800-remote-helpers.sh
transport-helper.c

index 0b5928d29067f4d0306ab7b8f6a20c1711e47063..1ed7a5651ef5a2320c56856b5a1fe784e178ab23 100644 (file)
@@ -120,8 +120,22 @@ def do_import(repo, args):
     if not repo.gitdir:
         die("Need gitdir to import")
 
+    ref = args[0]
+    refs = [ref]
+
+    while True:
+        line = sys.stdin.readline()
+        if line == '\n':
+            break
+        if not line.startswith('import '):
+            die("Expected import line.")
+
+        # strip of leading 'import '
+        ref = line[7:].strip()
+        refs.append(ref)
+
     repo = update_local_repo(repo)
-    repo.exporter.export_repo(repo.gitdir, args)
+    repo.exporter.export_repo(repo.gitdir, refs)
 
     print "done"
 
index 12f471c07088db530b3f94193fd86a1efeb29509..1c62001fce76a73cc951dd18bcf6cb6f650f69e8 100755 (executable)
@@ -98,7 +98,7 @@ test_expect_success 'fetch new branch' '
        compare_refs public HEAD localclone FETCH_HEAD
 '
 
-test_expect_failure 'fetch multiple branches' '
+test_expect_success 'fetch multiple branches' '
        (cd localclone &&
         git fetch
        ) &&
index a8f69b05e80a686a01be91aabfb74c845a86407d..0c00be9dc7a12645242008a3ad869c0cb3f63caf 100644 (file)
@@ -418,6 +418,9 @@ static int fetch_with_import(struct transport *transport,
                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);