kolize IOException s Phingem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
filda
Člen | 8
+
0
-

Ahoj,
začli jsme používat Phing na buildování s pouštění testů, když spouštím testy ošklivým způsobem:

 <exec command="phpunit ... ... />

tak to sice funguje ale přicházím o jisté výhody. Zádrhel nastává když je chci spouštět hezkým způsobem:

 <phpunit codecoverage="true" haltonerror="true">
 ...
 ...
 </phpunit>

V tuhle chvíli dojde k chybě:
PHP Fatal error: Cannot redeclare class IOException in /lib/Nette/exceptions.php on line 121

a to proto, že testy jsou takhle pouštěny v kontextu Phingu a ten má naneštěstí definovanou výjimku(výjimky, našel jsem ještě FileNotFoundException) stejnýho jména.

Přikládám i stacktrace

    PHP Fatal error:  Cannot redeclare class IOException in /var/lib/hudson/jobs/project/workspace/lib/Nette/exceptions.php on line 121
    PHP Stack trace:
    PHP   1. {main}() /usr/share/pear/phing.php:0
    PHP   2. Phing::fire() /usr/share/pear/phing.php:37
    PHP   3. Phing::start() /usr/share/pear/phing/Phing.php:270
    PHP   4. Phing->runBuild() /usr/share/pear/phing/Phing.php:170
    PHP   5. Project->executeTargets() /usr/share/pear/phing/Phing.php:543
    PHP   6. Project->executeTarget() /usr/share/pear/phing/Project.php:689
    PHP   7. Target->performTasks() /usr/share/pear/phing/Project.php:716
    PHP   8. Target->main() /usr/share/pear/phing/Target.php:263
    PHP   9. Task->perform() /usr/share/pear/phing/Target.php:240
    PHP  10. PHPUnitTask->main() /usr/share/pear/phing/Task.php:253
    PHP  11. BatchTest->getTestSuite() /usr/share/pear/phing/tasks/ext/phpunit/PHPUnitTask.php:254
    PHP  12. BatchTest->elements() /usr/share/pear/phing/tasks/ext/phpunit/BatchTest.php:198
    PHP  13. PHPUnitUtil::getDefinedClasses() /usr/share/pear/phing/tasks/ext/phpunit/BatchTest.php:175
    PHP  14. Phing::__import() /usr/share/pear/phing/tasks/ext/phpunit/PHPUnitUtil.php:95
    PHP  15. include_once() /usr/share/pear/phing/Phing.php:1017
    PHP  16. require_once() /var/lib/hudson/jobs/project/workspace/_tests/phpUnit/AllTests.php:19
    PHP  17. require_once() /var/lib/hudson/jobs/project/workspace/_tests/phpUnit/Perseus_TestCase.php:17
    PHP  18. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/loader.php:22
    PHP  19. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/Loaders/NetteLoader.php:22
    PHP  20. require_once() /var/lib/hudson/jobs/project/workspace/lib/Nette/Loaders/AutoLoader.php:22

Nemáte někdo ponětí jak tuhle situaci vyřešit?

David Grudl
Nette Core | 8282
+
0
-

Zakomentováním definic výjimek v /lib/Nette/exceptions.php?

Tohle se blbě řeší. Na jednu stranu by Nette mohlo globální výjimky definovat jen podmíněně, pokud ještě neexistují, ale může snadno dojít k chybám při zpracování, protože třeba taková FileNotFoundException ma jiné rodiče v Nette a v Phing.

Druhou možností je výjimky prefixovat a zařadit do jmenného prostoru, případně i jejich počet redukovat. Nevyřeší to samozřejmě problém u verze PHP 5.2 neprefixované.

filda
Člen | 8
+
0
-

V první chvíli mě taky napadlo definovat je podmíněně jako je to třeba v dibi, ale právě rozdílnej předek mě od toho odrazuje.

Sice používáme prefixovanou verzi, ale nedávno jsme přešli na 5.3 takže tady by problém nebyl. Jenom se zeptám jestli je nějakej důvod k tomu aby Nette výjimky nebyly ve jmenným prostoru Nette. Kromě toho, že jsou pojmenovaný tak univerzálně, že tam vlastně bejt nemusí. I když kvůli tý univerzálnosti dochází k tomuhle problému.

v6ak
Člen | 206
+
0
-

Co takhle přidat verzi s namespacovanýma i těmito výjimkama? Jasně, znamenalo by to i použít příslušnou verzi dibi a dalších knihoven. Ale problém by to IMHO řešilo. Největší problém by pak ale byl s ostatníma knihovnama.

filda
Člen | 8
+
0
-

ona to asi ve finále vyřeší 3. verze Phingu která bude (údajně) podporovat namespacy. Ale kdy ta bude, to je ve hvězdách

v6ak
Člen | 206
+
0
-

DG: A co na to Nette 1.0?