All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] git-daemon wrapper to wait until daemon is ready
@ 2012-04-14 18:29 Clemens Buchacher
  2012-04-14 18:32 ` [PATCH] t5570: use explicit push refspec Clemens Buchacher
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-14 18:29 UTC (permalink / raw)
  To: Zbigniew Jędrzejewski-Szmek; +Cc: git, gitster, Jeff King

The shell script which is currently used to parse git daemon output does
not seem to work unreliably. In order to work around such issues,
re-implement the same procedure in C and write the daemon pid to a file.

This means that we can no longer wait on the daemon process, since it is
no longer a direct child of the shell process.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---

Does this patch improve your situation?

Note that t5570 fails on current pu, because of the push.default
warnings. I am sending an independent patch for that.

Clemens

 .gitignore          |    1 +
 Makefile            |    1 +
 cache.h             |    1 +
 t/lib-git-daemon.sh |   30 +++-------------------
 test-git-daemon.c   |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
 wrapper.c           |   21 +++++++++++++++
 6 files changed, 99 insertions(+), 26 deletions(-)
 create mode 100644 test-git-daemon.c

diff --git a/.gitignore b/.gitignore
index 87fcc5f..18a484c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,6 +177,7 @@
 /test-dump-cache-tree
 /test-scrap-cache-tree
 /test-genrandom
+/test-git-daemon
 /test-index-version
 /test-line-buffer
 /test-match-trees
diff --git a/Makefile b/Makefile
index be1957a..7317daa 100644
--- a/Makefile
+++ b/Makefile
@@ -477,6 +477,7 @@ TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
 TEST_PROGRAMS_NEED_X += test-genrandom
+TEST_PROGRAMS_NEED_X += test-git-daemon
 TEST_PROGRAMS_NEED_X += test-index-version
 TEST_PROGRAMS_NEED_X += test-line-buffer
 TEST_PROGRAMS_NEED_X += test-match-trees
diff --git a/cache.h b/cache.h
index e5e1aa4..6351c15 100644
--- a/cache.h
+++ b/cache.h
@@ -1176,6 +1176,7 @@ extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg
 extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
 extern void fsync_or_die(int fd, const char *);
 
+extern ssize_t read_line(int fd, void *buf, size_t count);
 extern ssize_t read_in_full(int fd, void *buf, size_t count);
 extern ssize_t write_in_full(int fd, const void *buf, size_t count);
 static inline ssize_t write_str_in_full(int fd, const char *str)
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index ef2d01f..9fefae1 100644
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
@@ -23,27 +23,13 @@ start_git_daemon() {
 	trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
 
 	say >&3 "Starting git daemon ..."
-	mkfifo git_daemon_output
-	git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
+	test-git-daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
 		--reuseaddr --verbose \
 		--base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
 		"$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
-		>&3 2>git_daemon_output &
-	GIT_DAEMON_PID=$!
-	{
-		read line
-		echo >&4 "$line"
-		cat >&4 &
-
-		# Check expected output
-		if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
-		then
-			kill "$GIT_DAEMON_PID"
-			wait "$GIT_DAEMON_PID"
-			trap 'die' EXIT
-			error "git daemon failed to start"
-		fi
-	} <git_daemon_output
+		>&3 2>&4 ||
+		error "git daemon failed to start"
+	GIT_DAEMON_PID=$(cat git-daemon.pid)
 }
 
 stop_git_daemon() {
@@ -57,13 +43,5 @@ stop_git_daemon() {
 	# kill git-daemon child of git
 	say >&3 "Stopping git daemon ..."
 	kill "$GIT_DAEMON_PID"
-	wait "$GIT_DAEMON_PID" >&3 2>&4
-	ret=$?
-	# expect exit with status 143 = 128+15 for signal TERM=15
-	if test $ret -ne 143
-	then
-		error "git daemon exited with status: $ret"
-	fi
 	GIT_DAEMON_PID=
-	rm -f git_daemon_output
 }
diff --git a/test-git-daemon.c b/test-git-daemon.c
new file mode 100644
index 0000000..323bb65
--- /dev/null
+++ b/test-git-daemon.c
@@ -0,0 +1,71 @@
+#include "git-compat-util.h"
+#include "run-command.h"
+#include "exec_cmd.h"
+#include "strbuf.h"
+#include "cache.h"
+#include <string.h>
+#include <errno.h>
+
+static int parse_daemon_output(char *s)
+{
+	if (*s++ != '[')
+		return 1;
+	s = strchr(s, ']');
+	if (!s)
+		return 1;
+	if (strcmp(s, "] Ready to rumble\n"))
+		return 1;
+
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	FILE *fp;
+	struct child_process proc, cat;
+	char *cat_argv[] = { "cat", NULL };
+	int parse_error;
+	char buf[PATH_MAX];
+	int r;
+
+	setup_path();
+
+	memset(&proc, 0, sizeof(proc));
+	argv[0] = "git-daemon";
+	proc.argv = (const char **)argv;
+	proc.no_stdin = 1;
+	proc.err = -1;
+
+	if (start_command(&proc) < 0)
+		return 1;
+
+	r = read_line(proc.err, buf, sizeof(buf));
+	if (r < 0) {
+		finish_command(&proc);
+		return 1;
+	}
+	fprintf(stderr, "%s", buf);
+
+	parse_error = parse_daemon_output(buf);
+
+	memset(&cat, 0, sizeof(cat));
+	cat.argv = (const char **)cat_argv;
+	cat.in = proc.err;
+	cat.out = 2;
+
+	if (start_command(&cat) < 0)
+		return 1;
+
+	if (parse_error) {
+		kill(proc.pid, SIGTERM);
+		finish_command(&proc);
+		finish_command(&cat);
+		return 1;
+	}
+
+	fp = fopen("git-daemon.pid", "w");
+	fprintf(fp, "%"PRIuMAX"\n", (uintmax_t)proc.pid);
+	fclose(fp);
+
+	return 0;
+}
diff --git a/wrapper.c b/wrapper.c
index 85f09df..7bf6dda 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -141,6 +141,27 @@ ssize_t xwrite(int fd, const void *buf, size_t len)
 	}
 }
 
+ssize_t read_line(int fd, void *buf, size_t count)
+{
+	char *p = buf;
+	ssize_t total = 0;
+
+	while (count > 0) {
+		ssize_t loaded = xread(fd, p, 1);
+		if (loaded < 0)
+			return -1;
+		if (loaded == 0)
+			return total;
+		count -= loaded;
+		total += loaded;
+		if (*p == '\n')
+			break;
+		p += loaded;
+	}
+
+	return total;
+}
+
 ssize_t read_in_full(int fd, void *buf, size_t count)
 {
 	char *p = buf;
-- 
1.7.9.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH] t5570: use explicit push refspec
  2012-04-14 18:29 [PATCH] git-daemon wrapper to wait until daemon is ready Clemens Buchacher
@ 2012-04-14 18:32 ` Clemens Buchacher
  2012-04-14 23:40   ` Junio C Hamano
  2012-04-14 18:43 ` [PATCH] git-daemon wrapper to wait until daemon is ready Ben Walton
  2012-04-14 19:36 ` [PATCH] " Johannes Sixt
  2 siblings, 1 reply; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-14 18:32 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

The default mode for push without arguments will change. Some warnings
are about to be enabled for such use, which causes some t5570 tests to
fail because they do not expect this output. Fix this by passing an
explicit refspec to git push.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---

On Sat, Apr 14, 2012 at 08:29:07PM +0200, Clemens Buchacher wrote:
> 
> Note that t5570 fails on current pu, because of the push.default
> warnings. I am sending an independent patch for that.

Here we go.

 t/t5570-git-daemon.sh |   30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index 7cbc999..a3a4e47 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -103,14 +103,12 @@ test_remote_error()
 		esac
 	done
 
-	if test $# -ne 3
-	then
-		error "invalid number of arguments"
-	fi
-
+	msg=$1
+	shift
 	cmd=$1
-	repo=$2
-	msg=$3
+	shift
+	repo=$1
+	shift || error "invalid number of arguments"
 
 	if test -x "$GIT_DAEMON_DOCUMENT_ROOT_PATH/$repo"
 	then
@@ -122,7 +120,7 @@ test_remote_error()
 		fi
 	fi
 
-	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" 2>output &&
+	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" "$@" 2>output &&
 	echo "fatal: remote error: $msg: /$repo" >expect &&
 	test_cmp expect output
 	ret=$?
@@ -131,18 +129,18 @@ test_remote_error()
 }
 
 msg="access denied or repository not exported"
-test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git '$msg'"
-test_expect_success 'push disabled'      "test_remote_error    push  repo.git    '$msg'"
-test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    '$msg'"
-test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    '$msg'"
+test_expect_success 'clone non-existent' "test_remote_error    '$msg' clone nowhere.git    "
+test_expect_success 'push disabled'      "test_remote_error    '$msg' push  repo.git master"
+test_expect_success 'read access denied' "test_remote_error -x '$msg' fetch repo.git       "
+test_expect_success 'not exported'       "test_remote_error -n '$msg' fetch repo.git       "
 
 stop_git_daemon
 start_git_daemon --informative-errors
 
-test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git 'no such repository'"
-test_expect_success 'push disabled'      "test_remote_error    push  repo.git    'service not enabled'"
-test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    'no such repository'"
-test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    'repository not exported'"
+test_expect_success 'clone non-existent' "test_remote_error    'no such repository'      clone nowhere.git    "
+test_expect_success 'push disabled'      "test_remote_error    'service not enabled'     push  repo.git master"
+test_expect_success 'read access denied' "test_remote_error -x 'no such repository'      fetch repo.git       "
+test_expect_success 'not exported'       "test_remote_error -n 'repository not exported' fetch repo.git       "
 
 stop_git_daemon
 test_done
-- 
1.7.9.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-14 18:29 [PATCH] git-daemon wrapper to wait until daemon is ready Clemens Buchacher
  2012-04-14 18:32 ` [PATCH] t5570: use explicit push refspec Clemens Buchacher
