summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSverre Rabbelier <srabbelier@gmail.com>2011-07-16 13:03:38 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-07-19 18:17:48 (GMT)
commit9504bc9d5a1e672ce5945679f86294e61bbea3a6 (patch)
treec00f818e0fd691c9ddfd3838b85f30a2356061a7
parent6c8151a32e59c3109b3acc886358bfe6c14612fb (diff)
downloadgit-9504bc9d5a1e672ce5945679f86294e61bbea3a6.zip
git-9504bc9d5a1e672ce5945679f86294e61bbea3a6.tar.gz
git-9504bc9d5a1e672ce5945679f86294e61bbea3a6.tar.bz2
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>
-rw-r--r--git-remote-testgit.py16
-rwxr-xr-xt/t5800-remote-helpers.sh2
-rw-r--r--transport-helper.c3
3 files changed, 19 insertions, 2 deletions
diff --git a/git-remote-testgit.py b/git-remote-testgit.py
index 0b5928d..1ed7a56 100644
--- a/git-remote-testgit.py
+++ b/git-remote-testgit.py
@@ -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"
diff --git a/t/t5800-remote-helpers.sh b/t/t5800-remote-helpers.sh
index 12f471c..1c62001 100755
--- a/t/t5800-remote-helpers.sh
+++ b/t/t5800-remote-helpers.sh
@@ -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
) &&
diff --git a/transport-helper.c b/transport-helper.c
index a8f69b0..0c00be9 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -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);