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

2012-08-15 Thread Florian Achleitner
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 
> ---
>  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 000..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-

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

2012-08-14 Thread Florian Achleitner
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 
---
 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 000..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 majord...@vger.kernel.o