@ 2012-04-14 18:43 ` Ben Walton
  2012-04-14 19:00   ` Clemens Buchacher
  2012-04-14 19:36 ` [PATCH] " Johannes Sixt
  2 siblings, 1 reply; 18+ messages in thread
From: Ben Walton @ 2012-04-14 18:43 UTC (permalink / raw)
  To: Clemens Buchacher
  Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

Excerpts from Clemens Buchacher's message of Sat Apr 14 14:29:07 -0400 2012:

Hi Clemens,

> The shell script which is currently used to parse git daemon output does
> not seem to work unreliably. In order to work around such issues,

Presumably you mean "work reliably" here?

Thanks
-Ben
--
Ben Walton
Systems Programmer - CHASS
University of Toronto
C:416.407.5610 | W:416.978.4302

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-14 18:43 ` [PATCH] git-daemon wrapper to wait until daemon is ready Ben Walton
@ 2012-04-14 19:00   ` Clemens Buchacher
  2012-04-14 19:16     ` [PATCH v2] " Clemens Buchacher
  0 siblings, 1 reply; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-14 19:00 UTC (permalink / raw)
  To: Ben Walton; +Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

On Sat, Apr 14, 2012 at 02:43:41PM -0400, Ben Walton wrote:
> 
> > The shell script which is currently used to parse git daemon output does
> > not seem to work unreliably. In order to work around such issues,
> 
> Presumably you mean "work reliably" here?

