vcs-svn: set up channel to read fast-import cat-blob response

Set up some plumbing: teach the svndump lib to pass a file descriptor
number to the fast_export lib, representing where cat-blob/ls
responses can be read from, and add a get_response_line helper
function to the fast_export lib to read a line from that file.

Unfortunately this means that svn-fe needs file descriptor 3 to be
redirected from somewhere (preferrably the cat-blob stream of a
fast-import backend); otherwise it will fail:

	$ svndump <path> | svn-fe
	fatal: cannot read from file descriptor 3: Bad file descriptor

For the moment, "svn-fe 3</dev/null" works as a workaround but it
will not work for very long.  A fast-import backend that can retrieve
old commits is needed in order to be able to fulfill svn
"Node-copyfrom-rev" requests that refer to revs from a previous run.

[jn: with new change description]

Based-on-patch-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
This commit is contained in:
David Barr
2011-03-05 13:30:23 +11:00
committed by Jonathan Nieder
parent efc749b48f
commit 41529bbce4
5 changed files with 109 additions and 52 deletions

View File

@ -14,6 +14,8 @@
#include "obj_pool.h"
#include "string_pool.h"
#define REPORT_FILENO 3
#define NODEACT_REPLACE 4
#define NODEACT_DELETE 3
#define NODEACT_ADD 2
@ -367,6 +369,7 @@ int svndump_init(const char *filename)
if (buffer_init(&input, filename))
return error("cannot open %s: %s", filename, strerror(errno));
repo_init();
fast_export_init(REPORT_FILENO);
reset_dump_ctx(~0);
reset_rev_ctx(0);
reset_node_ctx(NULL);
@ -377,6 +380,7 @@ int svndump_init(const char *filename)
void svndump_deinit(void)
{
log_reset();
fast_export_deinit();
repo_reset();
reset_dump_ctx(~0);
reset_rev_ctx(0);
@ -390,6 +394,7 @@ void svndump_deinit(void)
void svndump_reset(void)
{
log_reset();
fast_export_reset();
buffer_reset(&input);
repo_reset();
reset_dump_ctx(~0);