[BUG RFC/PATCH] git-cvsimport

Subsystems: the rest

4 messages, 3 authors, 2016-06-15 · open the first message on its own page

[BUG RFC/PATCH] git-cvsimport

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2016-06-15 22:49:19

This is more of a BUG than a RFC/PATCH.

Now that Junio has applied my patch to not write test results under
harness I can:

    sudo chown -R root t

And run the tests with --root=/dev/shm under prove, except for 3
git-cvsimport tests. I have pending patches to these, after they'll
get in I'll fix that.

But the reason they hang is interesting:

    rm -rf /tmp/meh;
    git init /tmp/meh &&
    cd /tmp/meh &&
    sudo chown -R root /home/avar/g/git/t/t9601/cvsroot &&
    cvsps --norc -q --cvs-direct -u -A --root
/home/avar/g/git/t/t9601/cvsroot module
    Initialized empty Git repository in /tmp/meh/.git/

cvsps will just hang due to the unfriendly chmod. Maybe we want
something like the below to deal with that.

However, even then it'll still hang on something else, I haven't
looked into what. I'm just going to fix this by having it copy the
things it needs to the --root directory.

 git-cvsimport.perl |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index 9e03eee..1a93fb4 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -688,8 +688,25 @@ unless ($opt_P) {
        }
        ($cvspsfh, $cvspsfile) = tempfile('gitXXXXXX', SUFFIX => '.cvsps',
                                          DIR => File::Spec->tmpdir());
-       while (<CVSPS>) {
-           print $cvspsfh $_;
+       # Alarm because "cvsps --norc -q --cvs-direct -u -A --root
+       # /home/avar/g/git/t/t9601/cvsroot module" will hang forever if
+       # the "t9601/cvsroot" directory isn't writable by us.
+       {
+               my $got_input;
+               my $start = time;
+               local $SIG{ALRM} = sub {
+                       unless ($got_input) {
+                               die sprintf "cvsps left us hanging for
%d seconds, do you have permission to write to %s?",
+                                   time() - $start,
+                                   $opt_d;
+                       }
+               };
+               alarm 10;
+               while (<CVSPS>) {
+                       $got_input = 1;
+                       print $cvspsfh $_;
+               }
+               alarm 0;
        }
        close CVSPS;
        $? == 0 or die "git cvsimport: fatal: cvsps reported error\n";

Re: [BUG RFC/PATCH] git-cvsimport

From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:49:19

Ævar Arnfjörð Bjarmason wrote:
cvsps will just hang due to the unfriendly chmod.
Could this be fixed in cvsps[1]?

(Afterwards, it might still make sense to look into workarounds, of
course.)

[1] http://ydirson.free.fr/en/software/scm/cvsps.html

Re: [BUG RFC/PATCH] git-cvsimport

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2016-06-15 22:49:19

On Sat, Aug 14, 2010 at 21:09, Jonathan Nieder [off-list ref] wrote:
Ævar Arnfjörð Bjarmason wrote:
quoted
cvsps will just hang due to the unfriendly chmod.
Could this be fixed in cvsps[1]?
Maybe, but that's a hairy beast I'm not going to tackle :)

The main intent was actually just to get this into the collective
memory of the list archive, this sort of thing probably never happens
in the wild, and the added alarm/die complexity of dealing with it
probably isn't worth the effort.

I'm going to fix up the test though, once Junio merges my other
patches, which would conflict with this.

Re: [BUG RFC/PATCH] git-cvsimport

From: Michael Haggerty <hidden>
Date: 2016-06-15 22:49:19

Ævar Arnfjörð Bjarmason wrote:
This is more of a BUG than a RFC/PATCH.

Now that Junio has applied my patch to not write test results under
harness I can:

    sudo chown -R root t

And run the tests with --root=/dev/shm under prove, except for 3
git-cvsimport tests. I have pending patches to these, after they'll
get in I'll fix that.

But the reason they hang is interesting:

    rm -rf /tmp/meh;
    git init /tmp/meh &&
    cd /tmp/meh &&
    sudo chown -R root /home/avar/g/git/t/t9601/cvsroot &&
    cvsps --norc -q --cvs-direct -u -A --root
/home/avar/g/git/t/t9601/cvsroot module
    Initialized empty Git repository in /tmp/meh/.git/

cvsps will just hang due to the unfriendly chmod. Maybe we want
something like the below to deal with that.

However, even then it'll still hang on something else, I haven't
looked into what. I'm just going to fix this by having it copy the
things it needs to the --root directory.
My guess is that cvsps is using CVS commands to access the test CVS
repository, and that CVS wants to write to the file CVSROOT/history to
log what is being done.  The logging behavior can be turned off either:

* by using the "-R" option when invoking CVS.  This is a global option,
meaning that it has to appear before the subcommand: "cvs -R update"
rather than "cvs update -R".

* by setting the "$CVSREADONLYFS" environment variable.

Apparently -R and "$CVSREADONLYFS" were added in CVS 1.12.1, which was
released in 2003.

Michael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help