Yes, that's what I meant the commit message to say. Thanks for noticing.

But I would like to wait for more info from the OP before we conclude
that this is indeed the case.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2] git-daemon wrapper to wait until daemon is ready
  2012-04-14 19:00   ` Clemens Buchacher
@ 2012-04-14 19:16     ` Clemens Buchacher
  0 siblings, 0 replies; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-14 19:16 UTC (permalink / raw)
  To: Ben Walton; +Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

The shell script which is currently used to parse git daemon output does
not seem to work reliably. In order to work around such issues,
re-implement the same procedure in C and write the daemon pid to a file.

This means that we can no longer wait on the daemon process, since it is
not a direct child of the shell process.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---

> On Sat, Apr 14, 2012 at 02:43:41PM -0400, Ben Walton wrote:
> > 
> > Presumably you mean "work reliably" here?

I fixed the commit message. I also noticed that the buffer returned by
read_line had no zero terminator. And the parse_error variable was
unnecessary.

 .gitignore          |    1 +
 Makefile            |    1 +
 cache.h             |    1 +
 t/lib-git-daemon.sh |   30 +++-------------------
 test-git-daemon.c   |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++
 wrapper.c           |   21 ++++++++++++++++
 6 files changed, 97 insertions(+), 26 deletions(-)
 create mode 100644 test-git-daemon.c

diff --git a/.gitignore b/.gitignore
index 87fcc5f..18a484c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,6 +177,7 @@
 /test-dump-cache-tree
 /test-scrap-cache-tree
 /test-genrandom
+/test-git-daemon
 /test-index-version
 /test-line-buffer
 /test-match-trees
diff --git a/Makefile b/Makefile
index be1957a..7317daa 100644
--- a/Makefile
+++ b/Makefile
@@ -477,6 +477,7 @@ TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
 TEST_PROGRAMS_NEED_X += test-genrandom
+TEST_PROGRAMS_NEED_X += test-git-daemon
 TEST_PROGRAMS_NEED_X += test-index-version
 TEST_PROGRAMS_NEED_X += test-line-buffer
 TEST_PROGRAMS_NEED_X += test-match-trees
diff --git a/cache.h b/cache.h
index e5e1aa4..6351c15 100644
--- a/cache.h
+++ b/cache.h
@@ -1176,6 +1176,7 @@ extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg
 extern int write_or_whine_pipe(int fd, const void *buf, size_t count, const char *msg);
 extern void fsync_or_die(int fd, const char *);
 
+extern ssize_t read_line(int fd, void *buf, size_t count);
 extern ssize_t read_in_full(int fd, void *buf, size_t count);
 extern ssize_t write_in_full(int fd, const void *buf, size_t count);
 static inline ssize_t write_str_in_full(int fd, const char *str)
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index ef2d01f..9fefae1 100644
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
@@ -23,27 +23,13 @@ start_git_daemon() {
 	trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
 
 	say >&3 "Starting git daemon ..."
-	mkfifo git_daemon_output
-	git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
+	test-git-daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
 		--reuseaddr --verbose \
 		--base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
 		"$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
-		>&3 2>git_daemon_output &
-	GIT_DAEMON_PID=$!
-	{
-		read line
-		echo >&4 "$line"
-		cat >&4 &
-
-		# Check expected output
-		if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
-		then
-			kill "$GIT_DAEMON_PID"
-			wait "$GIT_DAEMON_PID"
-			trap 'die' EXIT
-			error "git daemon failed to start"
-		fi
-	} <git_daemon_output
+		>&3 2>&4 ||
+		error "git daemon failed to start"
+	GIT_DAEMON_PID=$(cat git-daemon.pid)
 }
 
 stop_git_daemon() {
@@ -57,13 +43,5 @@ stop_git_daemon() {
 	# kill git-daemon child of git
 	say >&3 "Stopping git daemon ..."
 	kill "$GIT_DAEMON_PID"
-	wait "$GIT_DAEMON_PID" >&3 2>&4
-	ret=$?
-	# expect exit with status 143 = 128+15 for signal TERM=15
-	if test $ret -ne 143
-	then
-		error "git daemon exited with status: $ret"
-	fi
 	GIT_DAEMON_PID=
-	rm -f git_daemon_output
 }
diff --git a/test-git-daemon.c b/test-git-daemon.c
new file mode 100644
index 0000000..82a9a8f
--- /dev/null
+++ b/test-git-daemon.c
@@ -0,0 +1,69 @@
+#include "git-compat-util.h"
+#include "run-command.h"
+#include "exec_cmd.h"
+#include "strbuf.h"
+#include "cache.h"
+#include <string.h>
+#include <errno.h>
+
+static int parse_daemon_output(char *s)
+{
+	if (*s++ != '[')
+		return 1;
+	s = strchr(s, ']');
+	if (!s)
+		return 1;
+	if (strcmp(s, "] Ready to rumble\n"))
+		return 1;
+
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	FILE *fp;
+	struct child_process proc, cat;
+	char *cat_argv[] = { "cat", NULL };
+	char buf[PATH_MAX];
+	int r;
+
+	setup_path();
+
+	memset(&proc, 0, sizeof(proc));
+	argv[0] = "git-daemon";
+	proc.argv = (const char **)argv;
+	proc.no_stdin = 1;
+	proc.err = -1;
+
+	if (start_command(&proc) < 0)
+		return 1;
+
+	r = read_line(proc.err, buf, sizeof(buf)-1);
+	if (r < 0) {
+		finish_command(&proc);
+		return 1;
+	}
+	buf[r] = '\0';
+	fprintf(stderr, "%s", buf);
+
+	memset(&cat, 0, sizeof(cat));
+	cat.argv = (const char **)cat_argv;
+	cat.in = proc.err;
+	cat.out = 2;
+
+	if (start_command(&cat) < 0)
+		return 1;
+
+	if (parse_daemon_output(buf)) {
+		kill(proc.pid, SIGTERM);
+		finish_command(&proc);
+		finish_command(&cat);
+		return 1;
+	}
+
+	fp = fopen("git-daemon.pid", "w");
+	fprintf(fp, "%"PRIuMAX"\n", (uintmax_t)proc.pid);
+	fclose(fp);
+
+	return 0;
+}
diff --git a/wrapper.c b/wrapper.c
index 85f09df..7bf6dda 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -141,6 +141,27 @@ ssize_t xwrite(int fd, const void *buf, size_t len)
 	}
 }
 
