[Rake-devel] Fix for infinite loop bug
Lionel Thiry
lthiry at skynet.be
Mon May 2 13:39:20 EDT 2005
Daniel Berger a écrit :
> Hi all,
> The failure you see occurs with or without this change, so it's
> unrelated. The test in question is:
>
> assert t.prerequisites.is_a?(FileList)
>
> I haven't provided any test cases yet because it appears there are still
> other places where rake.rb goes into an infinite loop (running
> testtasks.rb confirms this). I think it's coming from
> create_timed_files atm.
>
> I'll patch 'em as I see 'em.
>
> Regards,
>
> Dan
Found it!
In test/filecreation.rb, at line 19, it is:
File.new(name).mtime
Replace it with:
File.stat(name).mtime
And there is no more loop.
Explanation (AFAIK):
File.new(name) creates a IO object that isn't closed just after requiring mtime.
It will be closed when the garbarge collector collects it, as explained here
http://www.ruby-doc.org/core/classes/IO.html#M001187 . But until then, further
IO manipulation are impossible, hence all the permission denied in the
create_timed_files loop.
I've put in attachment the output of the now working unittest. A lot of tests
still fails on my computer (win2k), but it doesn't loop anymore.
--
Lionel Thiry
Personal website: http://users.skynet.be/lthiry/
-------------- next part --------------
C:\usr\ruby\lib\ruby\gems\1.8\gems\rake-0.5.4> rake
(in C:/usr/ruby/lib/ruby/gems/1.8/gems/rake-0.5.4)
UNABLE TO RUN FUNCTIONAL TESTS
No Session Found
Loaded suite c:/usr/ruby/lib/ruby/gems/1.8/gems/rake-0.5.4/lib/rake/rake_test_loader
Started
EEEEEEEEEEEE......EE........................................EEEE....-e:1:in `exit': no implicit conversion from nil to integer (TypeError)
from -e:1
FE.EF.......E....EEEEEEEEEEEE...............
Finished in 0.671 seconds.
1) Error:
test_dry_run(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/default
./test/functional.rb:77:in `chdir'
./test/functional.rb:77:in `test_dry_run'
2) Error:
test_dry_run_bug(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/dryrun
./test/functional.rb:86:in `chdir'
./test/functional.rb:86:in `test_dry_run_bug'
3) Error:
test_env_availabe_at_task_scope(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/default
./test/functional.rb:54:in `chdir'
./test/functional.rb:54:in `test_env_availabe_at_task_scope'
4) Error:
test_env_availabe_at_top_scope(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/default
./test/functional.rb:48:in `chdir'
./test/functional.rb:48:in `test_env_availabe_at_top_scope'
5) Error:
test_imports(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/imports
./test/functional.rb:104:in `chdir'
./test/functional.rb:104:in `test_imports'
6) Error:
test_multi_desc(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/multidesc
./test/functional.rb:60:in `chdir'
./test/functional.rb:60:in `test_multi_desc'
7) Error:
test_nosearch(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/nosearch
./test/functional.rb:72:in `chdir'
./test/functional.rb:72:in `test_nosearch'
8) Error:
test_rake_default(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/default
./test/functional.rb:36:in `chdir'
./test/functional.rb:36:in `test_rake_default'
9) Error:
test_rake_error_on_bad_task(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/default
./test/functional.rb:42:in `chdir'
./test/functional.rb:42:in `test_rake_error_on_bad_task'
10) Error:
test_rbext(FunctionalTest):
NameError: uninitialized constant Session::Shell
./test/functional.rb:125:in `rake'
./test/functional.rb:67:in `test_rbext'
./test/functional.rb:67:in `chdir'
./test/functional.rb:67:in `test_rbext'
11) Error:
test_rules_chaining_to_file_task(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/chains
./test/functional.rb:115:in `chdir'
./test/functional.rb:115:in `test_rules_chaining_to_file_task'
12) Error:
test_trace_bug(FunctionalTest):
Errno::ENOENT: No such file or directory - test/data/dryrun
./test/functional.rb:95:in `chdir'
./test/functional.rb:95:in `test_trace_bug'
13) Error:
test_directory(TestDirectoryTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:710:in `remove_dir'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:702:in `foreach'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:702:in `remove_dir'
./lib/rake.rb:558:in `remove_dir'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:663:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:679:in `rm_rf'
./lib/rake.rb:563:in `rm_rf'
./lib/rake.rb:558:in `rm_rf'
./test/testtasks.rb:158:in `setup'
14) Error:
test_directory(TestDirectoryTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:710:in `remove_dir'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:702:in `foreach'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:702:in `remove_dir'
./lib/rake.rb:558:in `remove_dir'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:663:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:679:in `rm_rf'
./lib/rake.rb:563:in `rm_rf'
./lib/rake.rb:558:in `rm_rf'
./test/testtasks.rb:162:in `teardown'
15) Error:
test_file_depends_on_task_depend_on_file(TestFileTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:618:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:634:in `rm_f'
./test/testtasks.rb:83:in `setup'
16) Error:
test_file_need(TestFileTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:618:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:634:in `rm_f'
./test/testtasks.rb:83:in `setup'
17) Error:
test_file_times_new_depends_on_old(TestFileTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:618:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:634:in `rm_f'
./test/testtasks.rb:83:in `setup'
18) Error:
test_file_times_old_depends_on_new(TestFileTask):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:618:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:617:in `rm'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:634:in `rm_f'
./test/testtasks.rb:83:in `setup'
19) Failure:
test_ruby(TestFileUtils)
[./test/testfileutils.rb:101:in `test_ruby'
./test/testfileutils.rb:99:in `call'
./lib/rake.rb:492:in `sh'
./lib/rake.rb:563:in `sh'
./lib/rake.rb:558:in `sh'
./lib/rake.rb:510:in `ruby'
./lib/rake.rb:563:in `ruby'
./lib/rake.rb:558:in `ruby'
./test/testfileutils.rb:99:in `test_ruby'
./test/testfileutils.rb:95:in `verbose'
./test/testfileutils.rb:95:in `test_ruby']:
<123> expected but was
<1>.
20) Error:
test_sh(TestFileUtils):
RuntimeError: Command failed with status (1): [test/shellcommand.rb]
./lib/rake.rb:485:in `sh'
./lib/rake.rb:484:in `call'
./lib/rake.rb:492:in `sh'
./lib/rake.rb:563:in `sh'
./lib/rake.rb:558:in `sh'
./test/testfileutils.rb:56:in `test_sh'
./test/testfileutils.rb:56:in `verbose'
./test/testfileutils.rb:56:in `test_sh'
21) Error:
test_sh_multiple_arguments(TestFileUtils):
RuntimeError: Command failed with status (1): [test $RAKE_TEST_SH = someval]
./lib/rake.rb:485:in `sh'
./lib/rake.rb:484:in `call'
./lib/rake.rb:492:in `sh'
./lib/rake.rb:563:in `sh'
./lib/rake.rb:558:in `sh'
./test/testfileutils.rb:63:in `test_sh_multiple_arguments'
./test/testfileutils.rb:63:in `verbose'
./test/testfileutils.rb:63:in `test_sh_multiple_arguments'
22) Failure:
test_sh_special_handling(TestFileUtils)
[./test/testfileutils.rb:81:in `test_sh_special_handling'
./test/testfileutils.rb:80:in `call'
./lib/rake.rb:492:in `sh'
./lib/rake.rb:563:in `sh'
./lib/rake.rb:558:in `sh'
./test/testfileutils.rb:80:in `test_sh_special_handling'
./test/testfileutils.rb:79:in `verbose'
./test/testfileutils.rb:79:in `test_sh_special_handling']:
<false> is not true.
23) Error:
test_create(TestMakefileLoader):
Errno::ENOENT: No such file or directory - test/data/sample.mf
./lib/rake/loaders/makefile.rb:11:in `initialize'
./lib/rake/loaders/makefile.rb:11:in `open'
./lib/rake/loaders/makefile.rb:11:in `load'
./test/test_makefile_loader.rb:11:in `test_create'
24) Error:
test_create_by_string(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
25) Error:
test_create_with_source(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
26) Error:
test_multiple_rules1(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
27) Error:
test_multiple_rules2(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
28) Error:
test_precedence_rule_vs_implicit(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
29) Error:
test_proc_dependent(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
30) Error:
test_recursive_overflow(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
31) Error:
test_recursive_rules(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
32) Error:
test_rule_and_no_action_task(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
33) Error:
test_single_dependent(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
34) Error:
test_string_close_matches(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
35) Error:
test_too_many_dependents(TestRules):
Errno::EACCES: Permission denied - testdata/new
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `unlink'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:687:in `remove_file'
./lib/rake.rb:558:in `remove_file'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:664:in `rm_r'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `each'
c:/usr/ruby/lib/ruby/1.8/fileutils.rb:655:in `rm_r'
./lib/rake.rb:563:in `rm_r'
./lib/rake.rb:558:in `rm_r'
./test/testtasks.rb:271:in `teardown'
./test/testtasks.rb:271:in `each'
./lib/rake.rb:750:in `send'
./lib/rake.rb:750:in `each'
./test/testtasks.rb:271:in `teardown'
111 tests, 296 assertions, 2 failures, 33 errors
rake aborted!
Command failed with status (1): [ruby -Ilib -w "c:/usr/ruby/lib/ruby/gems/1...]
Process rake exited with code 1
C:\usr\ruby\lib\ruby\gems\1.8\gems\rake-0.5.4>
More information about the Rake-devel
mailing list