Subject: Re: [PATCH/RFC v3 16/16] Add a test script for remote-svn.

From: Florian Achleitner <[email-masked]>
Date: Wed, 15 Aug 2012 13:46:26 +0200

Forget this patch! It contains some unwanted content. Something with rebasing 
went wrong..

On Tuesday 14 August 2012 21:13:18 Florian Achleitner wrote:
> 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 <[email-masked]>
> ---
>  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;
>  	}