+ssize_t read_line(int fd, void *buf, size_t count)
+{
+	char *p = buf;
+	ssize_t total = 0;
+
+	while (count > 0) {
+		ssize_t loaded = xread(fd, p, 1);
+		if (loaded < 0)
+			return -1;
+		if (loaded == 0)
+			return total;
+		count -= loaded;
+		total += loaded;
+		if (*p == '\n')
+			break;
+		p += loaded;
+	}
+
+	return total;
+}
+
 ssize_t read_in_full(int fd, void *buf, size_t count)
 {
 	char *p = buf;
-- 
1.7.9.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-14 18:29 [PATCH] git-daemon wrapper to wait until daemon is ready Clemens Buchacher
  2012-04-14 18:32 ` [PATCH] t5570: use explicit push refspec Clemens Buchacher
  2012-04-14 18:43 ` [PATCH] git-daemon wrapper to wait until daemon is ready Ben Walton
@ 2012-04-14 19:36 ` Johannes Sixt
  2012-04-14 22:06   ` Clemens Buchacher
  2 siblings, 1 reply; 18+ messages in thread
From: Johannes Sixt @ 2012-04-14 19:36 UTC (permalink / raw)
  To: Clemens Buchacher
  Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

Am 14.04.2012 20:29, schrieb Clemens Buchacher:
> +	r = read_line(proc.err, buf, sizeof(buf));

We have strbuf_getwholeline_fd().

> +	memset(&cat, 0, sizeof(cat));
> +	cat.argv = (const char **)cat_argv;
> +	cat.in = proc.err;
> +	cat.out = 2;

Useless use of cat?

-- Hannes

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-14 19:36 ` [PATCH] " Johannes Sixt
@ 2012-04-14 22:06   ` Clemens Buchacher
  2012-04-15 11:53     ` [PATCH v3] " Clemens Buchacher
  2012-04-15 17:11     ` [PATCH] " Johannes Sixt
  0 siblings, 2 replies; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-14 22:06 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

On Sat, Apr 14, 2012 at 09:36:38PM +0200, Johannes Sixt wrote:
> Am 14.04.2012 20:29, schrieb Clemens Buchacher:
> > +	r = read_line(proc.err, buf, sizeof(buf));
> 
> We have strbuf_getwholeline_fd().

Thanks. Will fix.

> > +	memset(&cat, 0, sizeof(cat));
> > +	cat.argv = (const char **)cat_argv;
> > +	cat.in = proc.err;
> > +	cat.out = 2;
> 
> Useless use of cat?

I don't see how I could avoid cat here. I have to create a pipe first so
that I can read the first line. And then I have to terminate
test-git-daemon in order to start the tests. So I cannot continue
reading synchronously.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] t5570: use explicit push refspec
  2012-04-14 18:32 ` [PATCH] t5570: use explicit push refspec Clemens Buchacher
@ 2012-04-14 23:40   ` Junio C Hamano
  2012-04-15  0:11     ` Clemens Buchacher
  0 siblings, 1 reply; 18+ messages in thread
From: Junio C Hamano @ 2012-04-14 23:40 UTC (permalink / raw)
  To: Clemens Buchacher; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

Clemens Buchacher <drizzd@aon.at> writes:

> The default mode for push without arguments will change. Some warnings
> are about to be enabled for such use, which causes some t5570 tests to
> fail because they do not expect this output. Fix this by passing an
> explicit refspec to git push.

I wonder if a better fix is to configure "push.default = matching" in the
test repository.  Otherwise wouldn't the result of the push change once
the default changes?

> Signed-off-by: Clemens Buchacher <drizzd@aon.at>
> ---
>
> On Sat, Apr 14, 2012 at 08:29:07PM +0200, Clemens Buchacher wrote:
>> 
>> Note that t5570 fails on current pu, because of the push.default
>> warnings. I am sending an independent patch for that.
>
> Here we go.
>
>  t/t5570-git-daemon.sh |   30 ++++++++++++++----------------
>  1 file changed, 14 insertions(+), 16 deletions(-)
>
> diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
> index 7cbc999..a3a4e47 100755
> --- a/t/t5570-git-daemon.sh
> +++ b/t/t5570-git-daemon.sh
> @@ -103,14 +103,12 @@ test_remote_error()
>  		esac
>  	done
>  
> -	if test $# -ne 3
> -	then
> -		error "invalid number of arguments"
> -	fi
> -
> +	msg=$1
> +	shift
>  	cmd=$1
> -	repo=$2
> -	msg=$3
> +	shift
> +	repo=$1
> +	shift || error "invalid number of arguments"
>  
>  	if test -x "$GIT_DAEMON_DOCUMENT_ROOT_PATH/$repo"
>  	then
> @@ -122,7 +120,7 @@ test_remote_error()
>  		fi
>  	fi
>  
> -	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" 2>output &&
> +	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" "$@" 2>output &&
>  	echo "fatal: remote error: $msg: /$repo" >expect &&
>  	test_cmp expect output
>  	ret=$?
> @@ -131,18 +129,18 @@ test_remote_error()
>  }
>  
>  msg="access denied or repository not exported"
> -test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git '$msg'"
> -test_expect_success 'push disabled'      "test_remote_error    push  repo.git    '$msg'"
> -test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    '$msg'"
> -test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    '$msg'"
> +test_expect_success 'clone non-existent' "test_remote_error    '$msg' clone nowhere.git    "
> +test_expect_success 'push disabled'      "test_remote_error    '$msg' push  repo.git master"
> +test_expect_success 'read access denied' "test_remote_error -x '$msg' fetch repo.git       "
> +test_expect_success 'not exported'       "test_remote_error -n '$msg' fetch repo.git       "
>  
>  stop_git_daemon
>  start_git_daemon --informative-errors
>  
> -test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git 'no such repository'"
> -test_expect_success 'push disabled'      "test_remote_error    push  repo.git    'service not enabled'"
> -test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    'no such repository'"
> -test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    'repository not exported'"
> +test_expect_success 'clone non-existent' "test_remote_error    'no such repository'      clone nowhere.git    "
> +test_expect_success 'push disabled'      "test_remote_error    'service not enabled'     push  repo.git master"
> +test_expect_success 'read access denied' "test_remote_error -x 'no such repository'      fetch repo.git       "
> +test_expect_success 'not exported'       "test_remote_error -n 'repository not exported' fetch repo.git       "
>  
>  stop_git_daemon
>  test_done

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] t5570: use explicit push refspec
  2012-04-14 23:40   ` Junio C Hamano
