git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jean-Luc Herren <jlh@gmx.ch>
To: Robin Rosenberg <robin.rosenberg.lists@dewire.com>, git@vger.kernel.org
Subject: [PATCH] git-cvsimport: Detect cvs without support for server mode
Date: Mon, 04 Feb 2008 16:27:33 +0100	[thread overview]
Message-ID: <47A72EE5.2080904@gmx.ch> (raw)
In-Reply-To: <200802031908.28115.robin.rosenberg.lists@dewire.com>

git-cvsimport now exits less noisily and prints an appropriate
message when the installed cvs binary doesn't know the 'server'
subcommand; this happens when cvs is ./configure'ed with
--disable-server.  The test t9600-cvsimport.sh now also tests for
this and skips instead of failing.

Signed-off-by: Jean-Luc Herren <jlh@gmx.ch>
---

Robin Rosenberg wrote:
> söndagen den 3 februari 2008 skrev Jean-Luc Herren:
>> cvs (1.12.12) can be compiled with --disable-server to omit
>> support for cvs servers.  Although this is not ./configure's
>> default, it was the default on my distro (gentoo).  git-cvsimport
>> fails loudly as pasted below (note that this command is part of
>> the test t9600-cvsimport.sh).  Nicer behavior would of course be
>> to detect the situation and inform the user that server support is
>> missing (and to skip the test).
>>
>> $ git-cvsimport -a -z 0 -C module-git module
> 
> I'm guessing now, but try -Z '--cvs-direct'.

git-cvsimport doesn't have a -Z option, maybe you meant "-p
--cvs-direct" to pass --cvs-direct to cvsps.  However this is not
a problem with cvsps, it's about cvs not knowing the server
subcommand, which is required when specifying a cvsroot that is a
local path.

Note that if cvs misses the server subcommand, it will spit out
the list of available commands to stderr, which is not useful in
this situation.  It seemed to me that redirecting stderr to
/dev/null is a bad idea, as cvs (when it works properly) might
potentially print out useful informations to stderr.  Maybe
someone has an idea about how to eliminate the help message
properly.

jlh

 git-cvsimport.perl   |   11 +++++++++--
 t/t9600-cvsimport.sh |    7 +++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 5694978..e1bcf0e 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -207,6 +207,7 @@ sub new {
 sub conn {
 	my $self = shift;
 	my $repo = $self->{'fullrep'};
+	my $ownserver;
 	if ($repo =~ s/^:pserver(?:([^:]*)):(?:(.*?)(?::(.*?))?@)?([^:\/]*)(?::(\d*))?//) {
 		my ($param,$user,$pass,$serv,$port) = ($1,$2,$3,$4,$5);
 
@@ -285,6 +286,7 @@ sub conn {
 		$s->flush();
 
 		$rep = <$s>;
+		die "Remote end hung up unexpectedly" unless defined $rep;
 
 		if ($rep ne "I LOVE YOU\n") {
 			$rep="<unknown>" unless $rep;
@@ -293,6 +295,7 @@ sub conn {
 		$self->{'socketo'} = $s;
 		$self->{'socketi'} = $s;
 	} else { # local or ext: Fork off our own cvs server.
+		$ownserver = 1;
 		my $pr = IO::Pipe->new();
 		my $pw = IO::Pipe->new();
 		my $pid = fork();
@@ -325,7 +328,7 @@ sub conn {
 			dup2($pr->fileno(),1);
 			$pr->close();
 			$pw->close();
-			exec(@cvs);
+			exec(@cvs) or exit 1;
 		}
 		$pw->writer();
 		$pr->reader();
@@ -340,7 +343,11 @@ sub conn {
 	$self->{'socketo'}->write("valid-requests\n");
 	$self->{'socketo'}->flush();
 
-	chomp(my $rep=$self->readline());
+	my $rep=$self->readline();
+	if (!defined $rep) {
+		die $ownserver ? "'cvs server' failed; make sure you have a cvs with server support" : "Remote end hung up unexpectedly";
+	}
+	chomp $rep;
 	if ($rep !~ s/^Valid-requests\s*//) {
 		$rep="<unknown>" unless $rep;
 		die "Expected Valid-requests from server, but got: $rep\n";
diff --git a/t/t9600-cvsimport.sh b/t/t9600-cvsimport.sh
index 7706430..d8cbfd0 100755
--- a/t/t9600-cvsimport.sh
+++ b/t/t9600-cvsimport.sh
@@ -10,6 +10,13 @@ then
 	exit
 fi
 
+if echo -n | cvs server 2>&1 | grep 'Unknown command' > /dev/null
+then
+	say 'skipping cvsimport tests, cvs has support for server mode'
+	test_done
+	exit
+fi
+
 cvsps_version=`cvsps -h 2>&1 | sed -ne 's/cvsps version //p'`
 case "$cvsps_version" in
 2.1)
-- 
1.5.3.8

  reply	other threads:[~2008-02-04 15:28 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-03 15:28 git cvsimport fails noisily if cvs has no server support Jean-Luc Herren
2008-02-03 18:08 ` Robin Rosenberg
2008-02-04 15:27   ` Jean-Luc Herren [this message]
2008-02-05  9:08     ` [PATCH] git-cvsimport: Detect cvs without support for server mode Junio C Hamano
2008-02-05 13:03       ` Jean-Luc Herren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=47A72EE5.2080904@gmx.ch \
    --to=jlh@gmx.ch \
    --cc=git@vger.kernel.org \
    --cc=robin.rosenberg.lists@dewire.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).