aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSverre Rabbelier <srabbelier@gmail.com>2011-07-16 15:03:36 +0200
committerJunio C Hamano <gitster@pobox.com>2011-07-19 11:17:48 -0700
commit1f25c50419c5f46cd6b818438fe641cf942ee6ad (patch)
treeddf9846808b65e85906ea9d93e841a6a86f51f3f
parentcc567322acbfd5b32e61ab5d005352347cd7eeaf (diff)
downloadgit-1f25c50419c5f46cd6b818438fe641cf942ee6ad.tar.gz
git-1f25c50419c5f46cd6b818438fe641cf942ee6ad.tar.xz
transport-helper: use the new done feature where possible
In other words, use fast-export --use-done-feature to add a 'done' command at the end of streams passed to remote helpers' "import" commands, and teach the remote helpers implementing "export" to use the 'done' command in turn when producing their streams. The trailing \n in the protocol signals the helper that the connection is about to close, allowing it to do whatever cleanup neccesary. Previously, the connection would already be closed by the time the trailing \n was to be written. Now that the remote-helper protocol uses the new done command in its fast-import streams, this is no longer the case and we can safely write the trailing \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.py2
-rw-r--r--transport-helper.c9
2 files changed, 4 insertions, 7 deletions
diff --git a/git-remote-testgit.py b/git-remote-testgit.py
index cdbc49495..af4d04035 100644
--- a/git-remote-testgit.py
+++ b/git-remote-testgit.py
@@ -123,6 +123,8 @@ def do_import(repo, args):
repo = update_local_repo(repo)
repo.exporter.export_repo(repo.gitdir, args)
+ print "done"
+
def do_export(repo, args):
"""Imports a fast-import stream from git to testgit.
diff --git a/transport-helper.c b/transport-helper.c
index e02f4a3e5..4c0d86113 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -380,8 +380,9 @@ static int get_exporter(struct transport *transport,
/* we need to duplicate helper->in because we want to use it after
* fastexport is done with it. */
fastexport->out = dup(helper->in);
- fastexport->argv = xcalloc(4 + revlist_args->nr, sizeof(*fastexport->argv));
+ fastexport->argv = xcalloc(5 + revlist_args->nr, sizeof(*fastexport->argv));
fastexport->argv[argc++] = "fast-export";
+ fastexport->argv[argc++] = "--use-done-feature";
if (export_marks)
fastexport->argv[argc++] = export_marks;
if (import_marks)
@@ -417,11 +418,8 @@ static int fetch_with_import(struct transport *transport,
sendline(data, &buf);
strbuf_reset(&buf);
}
- if (disconnect_helper(transport))
- die("Error while disconnecting helper");
if (finish_command(&fastimport))
die("Error while running fast-import");
-
free(fastimport.argv);
fastimport.argv = NULL;
@@ -764,11 +762,8 @@ static int push_refs_with_export(struct transport *transport,
export_marks, import_marks, &revlist_args))
die("Couldn't run fast-export");
- data->no_disconnect_req = 1;
if (finish_command(&exporter))
die("Error while running fast-export");
- if (disconnect_helper(transport))
- die("Error while disconnecting helper");
return 0;
}