@ 2012-04-15  0:11     ` Clemens Buchacher
  2012-04-15 19:20       ` Junio C Hamano
  0 siblings, 1 reply; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-15  0:11 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

On Sat, Apr 14, 2012 at 04:40:01PM -0700, Junio C Hamano wrote:
> Clemens Buchacher <drizzd@aon.at> writes:
> 
> > The default mode for push without arguments will change. Some warnings
> > are about to be enabled for such use, which causes some t5570 tests to
> > fail because they do not expect this output. Fix this by passing an
> > explicit refspec to git push.
> 
> I wonder if a better fix is to configure "push.default = matching" in the
> test repository.  Otherwise wouldn't the result of the push change once
> the default changes?

The push.default option matters only if a refspec is not specified. By
adding a refspec, push.default should not matter any more. Unless that
is going to change as well?

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3] git-daemon wrapper to wait until daemon is ready
  2012-04-14 22:06   ` Clemens Buchacher
@ 2012-04-15 11:53     ` Clemens Buchacher
  2012-04-16 15:46       ` Zbigniew Jędrzejewski-Szmek
  2012-04-19 15:00       ` Junio C Hamano
  2012-04-15 17:11     ` [PATCH] " Johannes Sixt
  1 sibling, 2 replies; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-15 11:53 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

The shell script which is currently used to parse git daemon output does
not seem to work reliably. In order to work around such issues,
re-implement the same procedure in C and write the daemon pid to a file.

This means that we can no longer wait on the daemon process, since it is
no longer a direct child of the shell process.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---

On Sun, Apr 15, 2012 at 12:06:06AM +0200, Clemens Buchacher wrote:
> On Sat, Apr 14, 2012 at 09:36:38PM +0200, Johannes Sixt wrote:
> > Am 14.04.2012 20:29, schrieb Clemens Buchacher:
> > > +	r = read_line(proc.err, buf, sizeof(buf));
> > 
> > We have strbuf_getwholeline_fd().
> 
> Thanks. Will fix.

Here's the re-roll for completeness. Still waiting on feedback from the
OP if this actually solves the problem, though.
 
 .gitignore          |    1 +
 Makefile            |    1 +
 t/lib-git-daemon.sh |   30 ++++---------------------
 test-git-daemon.c   |   62 +++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 68 insertions(+), 26 deletions(-)
 create mode 100644 test-git-daemon.c

diff --git a/.gitignore b/.gitignore
index 87fcc5f..18a484c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -177,6 +177,7 @@
 /test-dump-cache-tree
 /test-scrap-cache-tree
 /test-genrandom
+/test-git-daemon
 /test-index-version
 /test-line-buffer
 /test-match-trees
diff --git a/Makefile b/Makefile
index be1957a..7317daa 100644
--- a/Makefile
+++ b/Makefile
@@ -477,6 +477,7 @@ TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-scrap-cache-tree
 TEST_PROGRAMS_NEED_X += test-genrandom
+TEST_PROGRAMS_NEED_X += test-git-daemon
 TEST_PROGRAMS_NEED_X += test-index-version
 TEST_PROGRAMS_NEED_X += test-line-buffer
 TEST_PROGRAMS_NEED_X += test-match-trees
diff --git a/t/lib-git-daemon.sh b/t/lib-git-daemon.sh
index ef2d01f..9fefae1 100644
--- a/t/lib-git-daemon.sh
+++ b/t/lib-git-daemon.sh
@@ -23,27 +23,13 @@ start_git_daemon() {
 	trap 'code=$?; stop_git_daemon; (exit $code); die' EXIT
 
 	say >&3 "Starting git daemon ..."
-	mkfifo git_daemon_output
-	git daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
+	test-git-daemon --listen=127.0.0.1 --port="$LIB_GIT_DAEMON_PORT" \
 		--reuseaddr --verbose \
 		--base-path="$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
 		"$@" "$GIT_DAEMON_DOCUMENT_ROOT_PATH" \
-		>&3 2>git_daemon_output &
-	GIT_DAEMON_PID=$!
-	{
-		read line
-		echo >&4 "$line"
-		cat >&4 &
-
-		# Check expected output
-		if test x"$(expr "$line" : "\[[0-9]*\] \(.*\)")" != x"Ready to rumble"
-		then
-			kill "$GIT_DAEMON_PID"
-			wait "$GIT_DAEMON_PID"
-			trap 'die' EXIT
-			error "git daemon failed to start"
-		fi
-	} <git_daemon_output
+		>&3 2>&4 ||
+		error "git daemon failed to start"
+	GIT_DAEMON_PID=$(cat git-daemon.pid)
 }
 
 stop_git_daemon() {
@@ -57,13 +43,5 @@ stop_git_daemon() {
 	# kill git-daemon child of git
 	say >&3 "Stopping git daemon ..."
 	kill "$GIT_DAEMON_PID"
-	wait "$GIT_DAEMON_PID" >&3 2>&4
-	ret=$?
-	# expect exit with status 143 = 128+15 for signal TERM=15
-	if test $ret -ne 143
-	then
-		error "git daemon exited with status: $ret"
-	fi
 	GIT_DAEMON_PID=
-	rm -f git_daemon_output
 }
diff --git a/test-git-daemon.c b/test-git-daemon.c
new file mode 100644
index 0000000..f44fa6a
--- /dev/null
+++ b/test-git-daemon.c
@@ -0,0 +1,62 @@
+#include "git-compat-util.h"
+#include "run-command.h"
+#include "exec_cmd.h"
+#include "strbuf.h"
+#include <string.h>
+#include <errno.h>
+
+static int parse_daemon_output(char *s)
+{
+	if (*s++ != '[')
+		return 1;
+	s = strchr(s, ']');
+	if (!s)
+		return 1;
+	if (strcmp(s, "] Ready to rumble\n"))
+		return 1;
+
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	struct strbuf line = STRBUF_INIT;
+	FILE *fp;
+	struct child_process proc, cat;
+	char *cat_argv[] = { "cat", NULL };
+
+	setup_path();
+
+	memset(&proc, 0, sizeof(proc));
+	argv[0] = "git-daemon";
+	proc.argv = (const char **)argv;
+	proc.no_stdin = 1;
+	proc.err = -1;
+
+	if (start_command(&proc) < 0)
+		return 1;
+
+	strbuf_getwholeline_fd(&line, proc.err, '\n');
+	fprintf(stderr, line.buf);
+
+	memset(&cat, 0, sizeof(cat));
+	cat.argv = (const char **)cat_argv;
+	cat.in = proc.err;
+	cat.out = 2;
+
+	if (start_command(&cat) < 0)
+		return 1;
+
+	if (parse_daemon_output(line.buf)) {
+		kill(proc.pid, SIGTERM);
+		finish_command(&proc);
+		finish_command(&cat);
+		return 1;
+	}
+
+	fp = fopen("git-daemon.pid", "w");
+	fprintf(fp, "%"PRIuMAX"\n", (uintmax_t)proc.pid);
+	fclose(fp);
+
+	return 0;
+}
-- 
1.7.9.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-14 22:06   ` Clemens Buchacher
  2012-04-15 11:53     ` [PATCH v3] " Clemens Buchacher
@ 2012-04-15 17:11     ` Johannes Sixt
  2012-04-15 19:32       ` Clemens Buchacher
  1 sibling, 1 reply; 18+ messages in thread
From: Johannes Sixt @ 2012-04-15 17:11 UTC (permalink / raw)
  To: Clemens Buchacher
  Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

Am 15.04.2012 00:06, schrieb Clemens Buchacher:
> On Sat, Apr 14, 2012 at 09:36:38PM +0200, Johannes Sixt wrote:
>> Am 14.04.2012 20:29, schrieb Clemens Buchacher:
>>> +	memset(&cat, 0, sizeof(cat));
>>> +	cat.argv = (const char **)cat_argv;
>>> +	cat.in = proc.err;
>>> +	cat.out = 2;
>>
>> Useless use of cat?
> 
> I don't see how I could avoid cat here. I have to create a pipe first so
> that I can read the first line. And then I have to terminate
> test-git-daemon in order to start the tests. So I cannot continue
> reading synchronously.

OK, I got it.

But reading the first line in this way needs a few assumptions to be true:

- git-daemon does not write an incomplete line and then waits.

- git-daemon does not write more than one line, because xread() happily
reads everything it can get. Your implementation differs from the old
version because the shell's 'read' is required to read no more than one
line, i.e., to read byte-wise from the pipe until it sees the LF.

-- Hannes

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] t5570: use explicit push refspec
  2012-04-15  0:11     ` Clemens Buchacher
