git cvsimport fails noisily if cvs has no server support
Hello list!
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).
jlh
$ git-cvsimport -a -z 0 -C module-git module Unknown command: `server'
CVS commands are:
add Add a new file/directory to the repository
admin Administration front end for rcs
[...26 lines omitted...]
watch Set watches
watchers See who is watching a file
(Specify the --help option for a list of other help options)
Use of uninitialized value in scalar chomp at /home/jlh/cvs/git/t/../git-cvsimport line 345. Use of uninitialized value in substitution (s///) at /home/jlh/cvs/git/t/../git-cvsimport line 346. Expected Valid-requests from server, but got: <unknown>
$
söndagen den 3 februari 2008 skrev Jean-Luc Herren:
Quoted 10 lines
Hello list!
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).
Quoted 3 lines
jlh
$ git-cvsimport -a -z 0 -C module-git module
I'm guessing now, but try -Z '--cvs-direct'.
-- robin
PATCH 1/1 git-cvsimport: Detect cvs without support for server mode
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.
---
Quoted 9 lines · Robin Rosenberg
söndagen den 3 februari 2008 skrev Jean-Luc Herren:
Quoted 8 lines
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).
Quoted 3 lines
Quoted 1 line
$ git-cvsimport -a -z 0 -C module-git moduleI'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(-)
git-cvsimport.perl +9 -2
@@ -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";
t/t9600-cvsimport.sh +7 -0
@@ -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)
Signature · 1 line
1.5.3.8
Re: [PATCH] git-cvsimport: Detect cvs without support for server mode
Quoted 9 lines · Jean-Luc Herren
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/nullis 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.
...
git-cvsimport.perl sub conn { · line 350
Quoted 9 lines
git-cvsimport.perl +5
-1@@ -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;
I guess this is probably the best we can do without bending backwards too much.
If we do not have cvs with server support, is there a fallback method we can still use to run cvsps?
Quoted 5 lines
t/t9600-cvsimport.sh +0
-0
t/t9600-cvsimport.sh then · line 18
Quoted 9 lines
t/t9600-cvsimport.sh +6
-0@@ -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
Do you mean "has to support server" or "does not have support for"?
Re: [PATCH] git-cvsimport: Detect cvs without support for server mode
Quoted 2 lines · Junio C Hamano
If we do not have cvs with server support, is there a fallback method we can still use to run cvsps?
I have no idea, I haven't looked at cvsps closely enough.
Quoted 9 lines
Quoted 8 lines · Jean-Luc Herren
t/t9600-cvsimport.sh +0
-0@@ -10,6 +10,13 @@ then exit fi
Quoted 8 lines
t/t9600-cvsimport.sh then · line 18
Quoted 6 lines
t/t9600-cvsimport.sh +6
-0+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 +fiDo you mean "has to support server" or "does not have support for"?
I meant to say "cvs has no support for server mode", but I think "doesn't have support for" is better.
jlh