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:
committed by
Jonathan Nieder
parent
efc749b48f
commit
41529bbce4
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user