@ 2012-04-15 19:20       ` Junio C Hamano
  2012-04-15 19:52         ` Clemens Buchacher
  0 siblings, 1 reply; 18+ messages in thread
From: Junio C Hamano @ 2012-04-15 19:20 UTC (permalink / raw)
  To: Clemens Buchacher; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

Clemens Buchacher <drizzd@aon.at> writes:

> On Sat, Apr 14, 2012 at 04:40:01PM -0700, Junio C Hamano wrote:
>> Clemens Buchacher <drizzd@aon.at> writes:
>> 
>> > The default mode for push without arguments will change. Some warnings
>> > are about to be enabled for such use, which causes some t5570 tests to
>> > fail because they do not expect this output. Fix this by passing an
>> > explicit refspec to git push.
>> 
>> I wonder if a better fix is to configure "push.default = matching" in the
>> test repository.  Otherwise wouldn't the result of the push change once
>> the default changes?
>
> The push.default option matters only if a refspec is not specified. By
> adding a refspec, push.default should not matter any more. Unless that
> is going to change as well?

No, I was thinking more about testing cases where there is no refspec on
the command line, which we used to test, but with your patch we no longer
do.  In other words, your fix not just squelches the advice message and
make them pass, but it changes the way the command behaves, no?

Besides, that way you do not have to swap the parameters to test_remote_error
so we do not have scratch our heads wondering why we have changes to test
vectors that run clones and fetches.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-15 17:11     ` [PATCH] " Johannes Sixt
@ 2012-04-15 19:32       ` Clemens Buchacher
  2012-04-15 19:57         ` Johannes Sixt
  0 siblings, 1 reply; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-15 19:32 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

On Sun, Apr 15, 2012 at 07:11:52PM +0200, Johannes Sixt wrote:
> 
> But reading the first line in this way needs a few assumptions to be true:
> 
> - git-daemon does not write an incomplete line and then waits.

Yes. One way to avoid that assumption would be a timeout.

> - git-daemon does not write more than one line, because xread() happily
> reads everything it can get. Your implementation differs from the old
> version because the shell's 'read' is required to read no more than one
> line, i.e., to read byte-wise from the pipe until it sees the LF.

The strbuf_getwholeline_fd implementation calls xread(fd, buf, 1),
reading only one byte at a time. It does not try to read beyond the
newline.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] t5570: use explicit push refspec
  2012-04-15 19:20       ` Junio C Hamano
