Use svnrdump_sim.py to emulate svnrdump without an svn server. Tests fetching, incremental fetching, fetching from file://, and the regeneration of fast-import's marks file. Signed-off-by: Florian Achleitner <florian.achleitner.2.6.31@xxxxxxxxx> --- t/t9020-remote-svn.sh | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ transport-helper.c | 15 ++++++----- 2 files changed, 77 insertions(+), 7 deletions(-) create mode 100755 t/t9020-remote-svn.sh diff --git a/t/t9020-remote-svn.sh b/t/t9020-remote-svn.sh new file mode 100755 index 0000000..a0c6a21 --- /dev/null +++ b/t/t9020-remote-svn.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +test_description='tests remote-svn' + +. ./test-lib.sh + +# We override svnrdump by placing a symlink to the svnrdump-emulator in . +export PATH="$HOME:$PATH" +ln -sf $GIT_BUILD_DIR/contrib/svn-fe/svnrdump_sim.py "$HOME/svnrdump" + +init_git () { + rm -fr .git && + git init && + #git remote add svnsim svn::sim:///$TEST_DIRECTORY/t9020/example.svnrdump + # let's reuse an exisiting dump file!? + git remote add svnsim svn::sim:///$TEST_DIRECTORY/t9154/svn.dump + git remote add svnfile svn::file:///$TEST_DIRECTORY/t9154/svn.dump +} + +test_debug ' + git --version + which git + which svnrdump +' + +test_expect_success 'simple fetch' ' + init_git && + git fetch svnsim && + test_cmp .git/refs/svn/svnsim/master .git/refs/remotes/svnsim/master && + cp .git/refs/remotes/svnsim/master master.good +' + +test_debug ' + cat .git/refs/svn/svnsim/master + cat .git/refs/remotes/svnsim/master +' + +test_expect_success 'repeated fetch, nothing shall change' ' + git fetch svnsim && + test_cmp master.good .git/refs/remotes/svnsim/master +' + +test_expect_success 'fetch from a file:// url gives the same result' ' + git fetch svnfile +' + +test_expect_failure 'the sha1 differ because the git-svn-id line in the commit msg contains the url' ' + test_cmp .git/refs/remotes/svnfile/master .git/refs/remotes/svnsim/master +' + +test_expect_success 'mark-file regeneration' ' + mv .git/info/fast-import/marks/svnsim .git/info/fast-import/marks/svnsim.old && + git fetch svnsim && + test_cmp .git/info/fast-import/marks/svnsim.old .git/info/fast-import/marks/svnsim +' + +test_expect_success 'incremental imports must lead to the same head' ' + export SVNRMAX=3 && + init_git && + git fetch svnsim && + test_cmp .git/refs/svn/svnsim/master .git/refs/remotes/svnsim/master && + unset SVNRMAX && + git fetch svnsim && + test_cmp master.good .git/refs/remotes/svnsim/master +' + +test_debug 'git branch -a' + +test_done diff --git a/transport-helper.c b/transport-helper.c index 47db055..a363f2c 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -17,6 +17,7 @@ static int debug; struct helper_data { const char *name; struct child_process *helper; + struct argv_array argv; FILE *out; unsigned fetch : 1, import : 1, @@ -103,7 +104,6 @@ static void do_take_over(struct transport *transport) static struct child_process *get_helper(struct transport *transport) { struct helper_data *data = transport->data; - struct argv_array argv = ARGV_ARRAY_INIT; struct strbuf buf = STRBUF_INIT; struct child_process *helper; const char **refspecs = NULL; @@ -125,10 +125,11 @@ static struct child_process *get_helper(struct transport *transport) helper->in = -1; helper->out = -1; helper->err = 0; - argv_array_pushf(&argv, "git-remote-%s", data->name); - argv_array_push(&argv, transport->remote->name); - argv_array_push(&argv, remove_ext_force(transport->url)); - helper->argv = argv.argv; + argv_array_init(&data->argv); + argv_array_pushf(&data->argv, "git-remote-%s", data->name); + argv_array_push(&data->argv, transport->remote->name); + argv_array_push(&data->argv, remove_ext_force(transport->url)); + helper->argv = data->argv.argv; helper->git_cmd = 0; helper->silent_exec_failure = 1; @@ -143,8 +144,6 @@ static struct child_process *get_helper(struct transport *transport) data->helper = helper; data->no_disconnect_req = 0; - free((void*) helper_env[1]); - argv_array_clear(&argv); /* * Open the output as FILE* so strbuf_getline() can be used. @@ -247,6 +246,8 @@ static int disconnect_helper(struct transport *transport) close(data->helper->out); fclose(data->out); res = finish_command(data->helper); + free((void*) data->helper->env[1]); + argv_array_clear(&data->argv); free(data->helper); data->helper = NULL; } -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html