@ 2012-04-15 19:52         ` Clemens Buchacher
  2012-04-15 20:18           ` Junio C Hamano
  0 siblings, 1 reply; 18+ messages in thread
From: Clemens Buchacher @ 2012-04-15 19:52 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

On Sun, Apr 15, 2012 at 12:20:06PM -0700, Junio C Hamano wrote:
> Clemens Buchacher <drizzd@aon.at> writes:
> 
> > On Sat, Apr 14, 2012 at 04:40:01PM -0700, Junio C Hamano wrote:
> >> Clemens Buchacher <drizzd@aon.at> writes:
> >> 
> >> > The default mode for push without arguments will change. Some warnings
> >> > are about to be enabled for such use, which causes some t5570 tests to
> >> > fail because they do not expect this output. Fix this by passing an
> >> > explicit refspec to git push.
> >> 
> >> I wonder if a better fix is to configure "push.default = matching" in the
> >> test repository.  Otherwise wouldn't the result of the push change once
> >> the default changes?
> >
> > The push.default option matters only if a refspec is not specified. By
> > adding a refspec, push.default should not matter any more. Unless that
> > is going to change as well?
> 
> No, I was thinking more about testing cases where there is no refspec on
> the command line, which we used to test, but with your patch we no longer
> do.  In other words, your fix not just squelches the advice message and
> make them pass, but it changes the way the command behaves, no?

It does exactly the same thing it did before, since there is only one
local branch. The goal of the test is not to check behavior of git push
without arguments. Since that is subject to change, and is causing
causing the test to fail already for no good reason, I think it better
to use the more explicit version of the command.

> Besides, that way you do not have to swap the parameters to test_remote_error
> so we do not have scratch our heads wondering why we have changes to test
> vectors that run clones and fetches.

In my opinion, this change is also an improvement in itself, since now
we can more easily pass extra arguments to test_remote_error. Maybe the
scratching of heads can be alleviated by amending the commit message
like so?

-->o--
Subject: [PATCH] t5570: use explicit push refspec

The default mode for push without arguments will change. Some warnings
are about to be enabled for such use, which causes some t5570 tests to
fail because they do not expect this output.

Fix this by passing an explicit refspec to git push. To that end, change
the calling conventions of test_remote_error in order to accomodate
extra command arguments.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
---
 t/t5570-git-daemon.sh |   30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/t/t5570-git-daemon.sh b/t/t5570-git-daemon.sh
index 7cbc999..a3a4e47 100755
--- a/t/t5570-git-daemon.sh
+++ b/t/t5570-git-daemon.sh
@@ -103,14 +103,12 @@ test_remote_error()
 		esac
 	done
 
-	if test $# -ne 3
-	then
-		error "invalid number of arguments"
-	fi
-
+	msg=$1
+	shift
 	cmd=$1
-	repo=$2
-	msg=$3
+	shift
+	repo=$1
+	shift || error "invalid number of arguments"
 
 	if test -x "$GIT_DAEMON_DOCUMENT_ROOT_PATH/$repo"
 	then
@@ -122,7 +120,7 @@ test_remote_error()
 		fi
 	fi
 
-	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" 2>output &&
+	test_must_fail git "$cmd" "$GIT_DAEMON_URL/$repo" "$@" 2>output &&
 	echo "fatal: remote error: $msg: /$repo" >expect &&
 	test_cmp expect output
 	ret=$?
@@ -131,18 +129,18 @@ test_remote_error()
 }
 
 msg="access denied or repository not exported"
-test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git '$msg'"
-test_expect_success 'push disabled'      "test_remote_error    push  repo.git    '$msg'"
-test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    '$msg'"
-test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    '$msg'"
+test_expect_success 'clone non-existent' "test_remote_error    '$msg' clone nowhere.git    "
+test_expect_success 'push disabled'      "test_remote_error    '$msg' push  repo.git master"
+test_expect_success 'read access denied' "test_remote_error -x '$msg' fetch repo.git       "
+test_expect_success 'not exported'       "test_remote_error -n '$msg' fetch repo.git       "
 
 stop_git_daemon
 start_git_daemon --informative-errors
 
-test_expect_success 'clone non-existent' "test_remote_error    clone nowhere.git 'no such repository'"
-test_expect_success 'push disabled'      "test_remote_error    push  repo.git    'service not enabled'"
-test_expect_success 'read access denied' "test_remote_error -x fetch repo.git    'no such repository'"
-test_expect_success 'not exported'       "test_remote_error -n fetch repo.git    'repository not exported'"
+test_expect_success 'clone non-existent' "test_remote_error    'no such repository'      clone nowhere.git    "
+test_expect_success 'push disabled'      "test_remote_error    'service not enabled'     push  repo.git master"
+test_expect_success 'read access denied' "test_remote_error -x 'no such repository'      fetch repo.git       "
+test_expect_success 'not exported'       "test_remote_error -n 'repository not exported' fetch repo.git       "
 
 stop_git_daemon
 test_done
-- 
1.7.9.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH] git-daemon wrapper to wait until daemon is ready
  2012-04-15 19:32       ` Clemens Buchacher
@ 2012-04-15 19:57         ` Johannes Sixt
  0 siblings, 0 replies; 18+ messages in thread
From: Johannes Sixt @ 2012-04-15 19:57 UTC (permalink / raw)
  To: Clemens Buchacher
  Cc: Zbigniew Jędrzejewski-Szmek, git, gitster, Jeff King

Am 15.04.2012 21:32, schrieb Clemens Buchacher:
> The strbuf_getwholeline_fd implementation calls xread(fd, buf, 1),
> reading only one byte at a time. It does not try to read beyond the
> newline.

Point taken. I only saw "xread" and didn't look further. Sorry for the
noise. I now crawl back under my rock.

-- Hannes

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] t5570: use explicit push refspec
  2012-04-15 19:52         ` Clemens Buchacher
@ 2012-04-15 20:18           ` Junio C Hamano
  0 siblings, 0 replies; 18+ messages in thread
From: Junio C Hamano @ 2012-04-15 20:18 UTC (permalink / raw)
  To: Clemens Buchacher; +Cc: git, Jeff King, Zbigniew Jędrzejewski-Szmek

Clemens Buchacher <drizzd@aon.at> writes:

> In my opinion, this change is also an improvement in itself, since now
> we can more easily pass extra arguments to test_remote_error. Maybe the
> scratching of heads can be alleviated by amending the commit message
> like so?
>
> -->o--
> Subject: [PATCH] t5570: use explicit push refspec
>
> The default mode for push without arguments will change. Some warnings
> are about to be enabled for such use, which causes some t5570 tests to
> fail because they do not expect this output.
>
> Fix this by passing an explicit refspec to git push. To that end, change
> the calling conventions of test_remote_error in order to accomodate
> extra command arguments.
>
> Signed-off-by: Clemens Buchacher <drizzd@aon.at>

Sounds good.  Thanks.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3] git-daemon wrapper to wait until daemon is ready
  2012-04-15 11:53     ` [PATCH v3] " Clemens Buchacher
@ 2012-04-16 15:46       ` Zbigniew Jędrzejewski-Szmek
  2012-04-19 15:00       ` Junio C Hamano
  1 sibling, 0 replies; 18+ messages in thread
From: Zbigniew Jędrzejewski-Szmek @ 2012-04-16 15:46 UTC (permalink / raw)
  To: Clemens Buchacher; +Cc: Johannes Sixt, git, gitster, Jeff King

On 04/15/2012 01:53 PM, Clemens Buchacher wrote:
> The shell script which is currently used to parse git daemon output does
> not seem to work reliably. In order to work around such issues,
> re-implement the same procedure in C and write the daemon pid to a file.
>
> This means that we can no longer wait on the daemon process, since it is
> no longer a direct child of the shell process.
>
> Signed-off-by: Clemens Buchacher<drizzd@aon.at>
> ---

> Here's the re-roll for completeness. Still waiting on feedback from the
> OP if this actually solves the problem, though.
I posted a reply in the other thread, but I'm replying here too for 
completeness: yes, the problem is solved.

Thanks,
Zbyszek

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3] git-daemon wrapper to wait until daemon is ready
  2012-04-15 11:53     ` [PATCH v3] " Clemens Buchacher
  2012-04-16 15:46       ` Zbigniew Jędrzejewski-Szmek
@ 2012-04-19 15:00       ` Junio C Hamano
  1 sibling, 0 replies; 18+ messages in thread
From: Junio C Hamano @ 2012-04-19 15:00 UTC (permalink / raw)
  To: Clemens Buchacher
  Cc: Johannes Sixt, Zbigniew Jędrzejewski-Szmek, git, Jeff King

2012/4/15 Clemens Buchacher <drizzd@aon.at>
>
> The shell script which is currently used to parse git daemon output does
> not seem to work reliably. In order to work around such issues,
> re-implement the same procedure in C and write the daemon pid to a file.
> ...
> +       strbuf_getwholeline_fd(&line, proc.err, '\n');
> +       fprintf(stderr, line.buf);

Just a note. I'll update this part with "fputs(line.buf, stderr)".

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2012-04-19 15:00 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-14 18:29 [PATCH] git-daemon wrapper to wait until daemon is ready Clemens Buchacher
2012-04-14 18:32 ` [PATCH] t5570: use explicit push refspec Clemens Buchacher
2012-04-14 23:40   ` Junio C Hamano
2012-04-15  0:11     ` Clemens Buchacher
2012-04-15 19:20       ` Junio C Hamano
2012-04-15 19:52         ` Clemens Buchacher
2012-04-15 20:18           ` Junio C Hamano
2012-04-14 18:43 ` [PATCH] git-daemon wrapper to wait until daemon is ready Ben Walton
2012-04-14 19:00   ` Clemens Buchacher
2012-04-14 19:16     ` [PATCH v2] " Clemens Buchacher
2012-04-14 19:36 ` [PATCH] " Johannes Sixt
2012-04-14 22:06   ` Clemens Buchacher
2012-04-15 11:53     ` [PATCH v3] " Clemens Buchacher
2012-04-16 15:46       ` Zbigniew Jędrzejewski-Szmek
2012-04-19 15:00       ` Junio C Hamano
2012-04-15 17:11     ` [PATCH] " Johannes Sixt
2012-04-15 19:32       ` Clemens Buchacher
2012-04-15 19:57         ` Johannes Sixt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.