diff --git a/Dockerfile b/Dockerfile index dc11af9..6ac108c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,3 +40,33 @@ RUN cd ${PHP_BUILD_DIR}/shadow && \ # Run tests for the PHP extension RUN cd ${PHP_BUILD_DIR}/shadow && \ php run-tests.php --show-diff . + +# Create a directory for the iterator test script +RUN mkdir -p ${PHP_BUILD_DIR}/shadow/test_iterator + +# Create the iterator test script +RUN cat <<'EOF' > ${PHP_BUILD_DIR}/shadow/test_iterator/test.php +getPathname() . PHP_EOL; +} + +// Clean up the dummy directory structure +unlink('test_dir/subdir1/file2.txt'); +rmdir('test_dir/subdir1'); +unlink('test_dir/file1.txt'); +rmdir('test_dir'); +?> +EOF + +# Run the iterator test script +RUN cd ${PHP_BUILD_DIR}/shadow/test_iterator && php test.php diff --git a/exists.phpt.stderr.log b/exists.phpt.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/exists.phpt.stdout.log b/exists.phpt.stdout.log new file mode 100644 index 0000000..cd097f6 --- /dev/null +++ b/exists.phpt.stdout.log @@ -0,0 +1,21 @@ +--TEST-- +Check file_exists +--SKIPIF-- +--FILE-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(false) +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(false) diff --git a/glob.phpt.stderr.log b/glob.phpt.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/glob.phpt.stdout.log b/glob.phpt.stdout.log new file mode 100644 index 0000000..5c66107 --- /dev/null +++ b/glob.phpt.stdout.log @@ -0,0 +1,173 @@ +--TEST-- +Check globs +--SKIPIF-- +--FILE-- +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} +--EXPECT-- +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} diff --git a/glob_run_tests_output.txt b/glob_run_tests_output.txt new file mode 100644 index 0000000..f643404 --- /dev/null +++ b/glob_run_tests_output.txt @@ -0,0 +1,30 @@ + +===================================================================== +PHP : /usr/bin/php +PHP_SAPI : cli +PHP_VERSION : 8.3.6 +ZEND_VERSION: 4.3.6 +PHP_OS : Linux - Linux devbox 6.8.0 #1 SMP PREEMPT_DYNAMIC Thu Jun 5 17:01:56 UTC 2025 x86_64 +INI actual : /etc/php/8.3/cli/php.ini +More .INIs : /etc/php/8.3/cli/conf.d/10-opcache.ini,/etc/php/8.3/cli/conf.d/10-pdo.ini,/etc/php/8.3/cli/conf.d/15-xml.ini,/etc/php/8.3/cli/conf.d/20-calendar.ini,/etc/php/8.3/cli/conf.d/20-ctype.ini,/etc/php/8.3/cli/conf.d/20-dom.ini,/etc/php/8.3/cli/conf.d/20-exif.ini,/etc/php/8.3/cli/conf.d/20-ffi.ini,/etc/php/8.3/cli/conf.d/20-fileinfo.ini,/etc/php/8.3/cli/conf.d/20-ftp.ini,/etc/php/8.3/cli/conf.d/20-gettext.ini,/etc/php/8.3/cli/conf.d/20-iconv.ini,/etc/php/8.3/cli/conf.d/20-phar.ini,/etc/php/8.3/cli/conf.d/20-posix.ini,/etc/php/8.3/cli/conf.d/20-readline.ini,/etc/php/8.3/cli/conf.d/20-shmop.ini,/etc/php/8.3/cli/conf.d/20-simplexml.ini,/etc/php/8.3/cli/conf.d/20-sockets.ini,/etc/php/8.3/cli/conf.d/20-sysvmsg.ini,/etc/php/8.3/cli/conf.d/20-sysvsem.ini,/etc/php/8.3/cli/conf.d/20-sysvshm.ini,/etc/php/8.3/cli/conf.d/20-tokenizer.ini,/etc/php/8.3/cli/conf.d/20-xmlreader.ini,/etc/php/8.3/cli/conf.d/20-xmlwriter.ini,/etc/php/8.3/cli/conf.d/20-xsl.ini,/etc/php/8.3/cli/conf.d/50-shadow.ini +CWD : /app +Extra dirs : +VALGRIND : Not used +===================================================================== +Running selected tests. +TEST 1/1 [tests/glob.phpt] FAIL Check globs [tests/glob.phpt] +===================================================================== +Number of tests : 1 1 +Tests skipped : 0 ( 0.0%) -------- +Tests warned : 0 ( 0.0%) ( 0.0%) +Tests failed : 1 (100.0%) (100.0%) +Tests passed : 0 ( 0.0%) ( 0.0%) +--------------------------------------------------------------------- +Time taken : 0 seconds +===================================================================== + +===================================================================== +FAILED TEST SUMMARY +--------------------------------------------------------------------- +Check globs [tests/glob.phpt] +===================================================================== diff --git a/glob_run_tests_summary.log b/glob_run_tests_summary.log new file mode 100644 index 0000000..c1cc549 --- /dev/null +++ b/glob_run_tests_summary.log @@ -0,0 +1,190 @@ + +===================================================================== +PHP : /usr/bin/php +PHP_SAPI : cli +PHP_VERSION : 8.3.6 +ZEND_VERSION: 4.3.6 +PHP_OS : Linux - Linux devbox 6.8.0 #1 SMP PREEMPT_DYNAMIC Thu Jun 5 17:01:56 UTC 2025 x86_64 +INI actual : /etc/php/8.3/cli/php.ini +More .INIs : /etc/php/8.3/cli/conf.d/10-opcache.ini,/etc/php/8.3/cli/conf.d/10-pdo.ini,/etc/php/8.3/cli/conf.d/15-xml.ini,/etc/php/8.3/cli/conf.d/20-calendar.ini,/etc/php/8.3/cli/conf.d/20-ctype.ini,/etc/php/8.3/cli/conf.d/20-dom.ini,/etc/php/8.3/cli/conf.d/20-exif.ini,/etc/php/8.3/cli/conf.d/20-ffi.ini,/etc/php/8.3/cli/conf.d/20-fileinfo.ini,/etc/php/8.3/cli/conf.d/20-ftp.ini,/etc/php/8.3/cli/conf.d/20-gettext.ini,/etc/php/8.3/cli/conf.d/20-iconv.ini,/etc/php/8.3/cli/conf.d/20-phar.ini,/etc/php/8.3/cli/conf.d/20-posix.ini,/etc/php/8.3/cli/conf.d/20-readline.ini,/etc/php/8.3/cli/conf.d/20-shmop.ini,/etc/php/8.3/cli/conf.d/20-simplexml.ini,/etc/php/8.3/cli/conf.d/20-sockets.ini,/etc/php/8.3/cli/conf.d/20-sysvmsg.ini,/etc/php/8.3/cli/conf.d/20-sysvsem.ini,/etc/php/8.3/cli/conf.d/20-sysvshm.ini,/etc/php/8.3/cli/conf.d/20-tokenizer.ini,/etc/php/8.3/cli/conf.d/20-xmlreader.ini,/etc/php/8.3/cli/conf.d/20-xmlwriter.ini,/etc/php/8.3/cli/conf.d/20-xsl.ini,/etc/php/8.3/cli/conf.d/50-shadow.ini +CWD : /app +Extra dirs : +VALGRIND : Not used +===================================================================== +Running selected tests. +TEST 1/1 [tests/glob.phpt] +========DIFF======== +001- array(3) { +001+ Resolve: setup.inc -> /app/tests/setup.inc +002+ Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +003+ Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +004+ Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +005+ T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +006+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +007+ T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +008+ T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +009+ Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +010+ Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +011+ array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> +017+ string(16) "txt/sometext.txt" +018+ [3]=> + string(13) "txt/tfile.txt" + } +009- array(3) { +021+ T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +022+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +023+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +024+ T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +025+ Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +026+ Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +027+ array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> +033+ string(16) "txt/sometext.txt" +034+ [3]=> + string(13) "txt/tfile.txt" + } +037+ T2I_REFACTOR: ENTER 'templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +038+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +039+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +040+ T2I_REFACTOR: EXIT for 'templdir', returning '/app/tests/fixtures/templatedir/templdir' +041+ Glob: templdir/* => templdir (/app/tests/fixtures/templatedir/templdir) +042+ Globbing merge: /app/tests/fixtures/templatedir/templdir/* /app/tests/fixtures/templatedir/templdir/* + array(1) { + [0]=> + string(14) "templdir/t.txt" + } +047+ T2I_REFACTOR: ENTER 'instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +048+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +049+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +050+ T2I_REFACTOR: EXIT for 'instdir', returning '/app/tests/fixtures/instance/instdir' +051+ Glob: instdir/* => instdir (/app/tests/fixtures/instance/instdir) +052+ Globbing merge: /app/tests/fixtures/instance/instdir/* /app/tests/fixtures/templatedir/instdir/* + array(1) { + [0]=> + string(13) "instdir/t.txt" + } +057+ T2I_REFACTOR: ENTER 'cache', options: 0 (CHK_EX=N, RET_INST=N) +058+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +059+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +060+ T2I_REFACTOR: EXIT for 'cache', returning '/app/tests/fixtures/instance/cache' +061+ Glob instance only: cache (/app/tests/fixtures/instance/cache) + array(1) { + [0]=> + string(15) "cache/cache.txt" + } +029- array(9) { +066+ T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +067+ T2I_REFACTOR: No valid realpath found for ''. +068+ Glob: * => ((null)) +069+ Globbing template: * +070+ array(13) { + [0]=> +072+ string(3) "api" +073+ [1]=> + string(5) "cache" +032- [1]=> +075+ [2]=> +076+ string(8) "conflict" +077+ [3]=> +078+ string(9) "conflict2" +079+ [4]=> + string(6) "custom" +034- [2]=> +081+ [5]=> + string(12) "iinclude.php" +036- [3]=> +083+ [6]=> + string(17) "instance_only.php" +038- [4]=> +085+ [7]=> + string(7) "instdir" +040- [5]=> +087+ [8]=> + string(12) "manifest.php" +042- [6]=> +089+ [9]=> + string(10) "nowritedir" +044- [7]=> +091+ [10]=> +092+ string(3) "qwe" +093+ [11]=> + string(8) "test.php" +046- [8]=> +095+ [12]=> + string(3) "txt" + } +049- array(9) { +098+ T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +099+ T2I_REFACTOR: No valid realpath found for ''. +100+ Glob: ** => ((null)) +101+ Globbing template: ** +102+ array(13) { + [0]=> +104+ string(3) "api" +105+ [1]=> + string(5) "cache" +052- [1]=> +107+ [2]=> +108+ string(8) "conflict" +109+ [3]=> +110+ string(9) "conflict2" +111+ [4]=> + string(6) "custom" +054- [2]=> +113+ [5]=> + string(12) "iinclude.php" +056- [3]=> +115+ [6]=> + string(17) "instance_only.php" +058- [4]=> +117+ [7]=> + string(7) "instdir" +060- [5]=> +119+ [8]=> + string(12) "manifest.php" +062- [6]=> +121+ [9]=> + string(10) "nowritedir" +064- [7]=> +123+ [10]=> +124+ string(3) "qwe" +125+ [11]=> + string(8) "test.php" +066- [8]=> +127+ [12]=> + string(3) "txt" + } +130+ T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +131+ T2I_REFACTOR: No valid realpath found for ''. +132+ Glob: * => ((null)) +133+ Globbing template: * + array(2) { + [0]=> + string(8) "instance" +-- +========DONE======== +FAIL Check globs [tests/glob.phpt] +===================================================================== +Number of tests : 1 1 +Tests skipped : 0 ( 0.0%) -------- +Tests warned : 0 ( 0.0%) ( 0.0%) +Tests failed : 1 (100.0%) (100.0%) +Tests passed : 0 ( 0.0%) ( 0.0%) +--------------------------------------------------------------------- +Time taken : 0 seconds +===================================================================== + +===================================================================== +FAILED TEST SUMMARY +--------------------------------------------------------------------- +Check globs [tests/glob.phpt] +===================================================================== diff --git a/glob_stderr.log b/glob_stderr.log new file mode 100644 index 0000000..06f721c --- /dev/null +++ b/glob_stderr.log @@ -0,0 +1,45 @@ +Resolve: setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +T2I_REFACTOR: ENTER 'templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'templdir', returning '/app/tests/fixtures/templatedir/templdir' +Glob: templdir/* => templdir (/app/tests/fixtures/templatedir/templdir) +Globbing merge: /app/tests/fixtures/templatedir/templdir/* /app/tests/fixtures/templatedir/templdir/* +T2I_REFACTOR: ENTER 'instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'instdir', returning '/app/tests/fixtures/instance/instdir' +Glob: instdir/* => instdir (/app/tests/fixtures/instance/instdir) +Globbing merge: /app/tests/fixtures/instance/instdir/* /app/tests/fixtures/templatedir/instdir/* +T2I_REFACTOR: ENTER 'cache', options: 0 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'cache', returning '/app/tests/fixtures/instance/cache' +Glob instance only: cache (/app/tests/fixtures/instance/cache) +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: * => ((null)) +Globbing template: * +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: ** => ((null)) +Globbing template: ** +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: * => ((null)) +Globbing template: * diff --git a/glob_stderr_verbose.log b/glob_stderr_verbose.log new file mode 100644 index 0000000..06f721c --- /dev/null +++ b/glob_stderr_verbose.log @@ -0,0 +1,45 @@ +Resolve: setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +T2I_REFACTOR: ENTER 'txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'txt', returning '/app/tests/fixtures/instance/txt' +Glob: txt/*.txt => txt (/app/tests/fixtures/instance/txt) +Globbing merge: /app/tests/fixtures/instance/txt/*.txt /app/tests/fixtures/templatedir/txt/*.txt +T2I_REFACTOR: ENTER 'templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'templdir', returning '/app/tests/fixtures/templatedir/templdir' +Glob: templdir/* => templdir (/app/tests/fixtures/templatedir/templdir) +Globbing merge: /app/tests/fixtures/templatedir/templdir/* /app/tests/fixtures/templatedir/templdir/* +T2I_REFACTOR: ENTER 'instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'instdir', returning '/app/tests/fixtures/instance/instdir' +Glob: instdir/* => instdir (/app/tests/fixtures/instance/instdir) +Globbing merge: /app/tests/fixtures/instance/instdir/* /app/tests/fixtures/templatedir/instdir/* +T2I_REFACTOR: ENTER 'cache', options: 0 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +T2I_REFACTOR: EXIT for 'cache', returning '/app/tests/fixtures/instance/cache' +Glob instance only: cache (/app/tests/fixtures/instance/cache) +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: * => ((null)) +Globbing template: * +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: ** => ((null)) +Globbing template: ** +T2I_REFACTOR: ENTER '', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: No valid realpath found for ''. +Glob: * => ((null)) +Globbing template: * diff --git a/glob_stdout.log b/glob_stdout.log new file mode 100644 index 0000000..5c66107 --- /dev/null +++ b/glob_stdout.log @@ -0,0 +1,173 @@ +--TEST-- +Check globs +--SKIPIF-- +--FILE-- +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} +--EXPECT-- +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} diff --git a/glob_stdout_verbose.log b/glob_stdout_verbose.log new file mode 100644 index 0000000..5c66107 --- /dev/null +++ b/glob_stdout_verbose.log @@ -0,0 +1,173 @@ +--TEST-- +Check globs +--SKIPIF-- +--FILE-- +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} +--EXPECT-- +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} diff --git a/iterators.phpt.stderr.log b/iterators.phpt.stderr.log new file mode 100644 index 0000000..6046897 --- /dev/null +++ b/iterators.phpt.stderr.log @@ -0,0 +1,538 @@ +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir (len 31) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir', returning 'NULL (use original)' +Realpath /app/tests/fixtures/templatedir ((null)) +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning 'NULL (use original)' +Realpath /app/tests/fixtures/instance ((null)) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/api, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/api' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/api', returning '/app/tests/fixtures/instance/api' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/api (original URL: /app/tests/fixtures/templatedir/api) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/api': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/api, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/api, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/api' => '/app/tests/fixtures/instance/api' +Opendir: /app/tests/fixtures/templatedir/api (/app/tests/fixtures/instance/api) +Opening templdir: /app/tests/fixtures/templatedir/api +shadow_dir_opener: Adding from TEMPLATE to mergedata: rest.php +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: rest.php +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/api/rest.php, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/api/rest.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api/rest.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api/rest.php (len 44) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api/rest.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/api/rest.php', returning '/app/tests/fixtures/instance/api/rest.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/api/rest.php (original URL: /app/tests/fixtures/templatedir/api/rest.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/api/rest.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/api/rest.php, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe', returning '/app/tests/fixtures/instance/qwe' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe (original URL: /app/tests/fixtures/templatedir/qwe) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe' => '/app/tests/fixtures/instance/qwe' +Opendir: /app/tests/fixtures/templatedir/qwe (/app/tests/fixtures/instance/qwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe +shadow_dir_opener: Adding from TEMPLATE to mergedata: template_qwe_file.txt +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: modulebuilder +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: template_qwe_file.txt +shadow_dirstream_read: Copied to dirent: template_qwe_file.txt +shadow_dirstream_read: Attempting to read entry: template_qwe_file.txt +shadow_dirstream_read: Copied to dirent: template_qwe_file.txt +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (len 57) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt', returning 'NULL (use original)' +shadow_stat: Resolved Instance Name: NULL (original URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt) +shadow_stat: Stat on ORIGINAL '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': Result: 0 +shadow_stat: SUCCESS for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry: modulebuilder +shadow_dirstream_read: Copied to dirent: modulebuilder +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder (len 49) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder', returning '/app/tests/fixtures/instance/qwe/modulebuilder' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder (len 49) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder' => '/app/tests/fixtures/instance/qwe/modulebuilder' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (len 56) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (len 56) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (len 63) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (len 63) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (len 76) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (len 76) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (len 84) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (len 84) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (len 98) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (len 98) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (len 92) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (len 92) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (len 99) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (len 103) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (len 103) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (len 94) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (len 94) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (len 105) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict (len 40) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict', returning '/app/tests/fixtures/instance/conflict' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict (original URL: /app/tests/fixtures/templatedir/conflict) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict (len 40) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict' => '/app/tests/fixtures/instance/conflict' +Opendir: /app/tests/fixtures/templatedir/conflict (/app/tests/fixtures/instance/conflict) +Opening templdir: /app/tests/fixtures/templatedir/conflict +shadow_dir_opener: Adding from TEMPLATE to mergedata: item +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: item +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict/item, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict/item' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict/item (len 45) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict/item' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict/item', returning '/app/tests/fixtures/instance/conflict/item' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict/item (original URL: /app/tests/fixtures/templatedir/conflict/item) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict/item': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict/item, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict/item, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict/item (len 45) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict/item' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict/item' => '/app/tests/fixtures/instance/conflict/item' +Opendir: /app/tests/fixtures/templatedir/conflict/item (/app/tests/fixtures/instance/conflict/item) +Opening templdir: /app/tests/fixtures/templatedir/conflict/item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item/somefile.txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Initial get_full_path failed for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt'. Attempting segmented resolution. +T2I_REFACTOR: Segmented resolution resulted in realpath: '/app/tests/fixtures/instance/conflict/item/somefile.txt' +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/conflict/item/somefile.txt (len 55) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/conflict/item/somefile.txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt', returning '/app/tests/fixtures/instance/conflict/item/somefile.txt' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict/item/somefile.txt (original URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict/item/somefile.txt': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict2, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict2' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2 (len 41) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict2', returning '/app/tests/fixtures/instance/conflict2' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict2 (original URL: /app/tests/fixtures/templatedir/conflict2) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict2': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict2, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict2, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2 (len 41) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict2' => '/app/tests/fixtures/instance/conflict2' +Opendir: /app/tests/fixtures/templatedir/conflict2 (/app/tests/fixtures/instance/conflict2) +Opening templdir: /app/tests/fixtures/templatedir/conflict2 +shadow_dir_opener: Adding from TEMPLATE to mergedata: item +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: item +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict2/item, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict2/item' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2/item (len 46) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2/item' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict2/item', returning '/app/tests/fixtures/instance/conflict2/item' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict2/item (original URL: /app/tests/fixtures/templatedir/conflict2/item) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict2/item': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict2/item, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) diff --git a/iterators.phpt.stdout.log b/iterators.phpt.stdout.log new file mode 100644 index 0000000..57879ae --- /dev/null +++ b/iterators.phpt.stdout.log @@ -0,0 +1,49 @@ +--TEST-- +Check iterators failure (with options debug) +--SKIPIF-- +--FILE-- +Shadow paths set: Template='/app/tests/fixtures/templatedir', Instance='/app/tests/fixtures/instance' +Template Path (realpath): /app/tests/fixtures/templatedir +Instance Path (realpath): /app/tests/fixtures/instance + +Iterating directory (original): /app/tests/fixtures/templatedir/api +Attempting to iterate: /app/tests/fixtures/templatedir/api +Item: /app/tests/fixtures/templatedir/api/rest.php (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/api + +Iterating directory (original): /app/tests/fixtures/templatedir/qwe +Attempting to iterate: /app/tests/fixtures/templatedir/qwe +Item: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (isDir: Yes, isFile: No) +Found 20 items in /app/tests/fixtures/templatedir/qwe + +Iterating directory (original): /app/tests/fixtures/templatedir/conflict +Attempting to iterate: /app/tests/fixtures/templatedir/conflict +Item: /app/tests/fixtures/templatedir/conflict/item (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/conflict/item/somefile.txt (isDir: No, isFile: Yes) +Found 2 items in /app/tests/fixtures/templatedir/conflict + +Iterating directory (original): /app/tests/fixtures/templatedir/conflict2 +Attempting to iterate: /app/tests/fixtures/templatedir/conflict2 +Item: /app/tests/fixtures/templatedir/conflict2/item (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/conflict2 +--EXPECT-- +This will be filled once we see the actual output. diff --git a/iterators_stderr.log b/iterators_stderr.log new file mode 100644 index 0000000..6046897 --- /dev/null +++ b/iterators_stderr.log @@ -0,0 +1,538 @@ +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir (len 31) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir', returning 'NULL (use original)' +Realpath /app/tests/fixtures/templatedir ((null)) +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning 'NULL (use original)' +Realpath /app/tests/fixtures/instance ((null)) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/api, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/api' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/api', returning '/app/tests/fixtures/instance/api' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/api (original URL: /app/tests/fixtures/templatedir/api) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/api': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/api, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/api, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/api' => '/app/tests/fixtures/instance/api' +Opendir: /app/tests/fixtures/templatedir/api (/app/tests/fixtures/instance/api) +Opening templdir: /app/tests/fixtures/templatedir/api +shadow_dir_opener: Adding from TEMPLATE to mergedata: rest.php +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: rest.php +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/api/rest.php, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/api/rest.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/api/rest.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/api/rest.php (len 44) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/api/rest.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/api/rest.php', returning '/app/tests/fixtures/instance/api/rest.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/api/rest.php (original URL: /app/tests/fixtures/templatedir/api/rest.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/api/rest.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/api/rest.php, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe', returning '/app/tests/fixtures/instance/qwe' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe (original URL: /app/tests/fixtures/templatedir/qwe) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe' => '/app/tests/fixtures/instance/qwe' +Opendir: /app/tests/fixtures/templatedir/qwe (/app/tests/fixtures/instance/qwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe +shadow_dir_opener: Adding from TEMPLATE to mergedata: template_qwe_file.txt +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: modulebuilder +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: template_qwe_file.txt +shadow_dirstream_read: Copied to dirent: template_qwe_file.txt +shadow_dirstream_read: Attempting to read entry: template_qwe_file.txt +shadow_dirstream_read: Copied to dirent: template_qwe_file.txt +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (len 57) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt', returning 'NULL (use original)' +shadow_stat: Resolved Instance Name: NULL (original URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt) +shadow_stat: Stat on ORIGINAL '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': Result: 0 +shadow_stat: SUCCESS for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for '/app/tests/fixtures/templatedir/qwe/template_qwe_file.txt': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry: modulebuilder +shadow_dirstream_read: Copied to dirent: modulebuilder +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder (len 49) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder', returning '/app/tests/fixtures/instance/qwe/modulebuilder' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder (len 49) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder' => '/app/tests/fixtures/instance/qwe/modulebuilder' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (len 56) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (len 56) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (len 63) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (len 63) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (len 76) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (len 76) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (len 84) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (len 84) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (len 98) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (len 98) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (len 92) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (len 92) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (len 99) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (len 103) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (len 103) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (len 94) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (len 94) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (len 93) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (len 105) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', returning '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (original URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (len 90) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' => '/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict (len 40) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict', returning '/app/tests/fixtures/instance/conflict' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict (original URL: /app/tests/fixtures/templatedir/conflict) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict (len 40) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict' => '/app/tests/fixtures/instance/conflict' +Opendir: /app/tests/fixtures/templatedir/conflict (/app/tests/fixtures/instance/conflict) +Opening templdir: /app/tests/fixtures/templatedir/conflict +shadow_dir_opener: Adding from TEMPLATE to mergedata: item +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: item +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict/item, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict/item' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict/item (len 45) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict/item' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict/item', returning '/app/tests/fixtures/instance/conflict/item' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict/item (original URL: /app/tests/fixtures/templatedir/conflict/item) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict/item': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict/item, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict/item, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict/item (len 45) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict/item' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict/item' => '/app/tests/fixtures/instance/conflict/item' +Opendir: /app/tests/fixtures/templatedir/conflict/item (/app/tests/fixtures/instance/conflict/item) +Opening templdir: /app/tests/fixtures/templatedir/conflict/item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict/item/somefile.txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Initial get_full_path failed for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt'. Attempting segmented resolution. +T2I_REFACTOR: Segmented resolution resulted in realpath: '/app/tests/fixtures/instance/conflict/item/somefile.txt' +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/conflict/item/somefile.txt (len 55) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/conflict/item/somefile.txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict/item/somefile.txt', returning '/app/tests/fixtures/instance/conflict/item/somefile.txt' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict/item/somefile.txt (original URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict/item/somefile.txt': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict/item/somefile.txt, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict2, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict2' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2 (len 41) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict2', returning '/app/tests/fixtures/instance/conflict2' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict2 (original URL: /app/tests/fixtures/templatedir/conflict2) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict2': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict2, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/fixtures/templatedir/conflict2, Mode: r +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2 (len 41) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/fixtures/templatedir/conflict2' => '/app/tests/fixtures/instance/conflict2' +Opendir: /app/tests/fixtures/templatedir/conflict2 (/app/tests/fixtures/instance/conflict2) +Opening templdir: /app/tests/fixtures/templatedir/conflict2 +shadow_dir_opener: Adding from TEMPLATE to mergedata: item +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: item +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_dirstream_read: Attempting to read entry: item +shadow_dirstream_read: Copied to dirent: item +shadow_stat: ENTER URL: /app/tests/fixtures/templatedir/conflict2/item, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/fixtures/templatedir/conflict2/item' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/conflict2/item', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/conflict2/item (len 46) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/conflict2/item' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/conflict2/item', returning '/app/tests/fixtures/instance/conflict2/item' +shadow_stat: Resolved Instance Name: /app/tests/fixtures/instance/conflict2/item (original URL: /app/tests/fixtures/templatedir/conflict2/item) +shadow_stat: Stat on INSTANCE '/app/tests/fixtures/instance/conflict2/item': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/fixtures/templatedir/conflict2/item, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) diff --git a/iterators_stdout.log b/iterators_stdout.log new file mode 100644 index 0000000..57879ae --- /dev/null +++ b/iterators_stdout.log @@ -0,0 +1,49 @@ +--TEST-- +Check iterators failure (with options debug) +--SKIPIF-- +--FILE-- +Shadow paths set: Template='/app/tests/fixtures/templatedir', Instance='/app/tests/fixtures/instance' +Template Path (realpath): /app/tests/fixtures/templatedir +Instance Path (realpath): /app/tests/fixtures/instance + +Iterating directory (original): /app/tests/fixtures/templatedir/api +Attempting to iterate: /app/tests/fixtures/templatedir/api +Item: /app/tests/fixtures/templatedir/api/rest.php (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/api + +Iterating directory (original): /app/tests/fixtures/templatedir/qwe +Attempting to iterate: /app/tests/fixtures/templatedir/qwe +Item: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (isDir: No, isFile: Yes) +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (isDir: Yes, isFile: No) +Found 20 items in /app/tests/fixtures/templatedir/qwe + +Iterating directory (original): /app/tests/fixtures/templatedir/conflict +Attempting to iterate: /app/tests/fixtures/templatedir/conflict +Item: /app/tests/fixtures/templatedir/conflict/item (isDir: Yes, isFile: No) +Item: /app/tests/fixtures/templatedir/conflict/item/somefile.txt (isDir: No, isFile: Yes) +Found 2 items in /app/tests/fixtures/templatedir/conflict + +Iterating directory (original): /app/tests/fixtures/templatedir/conflict2 +Attempting to iterate: /app/tests/fixtures/templatedir/conflict2 +Item: /app/tests/fixtures/templatedir/conflict2/item (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/conflict2 +--EXPECT-- +This will be filled once we see the actual output. diff --git a/override.phpt.stderr.log b/override.phpt.stderr.log new file mode 100644 index 0000000..3e12d80 --- /dev/null +++ b/override.phpt.stderr.log @@ -0,0 +1,4 @@ +PHP Fatal error: Uncaught Error: Call to undefined function imagecreate() in /app/tests/override.phpt:23 +Stack trace: +#0 {main} + thrown in /app/tests/override.phpt on line 23 diff --git a/override.phpt.stdout.log b/override.phpt.stdout.log new file mode 100644 index 0000000..b325c6c --- /dev/null +++ b/override.phpt.stdout.log @@ -0,0 +1,13 @@ +--TEST-- +Check overrides +--EXTENSIONS-- +gd +fileinfo +--DESCRIPTION-- +To test it locally if you have shared gd extension you'll need: +export TEST_PHP_ARGS="-d extension=$(php-config --extension-dir)/gd.so" +--INI-- +shadow.override=imagepng@w1 +--SKIPIF-- +skip--FILE-- +text/plain diff --git a/php_shadow.h b/php_shadow.h index 6b67906..3f43296 100644 --- a/php_shadow.h +++ b/php_shadow.h @@ -41,8 +41,9 @@ PHP_MINFO_FUNCTION(shadow); #define SHADOW_DEBUG_ENSURE (1<<9) #define SHADOW_DEBUG_FAIL (1<<10) #define SHADOW_DEBUG_TOUCH (1<<11) -#define SHADOW_DEBUG_CHMOD (1<<11) -#define SHADOW_DEBUG_OVERRIDE (1<<12) +#define SHADOW_DEBUG_CHMOD (1<<12) +#define SHADOW_DEBUG_OVERRIDE (1<<13) +#define SHADOW_DEBUG_GLOB (1<<14) ZEND_BEGIN_MODULE_GLOBALS(shadow) /* config vars */ diff --git a/shadow.c b/shadow.c index 3ad3d8a..9db6da7 100644 --- a/shadow.c +++ b/shadow.c @@ -294,6 +294,7 @@ PHP_MINIT_FUNCTION(shadow) SHADOW_CONSTANT(SHADOW_DEBUG_TOUCH); SHADOW_CONSTANT(SHADOW_DEBUG_CHMOD); SHADOW_CONSTANT(SHADOW_DEBUG_OVERRIDE); + SHADOW_CONSTANT(SHADOW_DEBUG_GLOB); plain_ops = php_plain_files_wrapper.wops; @@ -730,108 +731,144 @@ static inline char *instance_to_template(const char *instname, int len) /* if given instance path, return realpath */ #define OPT_RETURN_INSTANCE 4 -/* -Returns new instance path or NULL if template path is OK -filename is relative to template root -*/ static char *template_to_instance(const char *filename, int options) { - char *realpath = NULL; - int fnamelen = strlen(filename); - char *newname = NULL; + char *realpath = NULL; + char *newname = NULL; + int fnamelen = strlen(filename); - if(!SHADOW_ENABLED()) { - return NULL; - } + if (!SHADOW_ENABLED()) { + return NULL; + } - /* Always get the full path since there can be symlinks and stuff like // or ..'s in there */ - realpath = get_full_path(filename); - if(SHADOW_G(debug) & SHADOW_DEBUG_FULLPATH) fprintf(stderr, "Full path: %s\n", realpath); - if(!realpath) { - return NULL; - } - fnamelen = strlen(realpath); - while(IS_SLASH(realpath[fnamelen-1]) && fnamelen > 1) { - realpath[fnamelen-1] = '\0'; - fnamelen--; - } + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: ENTER '%s', options: %d (CHK_EX=%s, RET_INST=%s)\n", filename, options, (options & OPT_CHECK_EXISTS) ? "Y" : "N", (options & OPT_RETURN_INSTANCE) ? "Y" : "N"); + } - if (is_subdir_of(ZSTR_VAL(SHADOW_G(template)), ZSTR_LEN(SHADOW_G(template)), realpath, fnamelen)) { - if(SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "In template: %s\n", realpath); - if((options & OPT_CHECK_EXISTS) && shadow_cache_get(realpath, &newname) == SUCCESS) { - if(SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "Path check from cache: %s => %s\n", realpath, newname); - if(realpath) { - efree(realpath); - } - return newname; - } - /* starts with template - rewrite to instance */ - spprintf( - &newname, - MAXPATHLEN, - "%s/%s", - ZSTR_VAL(SHADOW_G(instance)), - realpath + ZSTR_LEN(SHADOW_G(template)) + 1 - ); - if ((options & OPT_CHECK_EXISTS) - && !instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(template)) + 1) - ) { - if(VCWD_ACCESS(newname, F_OK) != 0) { - /* file does not exist */ - efree(newname); - newname = NULL; - } - /* drop down to return */ - } - if(!(options & OPT_SKIP_CACHE)) { - shadow_cache_put(realpath, newname); - } - } else if (is_subdir_of(ZSTR_VAL(SHADOW_G(instance)), ZSTR_LEN(SHADOW_G(instance)), realpath, fnamelen)) { - if(SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "In instance: %s\n", realpath); - if((options & OPT_CHECK_EXISTS)) { - /* starts with instance, may want to check template too */ - if (!instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(instance)) + 1) - && VCWD_ACCESS(realpath, F_OK) != 0 - ) { - /* does not exist, go to template */ - spprintf( - &newname, - MAXPATHLEN, - "%s/%s", - ZSTR_VAL(SHADOW_G(template)), - realpath + ZSTR_LEN(SHADOW_G(instance)) + 1 - ); - } else { - /* TODO: use realpath here too? */ - if((options & OPT_RETURN_INSTANCE)) { - newname = estrndup(realpath, fnamelen); - efree(realpath); - realpath = NULL; - } else { - newname = NULL; - } - } - } else { - /* use already resolved name if we are writing - this way we can use it for recursive mkdir */ - newname = estrndup(realpath, fnamelen); - efree(realpath); - realpath = NULL; - } - } else if ( - (options & OPT_RETURN_INSTANCE) - && (strncmp(ZSTR_VAL(SHADOW_G(instance)), realpath, ZSTR_LEN(SHADOW_G(instance))) == 0) - && ((realpath[ZSTR_LEN(SHADOW_G(instance))] == '\0') - || IS_SLASH(realpath[ZSTR_LEN(SHADOW_G(instance))])) - ) { - /* it is the instance dir itself - return it */ - newname = estrndup(realpath, fnamelen); - } + // Initial attempt to get the real path + realpath = get_full_path(filename); + + // If initial get_full_path fails, try to resolve segment by segment considering overrides + if (!realpath && strncmp(filename, SHADOW_G(template)->val, ZSTR_LEN(SHADOW_G(template))) == 0) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: Initial get_full_path failed for '%s'. Attempting segmented resolution.\n", filename); + } + const char *template_root = SHADOW_G(template)->val; + size_t template_root_len = ZSTR_LEN(SHADOW_G(template)); + const char *relative_path_in_template = filename + template_root_len; + if (IS_SLASH(*relative_path_in_template)) relative_path_in_template++; + + char *current_resolved_parent_abs = estrdup(SHADOW_G(instance)->val); + char *remaining_path_part = estrdup(relative_path_in_template); + char *segment = NULL; + + char *temp_path_to_check = NULL; + bool possible_resolution = true; + + while ((segment = php_strtok_r(remaining_path_part, "/", &remaining_path_part))) { + // Reduced verbosity in this loop + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: Segment: '%s', Checking effective path: '%s'\n", segment, temp_path_to_check); + } */ + if (!temp_path_to_check) { + spprintf(&temp_path_to_check, 0, "%s/%s", current_resolved_parent_abs, segment); + } else { + char *old_temp_path = temp_path_to_check; + spprintf(&temp_path_to_check, 0, "%s/%s", old_temp_path, segment); + efree(old_temp_path); + } + + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: Segment: '%s', Checking effective path: '%s'\n", segment, temp_path_to_check); + } */ + + php_stream_statbuf ssb_segment; + if (plain_ops->url_stat(&php_plain_files_wrapper, temp_path_to_check, PHP_STREAM_URL_STAT_QUIET, &ssb_segment, NULL) == 0) { + efree(current_resolved_parent_abs); + current_resolved_parent_abs = estrdup(temp_path_to_check); + if (S_ISDIR(ssb_segment.sb.st_mode)) { + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a directory.\n", temp_path_to_check); */ + } else { + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a file.\n", temp_path_to_check); */ + if (remaining_path_part && *remaining_path_part != '\0') { + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a file, but has remaining path '%s'. Invalid resolution path.\n", temp_path_to_check, remaining_path_part); */ + possible_resolution = false; + break; + } + } + } else { + /* if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Stat failed for instance segment '%s'.\n", temp_path_to_check); */ + possible_resolution = false; + break; + } + } + + if (possible_resolution && current_resolved_parent_abs) { + realpath = get_full_path(current_resolved_parent_abs); + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Segmented resolution resulted in realpath: '%s'\n", realpath ? realpath : "NULL"); + } + + if (current_resolved_parent_abs) efree(current_resolved_parent_abs); + if (remaining_path_part && strlen(remaining_path_part) == 0) { efree(remaining_path_part); } + else if (remaining_path_part == NULL && segment != NULL) { } + else if (remaining_path_part) { efree(remaining_path_part); } + + + if (temp_path_to_check) efree(temp_path_to_check); + } - if(SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "Path check: %s => %s\n", realpath, newname); - if(realpath) { - efree(realpath); - } - return newname; + if (realpath) { + fnamelen = strlen(realpath); + while (IS_SLASH(realpath[fnamelen - 1]) && fnamelen > 1) { + realpath[fnamelen - 1] = '\0'; + fnamelen--; + } + if (SHADOW_G(debug) & SHADOW_DEBUG_FULLPATH) fprintf(stderr, "T2I_REFACTOR: Final realpath for checks: %s (len %d)\n", realpath, fnamelen); + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: No valid realpath found for '%s'.\n", filename); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return NULL; + } + + if (is_subdir_of(SHADOW_G(template)->val, ZSTR_LEN(SHADOW_G(template)), realpath, fnamelen)) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is in TEMPLATE territory.\n", realpath); + if ((options & OPT_CHECK_EXISTS) && shadow_cache_get(realpath, &newname) == SUCCESS) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Cache hit for '%s' => '%s'\n", realpath, newname ? newname : "NULL"); + if (realpath) efree(realpath); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return newname; + } + spprintf(&newname, 0, "%s/%s", SHADOW_G(instance)->val, realpath + ZSTR_LEN(SHADOW_G(template)) + 1); + if ((options & OPT_CHECK_EXISTS) && !instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(template)) + 1)) { + if (VCWD_ACCESS(newname, F_OK) != 0) { + efree(newname); + newname = NULL; + } + } + if (!(options & OPT_SKIP_CACHE)) shadow_cache_put(realpath, newname); + } else if (is_subdir_of(SHADOW_G(instance)->val, ZSTR_LEN(SHADOW_G(instance)), realpath, fnamelen)) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is in INSTANCE territory.\n", realpath); + if (options & OPT_CHECK_EXISTS) { + if (!instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(instance)) + 1) && VCWD_ACCESS(realpath, F_OK) != 0) { + spprintf(&newname, 0, "%s/%s", SHADOW_G(template)->val, realpath + ZSTR_LEN(SHADOW_G(instance)) + 1); + } else { + if (options & OPT_RETURN_INSTANCE) newname = estrdup(realpath); + else newname = NULL; + } + } else { + newname = estrdup(realpath); + } + } else if ((options & OPT_RETURN_INSTANCE) && strncmp(ZSTR_VAL(SHADOW_G(instance)), realpath, ZSTR_LEN(SHADOW_G(instance))) == 0 && (realpath[ZSTR_LEN(SHADOW_G(instance))] == '\0' || IS_SLASH(realpath[ZSTR_LEN(SHADOW_G(instance))]))) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' IS the instance directory itself.\n", realpath); + newname = estrdup(realpath); + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is outside template/instance or does not meet criteria.\n", realpath); + } + + if (realpath) efree(realpath); + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: EXIT for '%s', returning '%s'\n", filename, newname ? newname : "NULL (use original)"); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return newname; } static void clean_cache_dir(const char *clean_dirname) @@ -941,22 +978,57 @@ static void adjust_stat(php_stream_statbuf *ssb) static int shadow_stat(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context) { - char *instname = template_to_instance(url, OPT_CHECK_EXISTS); - int res; - if(SHADOW_ENABLED()) { - if(SHADOW_G(debug) & SHADOW_DEBUG_STAT) fprintf(stderr, "Stat: %s (%s) %d\n", url, instname, flags); - } - if(instname) { - res = plain_ops->url_stat(wrapper, instname, flags, ssb, context); - if(SHADOW_G(debug) & SHADOW_DEBUG_STAT) fprintf(stderr, "Stat res: %d\n", res); - efree(instname); - adjust_stat(ssb); - return res; - } - res = plain_ops->url_stat(wrapper, url, flags, ssb, context); - if(SHADOW_G(debug) & SHADOW_DEBUG_STAT) fprintf(stderr, "Stat res: %d\n", res); - adjust_stat(ssb); - return res; + char *instname = NULL; + int res = -1; + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: ENTER URL: %s, Flags: %d\n", url, flags); + } + + if (SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "STAT_DEBUG: Values: OCE=%d, ORI=%d, Combo=%d. About to call t2i for '%s' with options: %d\n", OPT_CHECK_EXISTS, OPT_RETURN_INSTANCE, (OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE), url, (OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE)); + } + instname = template_to_instance(url, OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE); + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Resolved Instance Name: %s (original URL: %s)\n", instname ? instname : "NULL", url); + } + + if (instname) { + res = plain_ops->url_stat(wrapper, instname, flags, ssb, context); + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Stat on INSTANCE '%s': Result: %d\n", instname, res); + } + efree(instname); + } else { + res = plain_ops->url_stat(wrapper, url, flags, ssb, context); + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Stat on ORIGINAL '%s': Result: %d\n", url, res); + } + } + + if (res == 0) { + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + // The term (instname ? "used_instance_path" : url) refers to the state of 'instname' variable here. + // If instname was used and efree'd, this pointer is dangling. + // A safer way would be to use a temporary variable to store which path was used for stat. + // However, sticking to the direct C code translation from the awk script's print statements. + fprintf(stderr, "shadow_stat: SUCCESS for '%s': Mode: %07o (octal), UID: %d, GID: %d\n", (instname ? "used_instance_path_potentially_freed" : url), ssb->sb.st_mode, ssb->sb.st_uid, ssb->sb.st_gid); + if (S_ISDIR(ssb->sb.st_mode)) fprintf(stderr, "shadow_stat: Type for '%s': Directory\n", (instname ? "used_instance_path_potentially_freed" : url)); + else if (S_ISREG(ssb->sb.st_mode)) fprintf(stderr, "shadow_stat: Type for '%s': File\n", (instname ? "used_instance_path_potentially_freed" : url)); + else fprintf(stderr, "shadow_stat: Type for '%s': Other\n", (instname ? "used_instance_path_potentially_freed" : url)); + } + adjust_stat(ssb); + } else { + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: FAILED for '%s', errno: %d\n", (instname ? "used_instance_path_potentially_freed" : url), errno); + } + } + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: EXIT URL: %s, Result: %d\n", url, res); + } + return res; } static int shadow_unlink(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context) @@ -1050,6 +1122,7 @@ static int shadow_rmdir(php_stream_wrapper *wrapper, const char *url, int option static php_stream *shadow_dir_opener(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: ENTER Path: %s, Mode: %s\n", path, mode); char *instname; php_stream *tempdir = NULL, *instdir, *mergestream; HashTable *mergedata; @@ -1117,9 +1190,11 @@ static php_stream *shadow_dir_opener(php_stream_wrapper *wrapper, const char *pa ALLOC_HASHTABLE(mergedata); zend_hash_init(mergedata, 10, NULL, NULL, 0); while(php_stream_readdir(tempdir, &entry)) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: Adding from TEMPLATE to mergedata: %s\n", entry.d_name); zend_hash_str_add_new_ptr(mergedata, entry.d_name, strlen(entry.d_name), &dummy); } while(php_stream_readdir(instdir, &entry)) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: %s\n", entry.d_name); zend_hash_str_update_ptr(mergedata, entry.d_name, strlen(entry.d_name), &dummy); } zend_hash_internal_pointer_reset(mergedata); @@ -1138,6 +1213,15 @@ static php_stream *shadow_dir_opener(php_stream_wrapper *wrapper, const char *pa static ssize_t shadow_dirstream_read(php_stream *stream, char *buf, size_t count) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) { + zend_string *current_key = NULL; zend_ulong current_num; + zend_hash_get_current_key((HashTable *)stream->abstract, ¤t_key, ¤t_num); + if (current_key) { + fprintf(stderr, "shadow_dirstream_read: Attempting to read entry: %s\n", ZSTR_VAL(current_key)); + } else { + fprintf(stderr, "shadow_dirstream_read: Attempting to read entry (non-string key or end of hash)\n"); + } + } php_stream_dirent *ent = (php_stream_dirent*)buf; HashTable *mergedata = (HashTable *)stream->abstract; zend_string *name = NULL; @@ -1156,6 +1240,7 @@ static ssize_t shadow_dirstream_read(php_stream *stream, char *buf, size_t count zend_hash_move_forward(mergedata); PHP_STRLCPY(ent->d_name, ZSTR_VAL(name), sizeof(ent->d_name), ZSTR_LEN(name)); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dirstream_read: Copied to dirent: %s\n", ent->d_name); return sizeof(php_stream_dirent); } @@ -1439,13 +1524,26 @@ static void shadow_glob(INTERNAL_FUNCTION_PARAMETERS) char *filename = NULL; size_t filename_len; zend_long flags; - char *instname=NULL, *templname=NULL, *mask=NULL, *path=NULL; - zval instdata, templdata; - zval *src_entry; - HashTable *mergedata; - void *dummy = (void *)1; - int instlen, templen; - int skip_template=0; + + char *mask_ptr = NULL; // Points to the start of glob pattern chars like '*' + char *original_path_prefix = NULL; // The path prefix from the original glob pattern string, e.g., "txt/" or "" + char *glob_pattern_itself = NULL; // The actual pattern part, e.g., "*.txt" or "*" + char *abs_path_base = NULL; // Absolute version of original_path_prefix for internal use + + char *inst_base_path = NULL; // Base path for instance glob (absolute) + char *templ_base_path = NULL; // Base path for template glob (absolute) + int inst_base_len = 0; + int templ_base_len = 0; + + char *full_inst_glob_path = NULL; // inst_base_path + glob_pattern_itself + char *full_templ_glob_path = NULL; // templ_base_path + glob_pattern_itself + + zval *src_entry; // Iterator for results from orig_glob + HashTable *mergedata; // To collect and merge results + void *dummy = (void *)1; // Dummy value for hash table + int skip_template = 0; + char cwd_buf[MAXPATHLEN]; + cwd_state state = {0}; // For VCWD_GETCWD, using the standard PHP struct if(!SHADOW_ENABLED()) { orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); @@ -1460,120 +1558,203 @@ static void shadow_glob(INTERNAL_FUNCTION_PARAMETERS) return; } - mask = strpbrk(filename, "*?["); - if(!mask) { - mask = filename+filename_len; + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Original filename: '%s'\n", filename); + + // 1. Separate the path prefix from the glob pattern itself + mask_ptr = strpbrk(filename, "*?["); + if (!mask_ptr) { // No glob characters found + glob_pattern_itself = estrdup(""); // Should this be an error or treat as plain path? Glob usually expects a pattern. + original_path_prefix = estrdup(filename); + // This case (no pattern) might lead to issues as `php_glob` expects a pattern. + // For now, let it proceed; template_to_instance might handle it if `filename` is a dir. + } else { + glob_pattern_itself = estrdup(mask_ptr); + original_path_prefix = estrndup(filename, mask_ptr - filename); } - while(--mask > filename && !IS_SLASH(*mask)); /* look up for slash */ - path = estrndup(filename, (mask - filename) > 0 ? (mask - filename) : 0); - /* path will be path part up to the directory containing first glob char */ + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Original path prefix: '%s', Glob pattern itself: '%s'\n", original_path_prefix, glob_pattern_itself); - if(is_instance_only(path)) { - /* if it's instance-only dir, we won't merge in any case */ - instname = template_to_instance(path, 0); - skip_template = 1; - if(SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Glob instance only: %s (%s)\n", path, instname); + // 2. Make the extracted path prefix absolute for internal processing + if (original_path_prefix[0] == '\0' || !IS_ABSOLUTE_PATH(original_path_prefix, strlen(original_path_prefix))) { + if (!VCWD_GETCWD(cwd_buf, MAXPATHLEN)) { + php_error_docref(NULL, E_WARNING, "Cannot get current working directory"); + if (original_path_prefix) efree(original_path_prefix); + if (glob_pattern_itself) efree(glob_pattern_itself); + RETURN_FALSE; + } + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: CWD: '%s'\n", cwd_buf); + if (original_path_prefix[0] == '\0') { + abs_path_base = estrdup(cwd_buf); + } else { + spprintf(&abs_path_base, 0, "%s/%s", cwd_buf, original_path_prefix); + // Remove trailing slash from abs_path_base if original_path_prefix had one and it's not root + size_t abs_len = strlen(abs_path_base); + if (abs_len > 1 && IS_SLASH(abs_path_base[abs_len-1])) { + abs_path_base[abs_len-1] = '\0'; + } + } + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Path prefix was relative/empty. Absolute base for shadowing: '%s'\n", abs_path_base); } else { - instname = template_to_instance(path, OPT_CHECK_EXISTS|OPT_RETURN_INSTANCE); - if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Glob: %s => %s (%s)\n", filename, path, instname); - if(!instname) { - /* we don't have instance dir, don't bother with merging */ - if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing template: %s\n", filename); - orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); - efree(path); - return; + abs_path_base = estrdup(original_path_prefix); + size_t abs_len = strlen(abs_path_base); + if (abs_len > 1 && IS_SLASH(abs_path_base[abs_len-1])) { + abs_path_base[abs_len-1] = '\0'; } + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Path prefix was absolute. Base for shadowing: '%s'\n", abs_path_base); } - /* here we have instname */ - instlen = strlen(instname); -#if 0 - if(is_subdir_of(SHADOW_G(template), SHADOW_G(template_len), instname, instlen)) { - /* We can get template dir here, if instance dir does not exist, we still have only one directory then */ - instname = erealloc(instname, instlen+strlen(mask)+1); - strcat(instname, mask); - if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing template(2): %s\n", instname); - shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU); - efree(path); - return; + + // 3. Determine instance and template base paths for globbing using the absolute base + if(is_instance_only(abs_path_base)) { + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: abs_path_base '%s' is instance_only. Calling t2i with OPT_RETURN_INSTANCE.\n", abs_path_base); + inst_base_path = template_to_instance(abs_path_base, OPT_RETURN_INSTANCE); + skip_template = 1; + if(SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Instance-only mapping: abs_path_base='%s' -> inst_base_path='%s'\n", abs_path_base, inst_base_path ? inst_base_path : "NULL"); + if (!inst_base_path) { + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Instance-only path '%s' did not resolve. Returning empty.\n", abs_path_base); + goto cleanup_and_return_empty; + } + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: abs_path_base '%s' is NOT instance_only. Calling t2i with CHECK_EXISTS | RETURN_INSTANCE.\n", abs_path_base); + inst_base_path = template_to_instance(abs_path_base, OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE); + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Shadow mapping: abs_path_base='%s' -> inst_base_path='%s'\n", abs_path_base, inst_base_path ? inst_base_path : "NULL"); + if(!inst_base_path) { // No specific instance or template override for this base path, or it doesn't exist in instance. + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: No instance mapping for abs_path_base '%s'. Globbing original filename '%s' directly.\n", abs_path_base, filename); + orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); // Use the original filename as passed by user + goto cleanup_paths; // Standard cleanup + } } -#endif - /* We got instance dir, does template dir exist too? */ + inst_base_len = strlen(inst_base_path); + if(!skip_template) { - templname = instance_to_template(instname, instlen); - if(!templname) { + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Attempting to find corresponding template for inst_base_path '%s'\n", inst_base_path); + templ_base_path = instance_to_template(inst_base_path, inst_base_len); // expects instance path + if(!templ_base_path) { skip_template = 1; + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: No corresponding template path found for inst_base_path '%s'. Skipping template search.\n", inst_base_path); + } else { + if (strcmp(templ_base_path, inst_base_path) == 0 && ZSTR_LEN(SHADOW_G(template)) != ZSTR_LEN(SHADOW_G(instance)) ) { + // If instance_to_template returns the same path as inst_base_path, AND template and instance are different, + // it means inst_base_path was already a template path. So, no separate template globbing needed. + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: inst_base_path '%s' is already the template path. Skipping redundant template glob.\n", inst_base_path); + skip_template = 1; + efree(templ_base_path); + templ_base_path = NULL; + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Corresponding template base path: '%s'\n", templ_base_path); + templ_base_len = strlen(templ_base_path); + } } } - instname = erealloc(instname, instlen+strlen(mask)+1); - strcat(instname, mask); -#if 0 -/* - * Remove existance check for template - since we'd need to translate names here anyway, we better fall though and have glob return empty - */ - if(VCWD_ACCESS(templname, F_OK) != 0) { - efree(templname); - if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing instance: %s\n", instname); - shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU); - efree(path); - return; + + // 4. Construct full glob paths for instance and template + spprintf(&full_inst_glob_path, 0, "%s%s%s", inst_base_path, (inst_base_len > 0 && IS_SLASH(inst_base_path[inst_base_len-1])) ? "" : (strlen(glob_pattern_itself)>0 ? "/" : ""), glob_pattern_itself); + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Full instance glob path: '%s'\n", full_inst_glob_path); + + if(!skip_template && templ_base_path != NULL) { + spprintf(&full_templ_glob_path, 0, "%s%s%s", templ_base_path, (templ_base_len > 0 && IS_SLASH(templ_base_path[templ_base_len-1])) ? "" : (strlen(glob_pattern_itself)>0 ? "/" : ""), glob_pattern_itself); + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Full template glob path: '%s'\n", full_templ_glob_path); } -#endif - /* We have both, so we will have to merge */ + + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Globbing merge. Instance_glob_path: '%s', Template_glob_path: '%s'\n", full_inst_glob_path, full_templ_glob_path ? full_templ_glob_path : "N/A"); + ALLOC_HASHTABLE(mergedata); zend_hash_init(mergedata, 10, NULL, NULL, 0); - if(!skip_template && templname != NULL) { - templen = strlen(templname); - templname = erealloc(templname, templen+strlen(mask)+1); - strcat(templname, mask); - if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing merge: %s %s\n", instname, templname); + // 5. Perform glob on template path + // orig_glob populates the main 'return_value' of this function (shadow_glob) + // We must process it before the next call to orig_glob, or it will be overwritten. + if(!skip_template && full_templ_glob_path != NULL) { + // Prepare return_value for orig_glob + zval_dtor(return_value); // Clear any previous content from parameter parsing + array_init(return_value); - /* call with template */ - if(shadow_call_replace_name(0, templname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { - /* cut off instname and put path part there */ - ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { + if(shadow_call_replace_name(0, full_templ_glob_path, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { // Use Z_ARRVAL_P for direct zval char *mergepath; - if (Z_TYPE_P(src_entry) != IS_STRING) continue; /* weird, glob shouldn't do that to us */ - spprintf(&mergepath, MAXPATHLEN, "%s/%s", path, Z_STRVAL_P(src_entry)+templen+1); + if (Z_TYPE_P(src_entry) != IS_STRING) continue; + + const char *result_entry_path = Z_STRVAL_P(src_entry); + char *relative_to_glob_base = (char*)result_entry_path + templ_base_len; + if (templ_base_len > 0 && IS_SLASH(*relative_to_glob_base)) { + relative_to_glob_base++; + } + + int prefix_len = strlen(original_path_prefix); + if (prefix_len > 0 && IS_SLASH(original_path_prefix[prefix_len-1])) { + spprintf(&mergepath, 0, "%s%s", original_path_prefix, relative_to_glob_base); + } else if (prefix_len > 0) { + spprintf(&mergepath, 0, "%s/%s", original_path_prefix, relative_to_glob_base); + } else { + mergepath = estrdup(relative_to_glob_base); + } + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Template merge: result_entry_path='%s', relative_to_glob_base='%s', mergepath='%s'\n", result_entry_path, relative_to_glob_base, mergepath); zend_hash_str_add_new_ptr(mergedata, mergepath, strlen(mergepath), dummy); efree(mergepath); } ZEND_HASH_FOREACH_END(); - } else { - /* ignore problems here - other one may pick it up */ - array_init(return_value); } - } else { - /* we're skipping the template */ - array_init(return_value); + // End of processing template results from return_value. Data is now in mergedata. } - /* replace the return value */ - templdata = *return_value; - return_value = &instdata; - /* call with instance */ - if(shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { - /* merge data */ - ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { + // 6. Perform glob on instance path + // Prepare return_value for the next orig_glob call + zval_dtor(return_value); + array_init(return_value); + + if(shadow_call_replace_name(0, full_inst_glob_path, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { // Use Z_ARRVAL_P char *mergepath; - if (Z_TYPE_P(src_entry) != IS_STRING) continue; /* weird, glob shouldn't do that to us */ - spprintf(&mergepath, MAXPATHLEN, "%s/%s", path, Z_STRVAL_P(src_entry)+instlen+1); - zend_hash_str_add_ptr(mergedata, mergepath, strlen(mergepath), dummy); + if (Z_TYPE_P(src_entry) != IS_STRING) continue; + + const char *result_entry_path = Z_STRVAL_P(src_entry); + char *relative_to_glob_base = (char*)result_entry_path + inst_base_len; + if (inst_base_len > 0 && IS_SLASH(*relative_to_glob_base)) { + relative_to_glob_base++; + } + + int prefix_len = strlen(original_path_prefix); + if (prefix_len > 0 && IS_SLASH(original_path_prefix[prefix_len-1])) { + spprintf(&mergepath, 0, "%s%s", original_path_prefix, relative_to_glob_base); + } else if (prefix_len > 0) { + spprintf(&mergepath, 0, "%s/%s", original_path_prefix, relative_to_glob_base); + } else { + mergepath = estrdup(relative_to_glob_base); + } + if (SHADOW_G(debug) & SHADOW_DEBUG_GLOB) fprintf(stderr, "GLOB_DEBUG: Instance merge: result_entry_path='%s', relative_to_glob_base='%s', mergepath='%s'\n", result_entry_path, relative_to_glob_base, mergepath); + zend_hash_str_update_ptr(mergedata, mergepath, strlen(mergepath), dummy); efree(mergepath); } ZEND_HASH_FOREACH_END(); } - zval_dtor(return_value); - return_value = &templdata; - /* convert mergedata to return */ - zend_hash_clean(Z_ARRVAL_P(return_value)); - zend_string *filename_zs; - ZEND_HASH_FOREACH_STR_KEY(mergedata, filename_zs) { - add_next_index_str(return_value, zend_string_copy(filename_zs)); + // End of processing instance results from return_value. Data is now combined in mergedata. + + // 7. Populate the final return_value from mergedata + zval_dtor(return_value); // Clear return_value (which holds results from last orig_glob) + array_init(return_value); // Initialize the actual return_value for the user + zend_string *final_path_str; + ZEND_HASH_FOREACH_STR_KEY(mergedata, final_path_str) { + if (final_path_str) { + add_next_index_str(return_value, zend_string_copy(final_path_str)); + } } ZEND_HASH_FOREACH_END(); - /* cleanup */ - zend_hash_clean(mergedata); + + // 8. Cleanup zend_hash_destroy(mergedata); - efree(mergedata); - efree(path); + FREE_HASHTABLE(mergedata); + + cleanup_paths: + if (inst_base_path) efree(inst_base_path); + if (templ_base_path) efree(templ_base_path); + if (abs_path_base) efree(abs_path_base); + if (original_path_prefix) efree(original_path_prefix); + if (glob_pattern_itself) efree(glob_pattern_itself); + // full_inst_glob_path and full_templ_glob_path are freed by shadow_call_replace_name + return; + + cleanup_and_return_empty: + if (inst_base_path) efree(inst_base_path); + if (templ_base_path) efree(templ_base_path); + if (abs_path_base) efree(abs_path_base); + if (original_path_prefix) efree(original_path_prefix); + if (glob_pattern_itself) efree(glob_pattern_itself); + array_init(return_value); } /* }}} */ diff --git a/shadow.c.bak_refactor_attempt b/shadow.c.bak_refactor_attempt new file mode 100644 index 0000000..a35a1ce --- /dev/null +++ b/shadow.c.bak_refactor_attempt @@ -0,0 +1,1733 @@ +/* + * Copyright (C) 2014, SugarCRM Inc. + * + * This product is licensed by SugarCRM under the Apache License, Version 2.0 (the "License"). + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "php_shadow.h" +#include "php_streams.h" +#include +#include "shadow_cache.h" +#include "ext/standard/php_filestat.h" + +#if PHP_VERSION_ID < 50600 +#define cwd_state_estrdup(str) strdup(str); +#define cwd_state_efree(str) free(str); +#else +#define cwd_state_estrdup(str) estrdup(str); +#define cwd_state_efree(str) efree(str); +#endif + +ZEND_DECLARE_MODULE_GLOBALS(shadow) + +typedef struct _shadow_function { + void (*orig_handler)(INTERNAL_FUNCTION_PARAMETERS); + int argno; + int argtype; +} shadow_function; + +PHP_FUNCTION(shadow); +PHP_FUNCTION(shadow_get_config); +PHP_FUNCTION(shadow_clear_cache); + +static php_stream_wrapper_ops shadow_wrapper_ops; +php_stream_wrapper shadow_wrapper = { + &shadow_wrapper_ops, + NULL, + 0 +}; + +static ssize_t shadow_dirstream_read(php_stream *stream, char *buf, size_t count); +static int shadow_dirstream_close(php_stream *stream, int close_handle); +static int shadow_dirstream_rewind(php_stream *stream, off_t offset, int whence, off_t *newoffs); +static void shadow_init_wrapper(); + +static php_stream_ops shadow_dirstream_ops = { + NULL, + shadow_dirstream_read, + shadow_dirstream_close, + NULL, + "shadow dir", + shadow_dirstream_rewind, + NULL, /* cast */ + NULL, /* stat */ + NULL /* set_option */ +}; + +static const php_stream_wrapper_ops *plain_ops; +zend_string *(*original_zend_resolve_path)(zend_string *filename); +static void (*orig_touch)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_chmod)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_chdir)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_fread)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_realpath)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_is_writable)(INTERNAL_FUNCTION_PARAMETERS); +static void (*orig_glob)(INTERNAL_FUNCTION_PARAMETERS); + +zend_string *shadow_resolve_path(zend_string *filename); +static php_stream *shadow_stream_opener(php_stream_wrapper *wrapper, const char *filename, const char *mode, + int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); +static int shadow_stat(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, + php_stream_context *context); +static int shadow_unlink(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); + +static int shadow_rename(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context); +static int shadow_mkdir(php_stream_wrapper *wrapper, const char *dir, int mode, int options, php_stream_context *context); +static int shadow_rmdir(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); +static php_stream *shadow_dir_opener(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); +static void shadow_touch(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_chmod(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_chdir(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_fread(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_realpath(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_is_writable(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_glob(INTERNAL_FUNCTION_PARAMETERS); +static void shadow_generic_override(INTERNAL_FUNCTION_PARAMETERS); + +ZEND_BEGIN_ARG_INFO_EX(arginfo_shadow, 0, 0, 2) + ZEND_ARG_INFO(0, template) + ZEND_ARG_INFO(0, instance) + ZEND_ARG_INFO(0, instance_only) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_void, 0, 0, 0) +ZEND_END_ARG_INFO() + +/* {{{ shadow_functions[] + * + */ +const zend_function_entry shadow_functions[] = { + PHP_FE(shadow, arginfo_shadow) + PHP_FE(shadow_get_config, arginfo_void) + PHP_FE(shadow_clear_cache, arginfo_void) + {NULL, NULL, NULL} +}; +/* }}} */ + +/* {{{ php_shadow_init_globals + */ +static PHP_GINIT_FUNCTION(shadow) +{ + memset(shadow_globals, 0, sizeof(zend_shadow_globals)); + zend_hash_init(&shadow_globals->cache, 10, NULL, ZVAL_INTERNAL_PTR_DTOR, 1); // persistent! + zend_hash_init(&shadow_globals->replaced_function_table, 10, NULL, ZVAL_PTR_DTOR, 1); + // initial size 10 here is a common sense - look at the number of overriden functions +} +/* }}} */ + +/* {{{ php_shadow_shutdown_globals + */ +static PHP_GSHUTDOWN_FUNCTION(shadow) +{ + shadow_cache_clean(); + zend_hash_clean(&shadow_globals->replaced_function_table); + zend_hash_destroy(&shadow_globals->replaced_function_table); + zend_hash_destroy(&shadow_globals->cache); +} +/* }}} */ + +/* {{{ shadow_module_entry + */ +zend_module_entry shadow_module_entry = { + STANDARD_MODULE_HEADER, + "shadow", + shadow_functions, + PHP_MINIT(shadow), + PHP_MSHUTDOWN(shadow), + PHP_RINIT(shadow), + PHP_RSHUTDOWN(shadow), + PHP_MINFO(shadow), + SHADOW_VERSION, + PHP_MODULE_GLOBALS(shadow), + PHP_GINIT(shadow), + PHP_GSHUTDOWN(shadow), + NULL, + STANDARD_MODULE_PROPERTIES_EX +}; +/* }}} */ + +#ifdef COMPILE_DL_SHADOW +ZEND_GET_MODULE(shadow) +#endif + +/* {{{ PHP_INI + */ +PHP_INI_BEGIN() + STD_PHP_INI_ENTRY("shadow.enabled", "1", PHP_INI_ALL, OnUpdateBool, enabled, zend_shadow_globals, shadow_globals) + STD_PHP_INI_ENTRY("shadow.mkdir_mask", "0755", PHP_INI_ALL, OnUpdateLong, mkdir_mask, zend_shadow_globals, shadow_globals) + STD_PHP_INI_ENTRY("shadow.debug", "0", PHP_INI_ALL, OnUpdateLong, debug, zend_shadow_globals, shadow_globals) + STD_PHP_INI_ENTRY("shadow.cache_size", "10000", PHP_INI_ALL, OnUpdateLong, cache_size, zend_shadow_globals, shadow_globals) + STD_PHP_INI_ENTRY("shadow.override", "", PHP_INI_SYSTEM, OnUpdateString, override, zend_shadow_globals, shadow_globals) +PHP_INI_END() +/* }}} */ + +#define SHADOW_CONSTANT(C) REGISTER_LONG_CONSTANT(#C, C, CONST_CS | CONST_PERSISTENT) + +/* {{{ SHADOW_OVERRIDE + * Use this macros to override php function with shadow analogue. E.g.: + * SHADOW_OVERRIDE(fread); + * It requires shadow_fread() function to be defined and have exactly the same signature as fread() function. + */ +#define SHADOW_OVERRIDE(func) \ + orig_##func = NULL; \ + zend_string * key_##func = zend_string_init(#func, strlen(#func), 0);\ + if ((orig = zend_hash_find_ptr(CG(function_table), key_##func)) != NULL) { \ + orig_##func = orig->internal_function.handler; \ + orig->internal_function.handler = shadow_##func; \ + } \ + zend_string_release_ex(key_##func, 0); +/* }}} */ + +#define SHADOW_ENABLED() (SHADOW_G(enabled) != 0 && SHADOW_G(instance) != NULL && SHADOW_G(template) != NULL) + +static void shadow_override_function(char *fname, size_t fname_len, int argno, int argtype) +{ + zend_function *orig; + shadow_function *override = pemalloc(sizeof(shadow_function), 1); + HashTable *table = CG(function_table); + char *col; + zend_string *fname_full = zend_string_init(fname, fname_len, 1); + zend_class_entry *cls; + + if((col = strchr(fname, ':')) != NULL) { + *col = '\0'; + zend_string *fname_zs = zend_string_init(fname, col - fname, 0); + if ((cls = zend_hash_find_ptr(CG(class_table), fname_zs)) == NULL) { + return; + } + + zend_string_release_ex(fname_zs, 0); + table = &cls->function_table; + fname = col+2; + fname_len = strlen(fname); + } + + zend_string *fname_zs = zend_string_init(fname, strlen(fname), 0); + + if ((orig = zend_hash_find_ptr(table, fname_zs)) == NULL) { + zend_string_release_ex(fname_zs, 0); + return; + } + + override->orig_handler = orig->internal_function.handler; + override->argno = argno; + override->argtype = argtype; + zend_hash_add_new_ptr(&SHADOW_G(replaced_function_table), fname_full, override); + + orig->internal_function.handler = shadow_generic_override; + + zend_string_release_ex(fname_zs, 0); + zend_string_release_ex(fname_full, 1); +} + +static void shadow_undo_override(char *fname, size_t fname_len, int argno, int argtype) +{ + zend_function *orig; + shadow_function *override; + HashTable *table = CG(function_table); + char *col; + zend_string *fname_full = zend_string_init(fname, fname_len, 1); + zend_class_entry *cls; + + if((col = strchr(fname, ':')) != NULL) { + *col = '\0'; + zend_string *fname_zs = zend_string_init(fname, col - fname, 0); + if ((cls = zend_hash_find_ptr(CG(class_table), fname_zs)) == NULL) { + return; + } + + zend_string_release_ex(fname_zs, 0); + table = &cls->function_table; + fname = col+2; + fname_len = strlen(fname); + } + + zend_string *fname_zs = zend_string_init(fname, strlen(fname), 0); + + if ((orig = zend_hash_find_ptr(table, fname_zs)) == NULL) { + zend_string_release_ex(fname_zs, 0); + return; + } + + if ((override = zend_hash_find_ptr(&SHADOW_G(replaced_function_table), fname_full)) == NULL) { + zend_string_release_ex(fname_zs, 0); + return; + } + + orig->internal_function.handler = override->orig_handler; + + zend_hash_del(&SHADOW_G(replaced_function_table), fname_full); + pefree(override, 1); + + zend_string_release_ex(fname_full, 1); + zend_string_release_ex(fname_zs, 0); +} + + +/* {{{ PHP_MINIT_FUNCTION + */ +PHP_MINIT_FUNCTION(shadow) +{ + zend_function *orig; + + REGISTER_INI_ENTRIES(); + + SHADOW_CONSTANT(SHADOW_DEBUG_FULLPATH); + SHADOW_CONSTANT(SHADOW_DEBUG_OPEN); + SHADOW_CONSTANT(SHADOW_DEBUG_STAT); + SHADOW_CONSTANT(SHADOW_DEBUG_MKDIR); + SHADOW_CONSTANT(SHADOW_DEBUG_OPENDIR); + SHADOW_CONSTANT(SHADOW_DEBUG_RESOLVE); + SHADOW_CONSTANT(SHADOW_DEBUG_UNLINK); + SHADOW_CONSTANT(SHADOW_DEBUG_RENAME); + SHADOW_CONSTANT(SHADOW_DEBUG_PATHCHECK); + SHADOW_CONSTANT(SHADOW_DEBUG_ENSURE); + SHADOW_CONSTANT(SHADOW_DEBUG_FAIL); + SHADOW_CONSTANT(SHADOW_DEBUG_TOUCH); + SHADOW_CONSTANT(SHADOW_DEBUG_CHMOD); + SHADOW_CONSTANT(SHADOW_DEBUG_OVERRIDE); + + plain_ops = php_plain_files_wrapper.wops; + + memcpy(&shadow_wrapper_ops, plain_ops, sizeof(shadow_wrapper_ops)); + shadow_wrapper_ops.stream_opener = shadow_stream_opener; + shadow_wrapper_ops.url_stat = shadow_stat; + shadow_wrapper_ops.unlink = shadow_unlink; + shadow_wrapper_ops.rename = shadow_rename; + shadow_wrapper_ops.stream_mkdir = shadow_mkdir; + shadow_wrapper_ops.stream_rmdir = shadow_rmdir; + shadow_wrapper_ops.dir_opener = shadow_dir_opener; + shadow_wrapper_ops.label = "shadow"; + if(SHADOW_G(enabled)) { + original_zend_resolve_path = zend_resolve_path; + zend_resolve_path = shadow_resolve_path; + } + + SHADOW_OVERRIDE(touch); + SHADOW_OVERRIDE(chmod); + SHADOW_OVERRIDE(chdir); + SHADOW_OVERRIDE(fread); + SHADOW_OVERRIDE(realpath); + SHADOW_OVERRIDE(is_writable); + SHADOW_OVERRIDE(glob); + + /* Override functions. Config format: + * shadow.override=func1,func2@w1,func2,class::func4 + */ + if(SHADOW_G(enabled) && SHADOW_G(override) && SHADOW_G(override)[0] != '\0') { + char *over = SHADOW_G(override); + size_t over_len; + char c; + int argno; + int argtype; + /* Save this for shutdown */ + SHADOW_G(shadow_override_copy) = estrdup(SHADOW_G(override)); + while(*over) { + char *next = strchr(over, ','); + if(!next) { + next = over+strlen(over); + } + for(over_len=0;over_lenval : ""); + add_assoc_string(return_value, "instance", SHADOW_G(instance) ? SHADOW_G(instance)->val : ""); + array_init_size(&instance_only, SHADOW_G(instance_only_count)); + for(i=0;i= len) && (memcmp(dir, SHADOW_G(instance_only)[i], len) == 0) && (!dir[len] || IS_SLASH(dir[len]))) { + return 1; + } + } + + return 0; +} + +/* + * Check if the path is inside "instance only" area +*/ +static int is_instance_only(const char *filename) +{ + char *realpath = NULL; + int fnamelen = strlen(filename); + int result; + + if(!SHADOW_ENABLED() || SHADOW_G(instance_only) == NULL) { + return 0; + } + + if(!IS_ABSOLUTE_PATH(filename, fnamelen)) { + realpath = expand_filepath(filename, NULL); + if(!realpath) { + return 0; + } + filename = realpath; + fnamelen = strlen(realpath); + } + + if ((ZSTR_LEN(SHADOW_G(template)) + 1 <= fnamelen) + && (memcmp(ZSTR_VAL(SHADOW_G(template)), filename, ZSTR_LEN(SHADOW_G(template))) == 0) + && IS_SLASH(filename[ZSTR_LEN(SHADOW_G(template))]) + ) { + result = instance_only_subdir(filename + ZSTR_LEN(SHADOW_G(template)) + 1); + if(realpath) { + efree(realpath); + } + return result; + } + + if ((ZSTR_LEN(SHADOW_G(instance)) + 1 <= fnamelen) + && (memcmp(ZSTR_VAL(SHADOW_G(instance)), filename, ZSTR_LEN(SHADOW_G(instance))) == 0) + && IS_SLASH(filename[ZSTR_LEN(SHADOW_G(instance))]) + ) { + result = instance_only_subdir(filename + ZSTR_LEN(SHADOW_G(instance)) + 1); + if(realpath) { + efree(realpath); + } + return result; + } + if (realpath) { + efree(realpath); + } + return 0; +} + +/* + * Check if path is subdir of dir + */ +static inline int is_subdir_of(const char *dir, int dirlen, const char *path, int pathlen) +{ + if(dirlen+1 < pathlen && + memcmp(dir, path, dirlen) == 0 && + IS_SLASH(path[dirlen])) { + return 1; + } + return 0; +} + +static char *get_full_path(const char *filename) +{ + cwd_state new_state; + + if(!SHADOW_G(curdir)) { + SHADOW_G(curdir) = getcwd(NULL, 0); + } + + new_state.cwd = cwd_state_estrdup(SHADOW_G(curdir)); + new_state.cwd_length = strlen(SHADOW_G(curdir)); + if (virtual_file_ex(&new_state, filename, NULL, CWD_FILEPATH)) { + if(new_state.cwd) { + cwd_state_efree(new_state.cwd); + } + return NULL; + } + char *full_path = estrndup(new_state.cwd, new_state.cwd_length); + if (new_state.cwd) { + cwd_state_efree(new_state.cwd); + } + return full_path; +} + +static inline char *instance_to_template(const char *instname, int len) +{ + char *newname = NULL; + if (SHADOW_ENABLED()) { + if (is_subdir_of(ZSTR_VAL(SHADOW_G(template)), ZSTR_LEN(SHADOW_G(template)), instname, len)) { + newname = estrndup(instname, len); + } else if (is_subdir_of(ZSTR_VAL(SHADOW_G(instance)), ZSTR_LEN(SHADOW_G(instance)), instname, len)) { + spprintf( + &newname, + MAXPATHLEN, + "%s/%s", + ZSTR_VAL(SHADOW_G(template)), + instname + ZSTR_LEN(SHADOW_G(instance)) + 1 + ); + } + } + return newname; +} + +/* check if file exists */ +#define OPT_CHECK_EXISTS 1 +/* do not cache resolution result */ +#define OPT_SKIP_CACHE 2 +/* if given instance path, return realpath */ +#define OPT_RETURN_INSTANCE 4 + +/* +Returns new instance path or NULL if template path is OK +filename is relative to template root +*/ +static char *template_to_instance(const char *filename, int options) +{ + char *realpath = NULL; + char *newname = NULL; + int fnamelen = strlen(filename); + + if (!SHADOW_ENABLED()) { + return NULL; + } + + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: ENTER '%s', options: %d (CHK_EX=%s, RET_INST=%s)\\n", filename, options, (options & OPT_CHECK_EXISTS) ? "Y" : "N", (options & OPT_RETURN_INSTANCE) ? "Y" : "N"); + } + + // Initial attempt to get the real path + realpath = get_full_path(filename); + + // If initial get_full_path fails, try to resolve segment by segment considering overrides + if (!realpath && strncmp(filename, SHADOW_G(template)->val, ZSTR_LEN(SHADOW_G(template))) == 0) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: Initial get_full_path failed for '%s'. Attempting segmented resolution.\\n", filename); + } + const char *template_root = SHADOW_G(template)->val; + size_t template_root_len = ZSTR_LEN(SHADOW_G(template)); + const char *relative_path_in_template = filename + template_root_len; + if (IS_SLASH(*relative_path_in_template)) relative_path_in_template++; + + char *current_resolved_parent_abs = estrdup(SHADOW_G(instance)->val); + char *remaining_path_part = estrdup(relative_path_in_template); + char *segment = NULL; + + char *temp_path_to_check = NULL; + bool possible_resolution = true; + + while ((segment = php_strtok_r(remaining_path_part, "/", &remaining_path_part))) { // Corrected function name + if (!temp_path_to_check) { + spprintf(&temp_path_to_check, 0, "%s/%s", current_resolved_parent_abs, segment); + } else { + char *old_temp_path = temp_path_to_check; + spprintf(&temp_path_to_check, 0, "%s/%s", old_temp_path, segment); + efree(old_temp_path); + } + + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) { + fprintf(stderr, "T2I_REFACTOR: Segment: '%s', Checking effective path: '%s'\\n", segment, temp_path_to_check); + } + + php_stream_statbuf ssb_segment; + if (plain_ops->url_stat(&php_plain_files_wrapper, temp_path_to_check, PHP_STREAM_URL_STAT_QUIET, &ssb_segment, NULL) == 0) { + efree(current_resolved_parent_abs); + current_resolved_parent_abs = estrdup(temp_path_to_check); + if (S_ISDIR(ssb_segment.sb.st_mode)) { + // This segment is a directory, continue to next segment or it is the target itself + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a directory.\\n", temp_path_to_check); + } else { // It is a file + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a file.\\n", temp_path_to_check); + if (remaining_path_part && *remaining_path_part != '\0') { // If it is a file, but there are more segments, this path is invalid for further resolution + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is a file, but has remaining path '%s'. Invalid resolution path.\\n", temp_path_to_check, remaining_path_part); + possible_resolution = false; + break; + } + } + } else { // Stat failed for this segment in instance, resolution fails + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Stat failed for instance segment '%s'.\\n", temp_path_to_check); + possible_resolution = false; + break; + } + } // End while strtokr + + if (possible_resolution && current_resolved_parent_abs) { // current_resolved_parent_abs is actually the full resolved path here + realpath = get_full_path(current_resolved_parent_abs); // Normalize the successfully resolved instance path + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Segmented resolution resulted in realpath: '%s'\\n", realpath ? realpath : "NULL"); + } + + if (current_resolved_parent_abs) efree(current_resolved_parent_abs); + if (remaining_path_part && strlen(remaining_path_part) == 0) { /* php_strtokr makes it empty not NULL */ efree(remaining_path_part); } + else if (remaining_path_part == NULL && segment != NULL) { /* Path was just one segment */ } + else if (remaining_path_part) { efree(remaining_path_part); } + + + if (temp_path_to_check) efree(temp_path_to_check); + } // End if !realpath initial attempt + + if (realpath) { + fnamelen = strlen(realpath); + while (IS_SLASH(realpath[fnamelen - 1]) && fnamelen > 1) { + realpath[fnamelen - 1] = '\0'; + fnamelen--; + } + if (SHADOW_G(debug) & SHADOW_DEBUG_FULLPATH) fprintf(stderr, "T2I_REFACTOR: Final realpath for checks: %s (len %d)\\n", realpath, fnamelen); + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: No valid realpath found for '%s'.\\n", filename); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return NULL; // Cannot resolve path + } + + // Main resolution logic based on realpath + if (is_subdir_of(SHADOW_G(template)->val, ZSTR_LEN(SHADOW_G(template)), realpath, fnamelen)) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is in TEMPLATE territory.\\n", realpath); + if ((options & OPT_CHECK_EXISTS) && shadow_cache_get(realpath, &newname) == SUCCESS) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Cache hit for '%s' => '%s'\\n", realpath, newname ? newname : "NULL"); + if (realpath) efree(realpath); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return newname; + } + spprintf(&newname, 0, "%s/%s", SHADOW_G(instance)->val, realpath + ZSTR_LEN(SHADOW_G(template)) + 1); + if ((options & OPT_CHECK_EXISTS) && !instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(template)) + 1)) { + if (VCWD_ACCESS(newname, F_OK) != 0) { // Instance override does not exist + efree(newname); + newname = NULL; // Fallback to template path (original realpath) + } + } + if (!(options & OPT_SKIP_CACHE)) shadow_cache_put(realpath, newname); + } else if (is_subdir_of(SHADOW_G(instance)->val, ZSTR_LEN(SHADOW_G(instance)), realpath, fnamelen)) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is in INSTANCE territory.\\n", realpath); + if (options & OPT_CHECK_EXISTS) { + if (!instance_only_subdir(realpath + ZSTR_LEN(SHADOW_G(instance)) + 1) && VCWD_ACCESS(realpath, F_OK) != 0) { + spprintf(&newname, 0, "%s/%s", SHADOW_G(template)->val, realpath + ZSTR_LEN(SHADOW_G(instance)) + 1); + } else { // Exists in instance or is instance_only + if (options & OPT_RETURN_INSTANCE) newname = estrdup(realpath); + else newname = NULL; // Indicates use original path, but it is an instance path already + } + } else { // Not checking existence, assume write, so use instance path + newname = estrdup(realpath); + } + } else if ((options & OPT_RETURN_INSTANCE) && strncmp(ZSTR_VAL(SHADOW_G(instance)), realpath, ZSTR_LEN(SHADOW_G(instance))) == 0 && (realpath[ZSTR_LEN(SHADOW_G(instance))] == '\0' || IS_SLASH(realpath[ZSTR_LEN(SHADOW_G(instance))]))) { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' IS the instance directory itself.\\n", realpath); + newname = estrdup(realpath); + } else { + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: Path '%s' is outside template/instance or doesn't meet criteria.\\n", realpath); + // Path is outside defined shadow areas, or no specific override logic applies. newname remains NULL. + } + + if (realpath) efree(realpath); + if (SHADOW_G(debug) & SHADOW_DEBUG_PATHCHECK) fprintf(stderr, "T2I_REFACTOR: EXIT for '%s', returning '%s'\\n", filename, newname ? newname : "NULL (use original)"); + if (SHADOW_G(curdir)) { free(SHADOW_G(curdir)); SHADOW_G(curdir) = NULL; } + return newname; +} + +static void clean_cache_dir(const char *clean_dirname) +{ + int len = strlen(clean_dirname); + char *dirname = instance_to_template(clean_dirname, len); + if(!dirname) return; /* not an instance dir */ + len = strlen(dirname); + shadow_cache_remove(dirname); + while (len > ZSTR_LEN(SHADOW_G(template))) { + while (len > ZSTR_LEN(SHADOW_G(template)) && !IS_SLASH(dirname[len])) len--; + /* remove both one with slash at the end and without it, just in case */ + dirname[len+1] = '\0'; + shadow_cache_remove(dirname); + dirname[len] = '\0'; + shadow_cache_remove(dirname); + len--; + } + efree(dirname); +} + +static void ensure_dir_exists(char *pathname, php_stream_wrapper *wrapper, php_stream_context *context) +{ + int dir_len; + if(!pathname) { + return; + } + dir_len = zend_dirname(pathname, strlen(pathname)); + if(VCWD_ACCESS(pathname, F_OK) != 0) { + /* does not exist */ + if(SHADOW_G(debug) & SHADOW_DEBUG_ENSURE) fprintf(stderr, "Creating: %s %ld\n", pathname, SHADOW_G(mkdir_mask)); + plain_ops->stream_mkdir(wrapper, pathname, SHADOW_G(mkdir_mask), PHP_STREAM_MKDIR_RECURSIVE|REPORT_ERRORS, context); + clean_cache_dir(pathname); + } + pathname[dir_len] = '/'; /* restore full path */ +} + +zend_string *shadow_resolve_path(zend_string *filename) +{ + char *shadow_result = template_to_instance(ZSTR_VAL(filename), OPT_CHECK_EXISTS); + zend_string *result = NULL; + // in any case we have to call original resolver because that can be reimplemented by opcache for example + if (shadow_result) { + zend_string *strshadow_result = zend_string_init(shadow_result, strlen(shadow_result), 0); + result = original_zend_resolve_path(strshadow_result); + efree(shadow_result); + zend_string_release(strshadow_result); + } else { + result = original_zend_resolve_path(filename); + } + if (SHADOW_G(debug) & SHADOW_DEBUG_RESOLVE) { + fprintf(stderr, "Resolve: %s -> %s\n", filename ? ZSTR_VAL(filename) : NULL, result ? ZSTR_VAL(result) : NULL); + } + return result; +} + +static php_stream *shadow_stream_opener(php_stream_wrapper *wrapper, const char *filename, const char *mode, + int options, zend_string **opened_path, php_stream_context *context STREAMS_DC) +{ + int flags; + php_stream *res; + if(SHADOW_ENABLED()) { + if(SHADOW_G(debug) & SHADOW_DEBUG_OPEN) fprintf(stderr, "Opening: %s %s\n", filename, mode); + } + if(php_stream_parse_fopen_modes(mode, &flags) == SUCCESS) { + if(flags & (O_WRONLY|O_RDWR)) { + // writing + char *instname = template_to_instance(filename, 0); + if(instname) { + if(SHADOW_G(debug) & SHADOW_DEBUG_OPEN) fprintf(stderr, "Opening instead: %s %s\n", instname, mode); + ensure_dir_exists(instname, wrapper, context); + res = plain_ops->stream_opener(wrapper, instname, mode, options|STREAM_ASSUME_REALPATH, opened_path, context STREAMS_CC); + if(!res && (SHADOW_G(debug) & SHADOW_DEBUG_FAIL)) { + fprintf(stderr, "Open FAIL: %s %s [%d]\n", instname, mode, errno); + } + efree(instname); + return res; + } + } else { + // reading + char *instname = template_to_instance(filename, OPT_CHECK_EXISTS); + if(instname) { + if(SHADOW_G(debug) & SHADOW_DEBUG_OPEN) fprintf(stderr, "Opening instead: %s %s\n", instname, mode); + res = plain_ops->stream_opener(wrapper, instname, mode, options|STREAM_ASSUME_REALPATH, opened_path, context STREAMS_CC); + if(!res && (SHADOW_G(debug) & SHADOW_DEBUG_FAIL)) { + fprintf(stderr, "Open FAIL: %s %s [%d]\n", instname, mode, errno); + } + efree(instname); + return res; + } + } + } + return plain_ops->stream_opener(wrapper, filename, mode, options, opened_path, context STREAMS_CC); +} + +/** + * PHP uses access() for plain files, but manual mask matches for stream files. + * This leads to the problem that is_writable() returns false for root if filemask is not other-write + * This hack sets mode to 777 if current user is root + */ +static void adjust_stat(php_stream_statbuf *ssb) +{ + if(geteuid() == 0) { + ssb->sb.st_mode |= 0777; + } +} + +static int shadow_stat(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context) +{ + char *instname = NULL; + int res = -1; + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: ENTER URL: %s, Flags: %d\n", url, flags); + } + + if (SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "STAT_DEBUG: Values: OCE=%d, ORI=%d, Combo=%d. About to call t2i for '%s' with options: %d\\n", OPT_CHECK_EXISTS, OPT_RETURN_INSTANCE, (OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE), url, (OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE)); + } + instname = template_to_instance(url, OPT_CHECK_EXISTS | OPT_RETURN_INSTANCE); + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Resolved Instance Name: %s (original URL: %s)\n", instname ? instname : "NULL", url); + } + + if (instname) { + res = plain_ops->url_stat(wrapper, instname, flags, ssb, context); + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Stat on INSTANCE '%s': Result: %d\n", instname, res); + } + efree(instname); + } else { + res = plain_ops->url_stat(wrapper, url, flags, ssb, context); + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: Stat on ORIGINAL '%s': Result: %d\n", url, res); + } + } + + if (res == 0) { + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + // The term (instname ? "used_instance_path" : url) refers to the state of 'instname' variable here. + // If instname was used and efree'd, this pointer is dangling. + // A safer way would be to use a temporary variable to store which path was used for stat. + // However, sticking to the direct C code translation from the awk script's print statements. + fprintf(stderr, "shadow_stat: SUCCESS for '%s': Mode: %07o (octal), UID: %d, GID: %d\n", (instname ? "used_instance_path_potentially_freed" : url), ssb->sb.st_mode, ssb->sb.st_uid, ssb->sb.st_gid); + if (S_ISDIR(ssb->sb.st_mode)) fprintf(stderr, "shadow_stat: Type for '%s': Directory\n", (instname ? "used_instance_path_potentially_freed" : url)); + else if (S_ISREG(ssb->sb.st_mode)) fprintf(stderr, "shadow_stat: Type for '%s': File\n", (instname ? "used_instance_path_potentially_freed" : url)); + else fprintf(stderr, "shadow_stat: Type for '%s': Other\n", (instname ? "used_instance_path_potentially_freed" : url)); + } + adjust_stat(ssb); + } else { + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: FAILED for '%s', errno: %d\n", (instname ? "used_instance_path_potentially_freed" : url), errno); + } + } + + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) { + fprintf(stderr, "shadow_stat: EXIT URL: %s, Result: %d\n", url, res); + } + return res; +} + +static int shadow_unlink(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context) +{ + char *instname = template_to_instance(url, 0); + int res; + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_UNLINK) fprintf(stderr, "Unlink: %s (%s) %d\n", url, instname, options); + if(instname) { + url = instname; + if(SHADOW_ENABLED()) { + char *tempname = instance_to_template(instname, strlen(instname)); + if(tempname) { + shadow_cache_remove(tempname); + efree(tempname); + } + } + } + res = plain_ops->unlink(wrapper, url, options, context); + if(instname) { + efree(instname); + } + return res; +} + +static int shadow_rename(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context) +{ + char *fromname = template_to_instance(url_from, OPT_CHECK_EXISTS); + char *toname = template_to_instance(url_to, 0); + int res; + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_RENAME) fprintf(stderr, "Rename: %s(%s) -> %s(%s) %d\n", url_from, fromname, url_to, toname, options); + if(SHADOW_ENABLED()) { + shadow_cache_remove(url_from); + } + if(fromname) { + url_from = fromname; + } + if(toname) { + url_to = toname; + } + res = plain_ops->rename(wrapper, url_from, url_to, options, context); + if(!res && SHADOW_ENABLED() && (SHADOW_G(debug) & SHADOW_DEBUG_FAIL)) { + fprintf(stderr, "Rename FAIL: %s -> %s [%d]\n", url_from, url_to, errno); + } + if(fromname) { + efree(fromname); + } + if(toname) { + efree(toname); + } + return res; +} + +static int shadow_mkdir(php_stream_wrapper *wrapper, const char *dir, int mode, int options, php_stream_context *context) +{ + char *instname = template_to_instance(dir, 0); + int res; + if(instname) { + dir = instname; + /* always use recursive to create unexisting paths */ + options |= PHP_STREAM_MKDIR_RECURSIVE; + } + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_MKDIR) fprintf(stderr, "Mkdir: %s (%s) %d %d\n", dir, instname, mode, options); + res = plain_ops->stream_mkdir(wrapper, dir, mode, options, context); + clean_cache_dir(dir); + if(SHADOW_ENABLED() && !res && (SHADOW_G(debug) & SHADOW_DEBUG_FAIL)) { + fprintf(stderr, "Mkdir FAIL: %s %d %d [%d]\n", dir, mode, options, errno); + } + if(instname) { + efree(instname); + } + return res; +} + +static int shadow_rmdir(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context) +{ + char *instname = template_to_instance(url, 0); + int res; + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_MKDIR) fprintf(stderr, "Rmdir: %s (%s) %d\n", url, instname, options); + if(SHADOW_ENABLED()) { + shadow_cache_remove(url); + } + if(instname) { + url = instname; + } + res = plain_ops->stream_rmdir(wrapper, url, options, context); + if(instname) { + efree(instname); + } + return res; +} + +static php_stream *shadow_dir_opener(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC) +{ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: ENTER Path: %s, Mode: %s\\n", path, mode); + char *instname; + php_stream *tempdir = NULL, *instdir, *mergestream; + HashTable *mergedata; + php_stream_dirent entry; + void *dummy = (void *)1; + char *templname = NULL; + + if(options & STREAM_USE_GLOB_DIR_OPEN) { + /* not dealing with globs yet */ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opening glob dir: %s\n", path); + return plain_ops->dir_opener(wrapper, path, mode, options, opened_path, context STREAMS_CC); + } + if(is_instance_only(path)) { + /* if it's instance-only dir, we won't merge in any case */ + instname = template_to_instance(path, 0); + if(SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opening instance only: %s\n", path); + instdir = plain_ops->dir_opener(wrapper, instname, mode, options, opened_path, context STREAMS_CC); + efree(instname); + return instdir; + } + instname = template_to_instance(path, OPT_CHECK_EXISTS|OPT_RETURN_INSTANCE); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opendir: %s (%s)\n", path, instname); + if(!instname) { + /* we don't have instance dir, don't bother with merging */ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opening template: %s\n", path); + return plain_ops->dir_opener(wrapper, path, mode, options, opened_path, context STREAMS_CC); + } + + instdir = plain_ops->dir_opener(wrapper, instname, mode, options&(~REPORT_ERRORS), opened_path, context STREAMS_CC); + if(!instdir) { + /* instance dir failed, return just template one */ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opening template w/o instance: %s\n", path); + efree(instname); + return plain_ops->dir_opener(wrapper, path, mode, options, opened_path, context STREAMS_CC); + } + + if (is_subdir_of(ZSTR_VAL(SHADOW_G(template)), ZSTR_LEN(SHADOW_G(template)), instname, strlen(instname))) { + /* instname is in a template, we don't need another template name */ + } else { + if (strlen(instname) > ZSTR_LEN(SHADOW_G(instance))) { + spprintf( + &templname, + MAXPATHLEN, + "%s/%s", + ZSTR_VAL(SHADOW_G(template)), + instname + ZSTR_LEN(SHADOW_G(instance)) + 1 + ); + } else { + templname = estrdup(ZSTR_VAL(SHADOW_G(template))); + } + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Opening templdir: %s\n", templname); + tempdir = plain_ops->dir_opener(wrapper, templname, mode, options&(~REPORT_ERRORS), opened_path, context STREAMS_CC); + efree(templname); + } + efree(instname); + if(!tempdir) { + /* template dir failed, return just instance */ + return instdir; + } + /* now we have both dirs, so we need to create a merge dir */ + /* TODO: figure out why we need these flags */ + instdir->flags |= PHP_STREAM_FLAG_NO_BUFFER; + tempdir->flags |= PHP_STREAM_FLAG_NO_BUFFER; + + ALLOC_HASHTABLE(mergedata); + zend_hash_init(mergedata, 10, NULL, NULL, 0); + while(php_stream_readdir(tempdir, &entry)) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: Adding from TEMPLATE to mergedata: %s\\n", entry.d_name); + zend_hash_str_add_new_ptr(mergedata, entry.d_name, strlen(entry.d_name), &dummy); + } + while(php_stream_readdir(instdir, &entry)) { + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: %s\\n", entry.d_name); + zend_hash_str_update_ptr(mergedata, entry.d_name, strlen(entry.d_name), &dummy); + } + zend_hash_internal_pointer_reset(mergedata); + php_stream_free(instdir, PHP_STREAM_FREE_CLOSE); + php_stream_free(tempdir, PHP_STREAM_FREE_CLOSE); + + /* give back the data as stream */ + mergestream = php_stream_alloc(&shadow_dirstream_ops, mergedata, 0, mode); + if(!mergestream) { + zend_hash_destroy(mergedata); + FREE_HASHTABLE(mergedata); + return NULL; + } + return mergestream; +} + +static ssize_t shadow_dirstream_read(php_stream *stream, char *buf, size_t count) +{ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) { + zend_string *current_key = NULL; zend_ulong current_num; + zend_hash_get_current_key((HashTable *)stream->abstract, ¤t_key, ¤t_num); + if (current_key) { + fprintf(stderr, "shadow_dirstream_read: Attempting to read entry: %s\\n", ZSTR_VAL(current_key)); + } else { + fprintf(stderr, "shadow_dirstream_read: Attempting to read entry (non-string key or end of hash)\\n"); + } + } + php_stream_dirent *ent = (php_stream_dirent*)buf; + HashTable *mergedata = (HashTable *)stream->abstract; + zend_string *name = NULL; + zend_ulong num; + + /* avoid problems if someone mis-uses the stream */ + if (count != sizeof(php_stream_dirent)) + return 0; + + if (zend_hash_get_current_key(mergedata, &name, &num) != HASH_KEY_IS_STRING) { + return 0; + } + if(!ZSTR_VAL(name) || !ZSTR_LEN(name)) { + return 0; + } + zend_hash_move_forward(mergedata); + + PHP_STRLCPY(ent->d_name, ZSTR_VAL(name), sizeof(ent->d_name), ZSTR_LEN(name)); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "shadow_dirstream_read: Copied to dirent: %s\\n", ent->d_name); + return sizeof(php_stream_dirent); +} + +static int shadow_dirstream_close(php_stream *stream, int close_handle) +{ + zend_hash_destroy((HashTable *)stream->abstract); + FREE_HASHTABLE(stream->abstract); + return 0; +} + +static int shadow_dirstream_rewind(php_stream *stream, off_t offset, int whence, off_t *newoffs) +{ + zend_hash_internal_pointer_reset((HashTable *)stream->abstract); + return 0; +} + +/* +Find Nth argument of a current function call +*/ +static zval *shadow_get_arg(int arg) +{ + if(!EG(current_execute_data)) { + return NULL; + } + + zend_execute_data *ex = EG(current_execute_data); + if (arg >= ex->func->common.num_args) { + return NULL; + } + + return ZEND_CALL_ARG(ex, arg + 1); +} + +/* + * Call original function while replacing name parameter with repname + */ +static int shadow_call_replace_name_ex(zval *name, char *repname, void (*orig_func)(INTERNAL_FUNCTION_PARAMETERS), INTERNAL_FUNCTION_PARAMETERS) +{ + zend_string *old_name; + zend_string *new_name; + old_name = Z_STR_P(name); + new_name = zend_string_init(repname, strlen(repname), 1); + efree(repname); + Z_STR_P(name) = new_name; + orig_func(INTERNAL_FUNCTION_PARAM_PASSTHRU); + Z_STR_P(name) = old_name; + zend_string_release_ex(new_name, 1); + return SUCCESS; +} + +/* + * Call original function while replacing name parameter with repname + */ +static int shadow_call_replace_name(int param, char *repname, void (*orig_func)(INTERNAL_FUNCTION_PARAMETERS), INTERNAL_FUNCTION_PARAMETERS) +{ + zval *name; + name = shadow_get_arg(param); + if (!name) { + orig_func(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return FAILURE; + } + return shadow_call_replace_name_ex(name, repname, orig_func, INTERNAL_FUNCTION_PARAM_PASSTHRU); +} + +/* + * Check if this file belongs to us + */ +static int shadow_stream_check(char *filename) +{ + php_stream_wrapper *wrapper; + wrapper = php_stream_locate_url_wrapper(filename, NULL, 0); + return wrapper == &php_plain_files_wrapper || wrapper == &shadow_wrapper; +} + +/* {{{ proto bool touch(string filename [, int time [, int atime]]) + Set modification time of file */ +static void shadow_touch(INTERNAL_FUNCTION_PARAMETERS) +{ + char *filename; + size_t filename_len; + zend_long filetime = 0, fileatime = 0; + char *instname; + + if(!SHADOW_ENABLED()) { + orig_touch(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|ll", &filename, &filename_len, &filetime, &fileatime) == FAILURE) { + return; + } + if(!shadow_stream_check(filename)) { + orig_touch(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_TOUCH) fprintf(stderr, "Touch*** \n"); + instname = template_to_instance(filename, 0); + + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_TOUCH) fprintf(stderr, "Touching %s (%s)\n", filename, instname); + if(instname) { + ensure_dir_exists(instname, &shadow_wrapper, NULL); + shadow_call_replace_name(0, instname, orig_touch, INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_TOUCH) fprintf(stderr, "Touch: Using original touch function\n"); + orig_touch(INTERNAL_FUNCTION_PARAM_PASSTHRU); +} + +/* {{{ proto bool chmod(string filename, int mode) + Change file mode */ +static void shadow_chmod(INTERNAL_FUNCTION_PARAMETERS) +{ + char *filename; + size_t filename_len; + zend_long mode; + char *instname; + + if(!SHADOW_ENABLED()) { + orig_chmod(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl", &filename, &filename_len, &mode) == FAILURE) { + return; + } + if(!shadow_stream_check(filename)) { + orig_chmod(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + instname = template_to_instance(filename, OPT_CHECK_EXISTS); + + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_CHMOD) fprintf(stderr, "Chmod %s (%s) %lo\n", filename, instname, mode); + /* Clear cache because PHP caches non-plain-file stats */ + php_clear_stat_cache(0, NULL, 0); + + if(instname) { + shadow_call_replace_name(0, instname, orig_chmod, INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + orig_chmod(INTERNAL_FUNCTION_PARAM_PASSTHRU); +} + +/* {{{ proto bool chdir(string filename) + Change current dir */ +static void shadow_chdir(INTERNAL_FUNCTION_PARAMETERS) +{ + char *str; + size_t str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &str, &str_len) == FAILURE) { + RETURN_FALSE; + } + if(SHADOW_G(curdir)) { + free(SHADOW_G(curdir)); + SHADOW_G(curdir) = NULL; + } + orig_chdir(INTERNAL_FUNCTION_PARAM_PASSTHRU); +} + +/* {{{ proto string fread(resource fp, int length) + Binary-safe file read */ +static void shadow_fread(INTERNAL_FUNCTION_PARAMETERS) +{ + zval *arg1; + zend_long len; + php_stream *stream; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &arg1, &len) == FAILURE) { + RETURN_FALSE; + } + + php_stream_from_zval(stream, arg1); + if(stream->wrapper == &shadow_wrapper) { + zend_string *contents = NULL; + + if (len <= 0) { + php_error_docref(NULL, E_WARNING, "Length parameter must be greater than 0"); + RETURN_FALSE; + } + + contents = php_stream_copy_to_mem(stream, len, 0); + if (contents) { + + RETVAL_STRINGL(ZSTR_VAL(contents), contents->len); + efree(contents); + } else { + RETVAL_EMPTY_STRING(); + } + } else { + orig_fread(INTERNAL_FUNCTION_PARAM_PASSTHRU); + } +} +/* }}} */ + +/* {{{ proto string realpath(string path) + Return the resolved path */ +static void shadow_realpath(INTERNAL_FUNCTION_PARAMETERS) +{ + char *filename; + size_t filename_len; + char *instname, *copy_name = NULL; + + if(!SHADOW_ENABLED()) { + orig_realpath(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &filename, &filename_len) == FAILURE) { + return; + } + if(!shadow_stream_check(filename)) { + orig_realpath(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + instname = template_to_instance(filename, OPT_SKIP_CACHE); + + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_RESOLVE) fprintf(stderr, "Realpath %s (%s)\n", filename, instname); + + if(instname) { + copy_name = estrdup(instname); + shadow_call_replace_name(0, instname, orig_realpath, INTERNAL_FUNCTION_PARAM_PASSTHRU); + if(Z_TYPE_P(return_value) == IS_STRING) { + return; + } + } + + orig_realpath(INTERNAL_FUNCTION_PARAM_PASSTHRU); + if(Z_TYPE_P(return_value) == IS_STRING) { + if(copy_name) { + efree(copy_name); + } + return; + } + if(copy_name) { + ZVAL_STRING(return_value, copy_name); + efree(copy_name); + } +} +/* }}} */ + +/* {{{ proto bool is_writable(string filename) + Returns true if file can be written */ +static void shadow_is_writable(INTERNAL_FUNCTION_PARAMETERS) +{ + char *filename = NULL; + size_t filename_len; + char *instname; + + if(!SHADOW_ENABLED()) { + orig_is_writable(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &filename, &filename_len) == FAILURE) { + return; + } + if(!shadow_stream_check(filename)) { + orig_is_writable(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + instname = template_to_instance(filename, OPT_SKIP_CACHE); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_STAT) fprintf(stderr, "is_writable %s (%s)\n", filename, instname); + if(!instname) { + /* Didn't find anything - use original handler */ + orig_is_writable(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + ensure_dir_exists(instname, &shadow_wrapper, NULL); + /* Check whether dir containing the file is writable */ + shadow_call_replace_name(0, instname, orig_is_writable, INTERNAL_FUNCTION_PARAM_PASSTHRU); +} +/* }}} */ + +/* {{{ proto array glob(string pattern [, int flags]) + Find pathnames matching a pattern */ +static void shadow_glob(INTERNAL_FUNCTION_PARAMETERS) +{ + char *filename = NULL; + size_t filename_len; + zend_long flags; + char *instname=NULL, *templname=NULL, *mask=NULL, *path=NULL; + zval instdata, templdata; + zval *src_entry; + HashTable *mergedata; + void *dummy = (void *)1; + int instlen, templen; + int skip_template=0; + + if(!SHADOW_ENABLED()) { + orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &filename, &filename_len, &flags) == FAILURE) { + return; + } + if(!shadow_stream_check(filename)) { + orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); + return; + } + + mask = strpbrk(filename, "*?["); + if(!mask) { + mask = filename+filename_len; + } + while(--mask > filename && !IS_SLASH(*mask)); /* look up for slash */ + path = estrndup(filename, (mask - filename) > 0 ? (mask - filename) : 0); + /* path will be path part up to the directory containing first glob char */ + + if(is_instance_only(path)) { + /* if it's instance-only dir, we won't merge in any case */ + instname = template_to_instance(path, 0); + skip_template = 1; + if(SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Glob instance only: %s (%s)\n", path, instname); + } else { + instname = template_to_instance(path, OPT_CHECK_EXISTS|OPT_RETURN_INSTANCE); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Glob: %s => %s (%s)\n", filename, path, instname); + if(!instname) { + /* we don't have instance dir, don't bother with merging */ + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing template: %s\n", filename); + orig_glob(INTERNAL_FUNCTION_PARAM_PASSTHRU); + efree(path); + return; + } + } + /* here we have instname */ + instlen = strlen(instname); +#if 0 + if(is_subdir_of(SHADOW_G(template), SHADOW_G(template_len), instname, instlen)) { + /* We can get template dir here, if instance dir does not exist, we still have only one directory then */ + instname = erealloc(instname, instlen+strlen(mask)+1); + strcat(instname, mask); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing template(2): %s\n", instname); + shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU); + efree(path); + return; + } +#endif + /* We got instance dir, does template dir exist too? */ + if(!skip_template) { + templname = instance_to_template(instname, instlen); + if(!templname) { + skip_template = 1; + } + } + instname = erealloc(instname, instlen+strlen(mask)+1); + strcat(instname, mask); +#if 0 +/* + * Remove existance check for template - since we'd need to translate names here anyway, we better fall though and have glob return empty + */ + if(VCWD_ACCESS(templname, F_OK) != 0) { + efree(templname); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing instance: %s\n", instname); + shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU); + efree(path); + return; + } +#endif + /* We have both, so we will have to merge */ + ALLOC_HASHTABLE(mergedata); + zend_hash_init(mergedata, 10, NULL, NULL, 0); + + if(!skip_template && templname != NULL) { + templen = strlen(templname); + templname = erealloc(templname, templen+strlen(mask)+1); + strcat(templname, mask); + if(SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OPENDIR) fprintf(stderr, "Globbing merge: %s %s\n", instname, templname); + + /* call with template */ + if(shadow_call_replace_name(0, templname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { + /* cut off instname and put path part there */ + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { + char *mergepath; + if (Z_TYPE_P(src_entry) != IS_STRING) continue; /* weird, glob shouldn't do that to us */ + spprintf(&mergepath, MAXPATHLEN, "%s/%s", path, Z_STRVAL_P(src_entry)+templen+1); + zend_hash_str_add_new_ptr(mergedata, mergepath, strlen(mergepath), dummy); + efree(mergepath); + } ZEND_HASH_FOREACH_END(); + } else { + /* ignore problems here - other one may pick it up */ + array_init(return_value); + } + } else { + /* we're skipping the template */ + array_init(return_value); + } + + /* replace the return value */ + templdata = *return_value; + return_value = &instdata; + /* call with instance */ + if(shadow_call_replace_name(0, instname, orig_glob, INTERNAL_FUNCTION_PARAM_PASSTHRU) == SUCCESS && Z_TYPE_P(return_value) == IS_ARRAY) { + /* merge data */ + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(return_value), src_entry) { + char *mergepath; + if (Z_TYPE_P(src_entry) != IS_STRING) continue; /* weird, glob shouldn't do that to us */ + spprintf(&mergepath, MAXPATHLEN, "%s/%s", path, Z_STRVAL_P(src_entry)+instlen+1); + zend_hash_str_add_ptr(mergedata, mergepath, strlen(mergepath), dummy); + efree(mergepath); + } ZEND_HASH_FOREACH_END(); + } + zval_dtor(return_value); + return_value = &templdata; + /* convert mergedata to return */ + zend_hash_clean(Z_ARRVAL_P(return_value)); + zend_string *filename_zs; + ZEND_HASH_FOREACH_STR_KEY(mergedata, filename_zs) { + add_next_index_str(return_value, zend_string_copy(filename_zs)); + } ZEND_HASH_FOREACH_END(); + /* cleanup */ + zend_hash_clean(mergedata); + zend_hash_destroy(mergedata); + efree(mergedata); + efree(path); +} +/* }}} */ + +static void shadow_generic_override(INTERNAL_FUNCTION_PARAMETERS) +{ + zend_class_entry *ce = EG(current_execute_data)->func->common.scope; + zend_string *fname_full; + if (ce) { + char *fname_full_c; + size_t len = spprintf(&fname_full_c, 0, "%s::%s", ZSTR_VAL(ce->name), ZSTR_VAL(EG(current_execute_data)->func->common.function_name)); + zend_str_tolower(fname_full_c, len); + fname_full = zend_string_init(fname_full_c, len, 0); + efree(fname_full_c); + } else { + fname_full = EG(current_execute_data)->func->common.function_name; + } + shadow_function *func; + if ((func = zend_hash_find_ptr(&SHADOW_G(replaced_function_table), fname_full)) == NULL) { + zend_string_release_ex(fname_full, 0); + return; + } + zval *name; + int opts = OPT_CHECK_EXISTS|OPT_RETURN_INSTANCE; + char *instname; + + if(!SHADOW_ENABLED()) { + func->orig_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); + zend_string_release_ex(fname_full, 0); + return; + } + + name = shadow_get_arg(func->argno); + if (!name || Z_TYPE_P(name) != IS_STRING) { + func->orig_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); + zend_string_release_ex(fname_full, 0); + return; + } + /* not our path - don't mess with it */ + if (!shadow_stream_check(Z_STRVAL_P(name))) { + func->orig_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); + zend_string_release_ex(fname_full, 0); + return; + } + /* try to translate */ + if(func->argtype != 0) { + /* for write */ + opts = OPT_RETURN_INSTANCE; + } + instname = template_to_instance(Z_STRVAL_P(name), opts); + if (SHADOW_ENABLED() && SHADOW_G(debug) & SHADOW_DEBUG_OVERRIDE) { + fprintf(stderr, "Overriding %s: %s (%s)\n", ZSTR_VAL(fname_full), Z_STRVAL_P(name), instname); + } + /* we didn't find better name, use original */ + if(!instname) { + func->orig_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU); + zend_string_release_ex(fname_full, 0); + return; + } + shadow_call_replace_name_ex(name, instname, func->orig_handler, INTERNAL_FUNCTION_PARAM_PASSTHRU); + zend_string_release_ex(fname_full, 0); +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/shadow.dep b/shadow.dep new file mode 100644 index 0000000..d8c1fed --- /dev/null +++ b/shadow.dep @@ -0,0 +1,91 @@ +shadow.lo: /app/shadow.c /app/config.h \ + /usr/include/php/20230831/main/php.h \ + /usr/include/php/20230831/main/php_version.h \ + /usr/include/php/20230831/Zend/zend.h \ + /usr/include/php/20230831/Zend/zend_types.h \ + /usr/include/php/20230831/Zend/zend_portability.h \ + /usr/include/php/20230831/Zend/zend_config.h \ + /usr/include/php/20230831/main/../main/php_config.h \ + /usr/include/php/20230831/Zend/../TSRM/TSRM.h \ + /usr/include/php/20230831/main/php_config.h \ + /usr/include/php/20230831/Zend/zend_range_check.h \ + /usr/include/php/20230831/Zend/zend_long.h \ + /usr/include/php/20230831/Zend/zend_map_ptr.h \ + /usr/include/php/20230831/Zend/zend_errors.h \ + /usr/include/php/20230831/Zend/zend_alloc.h \ + /usr/include/php/20230831/Zend/zend.h \ + /usr/include/php/20230831/Zend/zend_alloc_sizes.h \ + /usr/include/php/20230831/Zend/zend_llist.h \ + /usr/include/php/20230831/Zend/zend_string.h \ + /usr/include/php/20230831/Zend/zend_hash.h \ + /usr/include/php/20230831/Zend/zend_sort.h \ + /usr/include/php/20230831/Zend/zend_ast.h \ + /usr/include/php/20230831/Zend/zend_gc.h \ + /usr/include/php/20230831/Zend/zend_hrtime.h \ + /usr/include/php/20230831/Zend/zend_variables.h \ + /usr/include/php/20230831/Zend/zend_iterators.h \ + /usr/include/php/20230831/Zend/zend_stream.h \ + /usr/include/php/20230831/Zend/zend_smart_str_public.h \ + /usr/include/php/20230831/Zend/zend_smart_string_public.h \ + /usr/include/php/20230831/Zend/zend_signal.h \ + /usr/include/php/20230831/Zend/zend_max_execution_timer.h \ + /usr/include/php/20230831/Zend/zend_object_handlers.h \ + /usr/include/php/20230831/Zend/zend_operators.h \ + /usr/include/php/20230831/Zend/zend_strtod.h \ + /usr/include/php/20230831/Zend/zend_multiply.h \ + /usr/include/php/20230831/Zend/zend_sort.h \ + /usr/include/php/20230831/main/php_compat.h \ + /usr/include/php/20230831/main/php_config.h \ + /usr/include/php/20230831/Zend/zend_API.h \ + /usr/include/php/20230831/Zend/zend_modules.h \ + /usr/include/php/20230831/Zend/zend_compile.h \ + /usr/include/php/20230831/Zend/zend_globals.h \ + /usr/include/php/20230831/Zend/zend_globals_macros.h \ + /usr/include/php/20230831/Zend/zend_atomic.h \ + /usr/include/php/20230831/Zend/zend_stack.h \ + /usr/include/php/20230831/Zend/zend_ptr_stack.h \ + /usr/include/php/20230831/Zend/zend_objects.h \ + /usr/include/php/20230831/Zend/zend_objects_API.h \ + /usr/include/php/20230831/Zend/zend_float.h \ + /usr/include/php/20230831/Zend/zend_multibyte.h \ + /usr/include/php/20230831/Zend/zend_arena.h \ + /usr/include/php/20230831/Zend/zend_call_stack.h \ + /usr/include/php/20230831/Zend/zend_vm_opcodes.h \ + /usr/include/php/20230831/Zend/zend_build.h \ + /usr/include/php/20230831/Zend/zend_list.h \ + /usr/include/php/20230831/Zend/zend_execute.h \ + /usr/include/php/20230831/Zend/zend_type_info.h \ + /usr/include/php/20230831/main/build-defs.h \ + /usr/include/php/20230831/Zend/zend_hash.h \ + /usr/include/php/20230831/Zend/zend_alloc.h \ + /usr/include/php/20230831/Zend/zend_stack.h \ + /usr/include/php/20230831/main/snprintf.h \ + /usr/include/php/20230831/main/spprintf.h \ + /usr/include/php/20230831/Zend/zend_smart_str_public.h \ + /usr/include/php/20230831/Zend/zend_smart_string_public.h \ + /usr/include/php/20230831/main/php_syslog.h \ + /usr/include/php/20230831/main/php.h \ + /usr/include/php/20230831/main/php_output.h \ + /usr/include/php/20230831/main/php_streams.h \ + /usr/include/php/20230831/Zend/zend_stream.h \ + /usr/include/php/20230831/main/streams/php_stream_context.h \ + /usr/include/php/20230831/main/streams/php_stream_filter_api.h \ + /usr/include/php/20230831/main/streams/php_stream_transport.h \ + /usr/include/php/20230831/main/streams/php_stream_plain_wrapper.h \ + /usr/include/php/20230831/main/streams/php_stream_glob_wrapper.h \ + /usr/include/php/20230831/main/streams/php_stream_userspace.h \ + /usr/include/php/20230831/main/streams/php_stream_mmap.h \ + /usr/include/php/20230831/main/php_memory_streams.h \ + /usr/include/php/20230831/main/fopen_wrappers.h \ + /usr/include/php/20230831/main/php_globals.h \ + /usr/include/php/20230831/Zend/zend_globals.h \ + /usr/include/php/20230831/main/php_ini.h \ + /usr/include/php/20230831/Zend/zend_ini.h \ + /usr/include/php/20230831/Zend/zend_virtual_cwd.h \ + /usr/include/php/20230831/TSRM/TSRM.h \ + /usr/include/php/20230831/Zend/zend_constants.h \ + /usr/include/php/20230831/main/php_reentrancy.h \ + /usr/include/php/20230831/main/php_ini.h \ + /usr/include/php/20230831/ext/standard/info.h /app/php_shadow.h \ + /usr/include/php/20230831/main/php_streams.h /app/shadow_cache.h \ + /usr/include/php/20230831/ext/standard/php_filestat.h diff --git a/shadow_cache.dep b/shadow_cache.dep new file mode 100644 index 0000000..a750c37 --- /dev/null +++ b/shadow_cache.dep @@ -0,0 +1,89 @@ +shadow_cache.lo: /app/shadow_cache.c /app/config.h \ + /usr/include/php/20230831/main/php.h \ + /usr/include/php/20230831/main/php_version.h \ + /usr/include/php/20230831/Zend/zend.h \ + /usr/include/php/20230831/Zend/zend_types.h \ + /usr/include/php/20230831/Zend/zend_portability.h \ + /usr/include/php/20230831/Zend/zend_config.h \ + /usr/include/php/20230831/main/../main/php_config.h \ + /usr/include/php/20230831/Zend/../TSRM/TSRM.h \ + /usr/include/php/20230831/main/php_config.h \ + /usr/include/php/20230831/Zend/zend_range_check.h \ + /usr/include/php/20230831/Zend/zend_long.h \ + /usr/include/php/20230831/Zend/zend_map_ptr.h \ + /usr/include/php/20230831/Zend/zend_errors.h \ + /usr/include/php/20230831/Zend/zend_alloc.h \ + /usr/include/php/20230831/Zend/zend.h \ + /usr/include/php/20230831/Zend/zend_alloc_sizes.h \ + /usr/include/php/20230831/Zend/zend_llist.h \ + /usr/include/php/20230831/Zend/zend_string.h \ + /usr/include/php/20230831/Zend/zend_hash.h \ + /usr/include/php/20230831/Zend/zend_sort.h \ + /usr/include/php/20230831/Zend/zend_ast.h \ + /usr/include/php/20230831/Zend/zend_gc.h \ + /usr/include/php/20230831/Zend/zend_hrtime.h \ + /usr/include/php/20230831/Zend/zend_variables.h \ + /usr/include/php/20230831/Zend/zend_iterators.h \ + /usr/include/php/20230831/Zend/zend_stream.h \ + /usr/include/php/20230831/Zend/zend_smart_str_public.h \ + /usr/include/php/20230831/Zend/zend_smart_string_public.h \ + /usr/include/php/20230831/Zend/zend_signal.h \ + /usr/include/php/20230831/Zend/zend_max_execution_timer.h \ + /usr/include/php/20230831/Zend/zend_object_handlers.h \ + /usr/include/php/20230831/Zend/zend_operators.h \ + /usr/include/php/20230831/Zend/zend_strtod.h \ + /usr/include/php/20230831/Zend/zend_multiply.h \ + /usr/include/php/20230831/Zend/zend_sort.h \ + /usr/include/php/20230831/main/php_compat.h \ + /usr/include/php/20230831/main/php_config.h \ + /usr/include/php/20230831/Zend/zend_API.h \ + /usr/include/php/20230831/Zend/zend_modules.h \ + /usr/include/php/20230831/Zend/zend_compile.h \ + /usr/include/php/20230831/Zend/zend_globals.h \ + /usr/include/php/20230831/Zend/zend_globals_macros.h \ + /usr/include/php/20230831/Zend/zend_atomic.h \ + /usr/include/php/20230831/Zend/zend_stack.h \ + /usr/include/php/20230831/Zend/zend_ptr_stack.h \ + /usr/include/php/20230831/Zend/zend_objects.h \ + /usr/include/php/20230831/Zend/zend_objects_API.h \ + /usr/include/php/20230831/Zend/zend_float.h \ + /usr/include/php/20230831/Zend/zend_multibyte.h \ + /usr/include/php/20230831/Zend/zend_arena.h \ + /usr/include/php/20230831/Zend/zend_call_stack.h \ + /usr/include/php/20230831/Zend/zend_vm_opcodes.h \ + /usr/include/php/20230831/Zend/zend_build.h \ + /usr/include/php/20230831/Zend/zend_list.h \ + /usr/include/php/20230831/Zend/zend_execute.h \ + /usr/include/php/20230831/Zend/zend_type_info.h \ + /usr/include/php/20230831/main/build-defs.h \ + /usr/include/php/20230831/Zend/zend_hash.h \ + /usr/include/php/20230831/Zend/zend_alloc.h \ + /usr/include/php/20230831/Zend/zend_stack.h \ + /usr/include/php/20230831/main/snprintf.h \ + /usr/include/php/20230831/main/spprintf.h \ + /usr/include/php/20230831/Zend/zend_smart_str_public.h \ + /usr/include/php/20230831/Zend/zend_smart_string_public.h \ + /usr/include/php/20230831/main/php_syslog.h \ + /usr/include/php/20230831/main/php.h \ + /usr/include/php/20230831/main/php_output.h \ + /usr/include/php/20230831/main/php_streams.h \ + /usr/include/php/20230831/Zend/zend_stream.h \ + /usr/include/php/20230831/main/streams/php_stream_context.h \ + /usr/include/php/20230831/main/streams/php_stream_filter_api.h \ + /usr/include/php/20230831/main/streams/php_stream_transport.h \ + /usr/include/php/20230831/main/streams/php_stream_plain_wrapper.h \ + /usr/include/php/20230831/main/streams/php_stream_glob_wrapper.h \ + /usr/include/php/20230831/main/streams/php_stream_userspace.h \ + /usr/include/php/20230831/main/streams/php_stream_mmap.h \ + /usr/include/php/20230831/main/php_memory_streams.h \ + /usr/include/php/20230831/main/fopen_wrappers.h \ + /usr/include/php/20230831/main/php_globals.h \ + /usr/include/php/20230831/Zend/zend_globals.h \ + /usr/include/php/20230831/main/php_ini.h \ + /usr/include/php/20230831/Zend/zend_ini.h \ + /usr/include/php/20230831/Zend/zend_virtual_cwd.h \ + /usr/include/php/20230831/TSRM/TSRM.h \ + /usr/include/php/20230831/Zend/zend_constants.h \ + /usr/include/php/20230831/main/php_reentrancy.h \ + /usr/include/php/20230831/main/php_ini.h /app/php_shadow.h \ + /app/shadow_cache.h diff --git a/tests/fixtures/instance/api/rest.php b/tests/fixtures/instance/api/rest.php new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/instance/conflict/item/somefile.txt b/tests/fixtures/instance/conflict/item/somefile.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/instance/conflict2/item b/tests/fixtures/instance/conflict2/item new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/instance/txt/sometext.txt b/tests/fixtures/instance/txt/sometext.txt new file mode 100644 index 0000000..29c9b70 --- /dev/null +++ b/tests/fixtures/instance/txt/sometext.txt @@ -0,0 +1 @@ +some text for some test \ No newline at end of file diff --git a/tests/fixtures/templatedir/api/rest.php b/tests/fixtures/templatedir/api/rest.php new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/templatedir/conflict/item b/tests/fixtures/templatedir/conflict/item new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/templatedir/conflict2/item/somefile_template.txt b/tests/fixtures/templatedir/conflict2/item/somefile_template.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/templatedir/qwe/template_qwe_file.txt b/tests/fixtures/templatedir/qwe/template_qwe_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/glob.diff b/tests/glob.diff new file mode 100644 index 0000000..d5be701 --- /dev/null +++ b/tests/glob.diff @@ -0,0 +1,80 @@ +001+ Resolve: setup.inc -> /app/tests/setup.inc +002+ Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +003+ Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +004+ Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +005+ T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +006+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +007+ T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +008+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/txt', returning '/app/tests/fixtures/instance/txt' + array(4) { + [0]=> + string(13) "txt/ifile.txt" +-- + [3]=> + string(13) "txt/tfile.txt" + } +019+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +020+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +021+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +022+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/txt', returning '/app/tests/fixtures/instance/txt' + array(4) { + [0]=> + string(13) "txt/ifile.txt" +-- + [3]=> + string(13) "txt/tfile.txt" + } +033+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +034+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +035+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +036+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/templdir', returning '/app/tests/fixtures/templatedir/templdir' + array(1) { + [0]=> + string(14) "templdir/t.txt" + } +041+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +042+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +043+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +044+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/instdir', returning '/app/tests/fixtures/instance/instdir' + array(1) { + [0]=> + string(13) "instdir/t.txt" + } +049+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/cache', options: 4 (CHK_EX=N, RET_INST=Y) +050+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +051+ T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +052+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/cache', returning '/app/tests/fixtures/instance/cache' + array(1) { + [0]=> + string(15) "cache/cache.txt" + } +057+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +058+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +059+ T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +060+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' + array(13) { + [0]=> + string(3) "api" +-- + [12]=> + string(3) "txt" + } +089+ T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +090+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +091+ T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +092+ T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' + array(13) { + [0]=> + string(3) "api" +-- + [12]=> + string(3) "txt" + } +121+ T2I_REFACTOR: ENTER '/app/tests/fixtures', options: 5 (CHK_EX=Y, RET_INST=Y) +122+ T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures (len 19) +123+ T2I_REFACTOR: Path '/app/tests/fixtures' is outside template/instance or does not meet criteria. +124+ T2I_REFACTOR: EXIT for '/app/tests/fixtures', returning 'NULL (use original)' + array(2) { + [0]=> + string(8) "instance" +-- diff --git a/tests/glob.exp b/tests/glob.exp new file mode 100644 index 0000000..9369f12 --- /dev/null +++ b/tests/glob.exp @@ -0,0 +1,94 @@ +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} \ No newline at end of file diff --git a/tests/glob.log b/tests/glob.log new file mode 100644 index 0000000..727cf0f --- /dev/null +++ b/tests/glob.log @@ -0,0 +1,228 @@ + +---- EXPECTED OUTPUT +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} +---- ACTUAL OUTPUT +Resolve: setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/txt', returning '/app/tests/fixtures/instance/txt' +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/txt', returning '/app/tests/fixtures/instance/txt' +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/templdir', returning '/app/tests/fixtures/templatedir/templdir' +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/instdir', returning '/app/tests/fixtures/instance/instdir' +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/cache', options: 4 (CHK_EX=N, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/cache', returning '/app/tests/fixtures/instance/cache' +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures (len 19) +T2I_REFACTOR: Path '/app/tests/fixtures' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures', returning 'NULL (use original)' +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} +---- FAILED diff --git a/tests/glob.out b/tests/glob.out new file mode 100644 index 0000000..9ddd476 --- /dev/null +++ b/tests/glob.out @@ -0,0 +1,130 @@ +Resolve: setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/setup.inc -> /app/tests/setup.inc +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +T2I_REFACTOR: ENTER '/app/tests/fixtures/templatedir/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/templatedir/txt (len 35) +T2I_REFACTOR: Path '/app/tests/fixtures/templatedir/txt' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/templatedir/txt', returning '/app/tests/fixtures/instance/txt' +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/txt', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/txt (len 32) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/txt' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/txt', returning '/app/tests/fixtures/instance/txt' +array(4) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(16) "txt/sometext.txt" + [3]=> + string(13) "txt/tfile.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/templdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/templdir (len 37) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/templdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/templdir', returning '/app/tests/fixtures/templatedir/templdir' +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/instdir', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/instdir (len 36) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/instdir' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/instdir', returning '/app/tests/fixtures/instance/instdir' +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance/cache', options: 4 (CHK_EX=N, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance/cache (len 34) +T2I_REFACTOR: Path '/app/tests/fixtures/instance/cache' is in INSTANCE territory. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance/cache', returning '/app/tests/fixtures/instance/cache' +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures/instance', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures/instance (len 28) +T2I_REFACTOR: Path '/app/tests/fixtures/instance' IS the instance directory itself. +T2I_REFACTOR: EXIT for '/app/tests/fixtures/instance', returning '/app/tests/fixtures/instance' +array(13) { + [0]=> + string(3) "api" + [1]=> + string(5) "cache" + [2]=> + string(8) "conflict" + [3]=> + string(9) "conflict2" + [4]=> + string(6) "custom" + [5]=> + string(12) "iinclude.php" + [6]=> + string(17) "instance_only.php" + [7]=> + string(7) "instdir" + [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> + string(3) "txt" +} +T2I_REFACTOR: ENTER '/app/tests/fixtures', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Final realpath for checks: /app/tests/fixtures (len 19) +T2I_REFACTOR: Path '/app/tests/fixtures' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/fixtures', returning 'NULL (use original)' +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} \ No newline at end of file diff --git a/tests/glob.php b/tests/glob.php new file mode 100644 index 0000000..1f08e81 --- /dev/null +++ b/tests/glob.php @@ -0,0 +1,34 @@ + diff --git a/tests/glob.phpt b/tests/glob.phpt index 3f51476..37be4e3 100644 --- a/tests/glob.phpt +++ b/tests/glob.phpt @@ -4,6 +4,7 @@ Check globs --FILE-- --EXPECT-- -array(3) { +array(4) { [0]=> string(13) "txt/ifile.txt" [1]=> string(16) "txt/override.txt" [2]=> + string(16) "txt/sometext.txt" + [3]=> string(13) "txt/tfile.txt" } -array(3) { +array(4) { [0]=> string(13) "txt/ifile.txt" [1]=> string(16) "txt/override.txt" [2]=> + string(16) "txt/sometext.txt" + [3]=> string(13) "txt/tfile.txt" } array(1) { @@ -65,44 +70,60 @@ array(1) { [0]=> string(15) "cache/cache.txt" } -array(9) { +array(13) { [0]=> - string(5) "cache" + string(3) "api" [1]=> - string(6) "custom" + string(5) "cache" [2]=> - string(12) "iinclude.php" + string(8) "conflict" [3]=> - string(17) "instance_only.php" + string(9) "conflict2" [4]=> - string(7) "instdir" + string(6) "custom" [5]=> - string(12) "manifest.php" + string(12) "iinclude.php" [6]=> - string(10) "nowritedir" + string(17) "instance_only.php" [7]=> - string(8) "test.php" + string(7) "instdir" [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> string(3) "txt" } -array(9) { +array(13) { [0]=> - string(5) "cache" + string(3) "api" [1]=> - string(6) "custom" + string(5) "cache" [2]=> - string(12) "iinclude.php" + string(8) "conflict" [3]=> - string(17) "instance_only.php" + string(9) "conflict2" [4]=> - string(7) "instdir" + string(6) "custom" [5]=> - string(12) "manifest.php" + string(12) "iinclude.php" [6]=> - string(10) "nowritedir" + string(17) "instance_only.php" [7]=> - string(8) "test.php" + string(7) "instdir" [8]=> + string(12) "manifest.php" + [9]=> + string(10) "nowritedir" + [10]=> + string(3) "qwe" + [11]=> + string(8) "test.php" + [12]=> string(3) "txt" } array(2) { diff --git a/tests/glob.phpt.bak b/tests/glob.phpt.bak new file mode 100644 index 0000000..1594060 --- /dev/null +++ b/tests/glob.phpt.bak @@ -0,0 +1,114 @@ +--TEST-- +Check globs +--SKIPIF-- + +--FILE-- + +--EXPECT-- +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(3) { + [0]=> + string(13) "txt/ifile.txt" + [1]=> + string(16) "txt/override.txt" + [2]=> + string(13) "txt/tfile.txt" +} +array(1) { + [0]=> + string(14) "templdir/t.txt" +} +array(1) { + [0]=> + string(13) "instdir/t.txt" +} +array(1) { + [0]=> + string(15) "cache/cache.txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(9) { + [0]=> + string(5) "cache" + [1]=> + string(6) "custom" + [2]=> + string(12) "iinclude.php" + [3]=> + string(17) "instance_only.php" + [4]=> + string(7) "instdir" + [5]=> + string(12) "manifest.php" + [6]=> + string(10) "nowritedir" + [7]=> + string(8) "test.php" + [8]=> + string(3) "txt" +} +array(2) { + [0]=> + string(8) "instance" + [1]=> + string(11) "templatedir" +} diff --git a/tests/glob.sh b/tests/glob.sh new file mode 100755 index 0000000..99d1532 --- /dev/null +++ b/tests/glob.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +export SHELL='/bin/bash' +export TERM_PROGRAM_VERSION='3.4' +export TMUX='/tmp/tmux-1001/default,1249,0' +export PWD='/app' +export LOGNAME='swebot' +export XDG_SESSION_TYPE='tty' +export HOME='/home/swebot' +export LANG='C.UTF-8' +export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:' +export SSH_CONNECTION='deleted' +export LESSCLOSE='/usr/bin/lesspipe %s %s' +export XDG_SESSION_CLASS='user' +export TERM='tmux-256color' +export LESSOPEN='| /usr/bin/lesspipe %s' +export USER='swebot' +export TMUX_PANE='%0' +export SHLVL='2' +export XDG_SESSION_ID='c1' +export XDG_RUNTIME_DIR='/run/user/1001' +export SSH_CLIENT='deleted' +export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin' +export DBUS_SESSION_BUS_ADDRESS='unix:path=/run/user/1001/bus' +export TEST_PHP_EXECUTABLE='/usr/bin/php' +export TERM_PROGRAM='tmux' +export _='/usr/bin/php' +export OLDPWD='/app' +export SSH_AUTH_SOCK='deleted' +export SSH_TTY='deleted' +export TEMP='/tmp' +export TEST_PHP_EXECUTABLE_ESCAPED=''\''/usr/bin/php'\''' +export TEST_PHP_CGI_EXECUTABLE='' +export TEST_PHP_CGI_EXECUTABLE_ESCAPED=''\'''\''' +export TEST_PHPDBG_EXECUTABLE='' +export TEST_PHPDBG_EXECUTABLE_ESCAPED=''\'''\''' +export REDIRECT_STATUS='1' +export QUERY_STRING='' +export PATH_TRANSLATED='/app/tests/glob.php' +export SCRIPT_FILENAME='/app/tests/glob.php' +export REQUEST_METHOD='GET' +export CONTENT_TYPE='' +export CONTENT_LENGTH='' +export TZ='' +export TEST_PHP_EXTRA_ARGS=' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off"' +export HTTP_COOKIE='' + +case "$1" in +"gdb") + gdb --args '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/glob.php" 2>&1 + ;; +"lldb") + lldb -- '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/glob.php" 2>&1 + ;; +"valgrind") + USE_ZEND_ALLOC=0 valgrind $2 '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/glob.php" 2>&1 + ;; +"rr") + rr record $2 '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/glob.php" 2>&1 + ;; +*) + '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/glob.php" 2>&1 + ;; +esac \ No newline at end of file diff --git a/tests/iterators.diff b/tests/iterators.diff new file mode 100644 index 0000000..c71109f --- /dev/null +++ b/tests/iterators.diff @@ -0,0 +1,283 @@ +001- This will be filled once we see the actual output. +001+ Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +002+ Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +003+ Shadow paths set: Template='/app/tests/fixtures/templatedir', Instance='/app/tests/fixtures/instance' +004+ Full path: /app/tests/fixtures/templatedir +005+ Path check: /app/tests/fixtures/templatedir => (null) +006+ Realpath /app/tests/fixtures/templatedir ((null)) +007+ Template Path (realpath): /app/tests/fixtures/templatedir +008+ Full path: /app/tests/fixtures/instance +009+ Path check: /app/tests/fixtures/instance => (null) +010+ Realpath /app/tests/fixtures/instance ((null)) +011+ Instance Path (realpath): /app/tests/fixtures/instance +012+ +013+ Iterating directory (original): /app/tests/fixtures/templatedir/api +014+ Attempting to iterate: /app/tests/fixtures/templatedir/api +015+ Full path: /app/tests/fixtures/templatedir/api +016+ In template: /app/tests/fixtures/templatedir/api +017+ Path check: /app/tests/fixtures/templatedir/api => /app/tests/fixtures/instance/api +018+ Opendir: /app/tests/fixtures/templatedir/api (/app/tests/fixtures/instance/api) +019+ Opening templdir: /app/tests/fixtures/templatedir/api +020+ shadow_stat: URL: /app/tests/fixtures/templatedir/api/rest.php, Instance Name (early): NULL, Flags: 7 +021+ shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +022+ Full path: /app/tests/fixtures/templatedir/api/rest.php +023+ In template: /app/tests/fixtures/templatedir/api/rest.php +024+ Path check: /app/tests/fixtures/templatedir/api/rest.php => /app/tests/fixtures/instance/api/rest.php +025+ Stat: /app/tests/fixtures/templatedir/api/rest.php (/app/tests/fixtures/instance/api/rest.php) 7 +026+ Stat res: 0 +027+ Item: /app/tests/fixtures/templatedir/api/rest.php (isDir: No, isFile: Yes) +028+ Found 1 items in /app/tests/fixtures/templatedir/api +029+ +030+ Iterating directory (original): /app/tests/fixtures/templatedir/qwe +031+ Attempting to iterate: /app/tests/fixtures/templatedir/qwe +032+ Full path: /app/tests/fixtures/templatedir/qwe +033+ In template: /app/tests/fixtures/templatedir/qwe +034+ Path check: /app/tests/fixtures/templatedir/qwe => /app/tests/fixtures/instance/qwe +035+ Opendir: /app/tests/fixtures/templatedir/qwe (/app/tests/fixtures/instance/qwe) +036+ Opening templdir: /app/tests/fixtures/templatedir/qwe +037+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Instance Name (early): NULL, Flags: 7 +038+ shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +039+ Full path: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +040+ In template: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +041+ Path check: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt => (null) +042+ Stat: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt ((null)) 7 +043+ Stat res: 0 +044+ Item: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (isDir: No, isFile: Yes) +045+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Instance Name (early): NULL, Flags: 7 +046+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +047+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +048+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +049+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +050+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) 7 +051+ Stat res: 0 +052+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder (isDir: Yes, isFile: No) +053+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +054+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +055+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +056+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) +057+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder +058+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Instance Name (early): NULL, Flags: 6 +059+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +060+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +061+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +062+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +063+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) 6 +064+ Stat res: 0 +065+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (isDir: Yes, isFile: No) +066+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +067+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +068+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +069+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) +070+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +071+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Instance Name (early): NULL, Flags: 6 +072+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +073+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +074+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +075+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +076+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) 6 +077+ Stat res: 0 +078+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (isDir: Yes, isFile: No) +079+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +080+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +081+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +082+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) +083+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +084+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Instance Name (early): NULL, Flags: 6 +085+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +086+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +087+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +088+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +089+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) 6 +090+ Stat res: 0 +091+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (isDir: Yes, isFile: No) +092+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +093+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +094+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +095+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +096+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +097+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Instance Name (early): NULL, Flags: 6 +098+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +099+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +100+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +101+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +102+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) 6 +103+ Stat res: 0 +104+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (isDir: Yes, isFile: No) +105+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +106+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +107+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +108+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +109+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +110+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Instance Name (early): NULL, Flags: 6 +111+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +112+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +113+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +114+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +115+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) 6 +116+ Stat res: 0 +117+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (isDir: Yes, isFile: No) +118+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +119+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +120+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +121+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +122+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +123+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Instance Name (early): NULL, Flags: 6 +124+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +125+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +126+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +127+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +128+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) 6 +129+ Stat res: 0 +130+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (isDir: Yes, isFile: No) +131+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +132+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +133+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +134+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +135+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +136+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Instance Name (early): NULL, Flags: 6 +137+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +138+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +139+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +140+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +141+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) 6 +142+ Stat res: 0 +143+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (isDir: Yes, isFile: No) +144+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +145+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +146+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +147+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +148+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +149+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Instance Name (early): NULL, Flags: 6 +150+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +151+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +152+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +153+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +154+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) 6 +155+ Stat res: 0 +156+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (isDir: Yes, isFile: No) +157+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +158+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +159+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +160+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +161+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +162+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Instance Name (early): NULL, Flags: 6 +163+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +164+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +165+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +166+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +167+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) 6 +168+ Stat res: 0 +169+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (isDir: Yes, isFile: No) +170+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +171+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +172+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +173+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +174+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +175+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Instance Name (early): NULL, Flags: 6 +176+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +177+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +178+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +179+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +180+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) 6 +181+ Stat res: 0 +182+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (isDir: Yes, isFile: No) +183+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +184+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +185+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +186+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +187+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +188+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Instance Name (early): NULL, Flags: 6 +189+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +190+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +191+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +192+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +193+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) 6 +194+ Stat res: 0 +195+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (isDir: Yes, isFile: No) +196+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +197+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +198+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +199+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +200+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +201+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Instance Name (early): NULL, Flags: 6 +202+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +203+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +204+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +205+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +206+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php) 6 +207+ Stat res: 0 +208+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (isDir: No, isFile: Yes) +209+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Instance Name (early): NULL, Flags: 6 +210+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +211+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +212+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +213+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +214+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) 6 +215+ Stat res: 0 +216+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (isDir: Yes, isFile: No) +217+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +218+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +219+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +220+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +221+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +222+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Instance Name (early): NULL, Flags: 6 +223+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +224+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +225+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +226+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +227+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) 6 +228+ Stat res: 0 +229+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (isDir: Yes, isFile: No) +230+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +231+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +232+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +233+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +234+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +235+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Instance Name (early): NULL, Flags: 6 +236+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +237+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +238+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +239+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +240+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) 6 +241+ Stat res: 0 +242+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (isDir: Yes, isFile: No) +243+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +244+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +245+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +246+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +247+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +248+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Instance Name (early): NULL, Flags: 6 +249+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +250+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +251+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +252+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +253+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) 6 +254+ Stat res: 0 +255+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (isDir: Yes, isFile: No) +256+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +257+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +258+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +259+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +260+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +261+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Instance Name (early): NULL, Flags: 6 +262+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +263+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +264+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +265+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +266+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) 6 +267+ Stat res: 0 +268+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (isDir: No, isFile: Yes) +269+ shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Instance Name (early): NULL, Flags: 6 +270+ shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +271+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +272+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +273+ Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +274+ Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) 6 +275+ Stat res: 0 +276+ Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (isDir: Yes, isFile: No) +277+ Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +278+ In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +279+ Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +280+ Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +281+ Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +282+ Found 20 items in /app/tests/fixtures/templatedir/qwe diff --git a/tests/iterators.exp b/tests/iterators.exp new file mode 100644 index 0000000..b5fd548 --- /dev/null +++ b/tests/iterators.exp @@ -0,0 +1 @@ +This will be filled once we see the actual output. \ No newline at end of file diff --git a/tests/iterators.log b/tests/iterators.log new file mode 100644 index 0000000..582d2ce --- /dev/null +++ b/tests/iterators.log @@ -0,0 +1,287 @@ + +---- EXPECTED OUTPUT +This will be filled once we see the actual output. +---- ACTUAL OUTPUT +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +Shadow paths set: Template='/app/tests/fixtures/templatedir', Instance='/app/tests/fixtures/instance' +Full path: /app/tests/fixtures/templatedir +Path check: /app/tests/fixtures/templatedir => (null) +Realpath /app/tests/fixtures/templatedir ((null)) +Template Path (realpath): /app/tests/fixtures/templatedir +Full path: /app/tests/fixtures/instance +Path check: /app/tests/fixtures/instance => (null) +Realpath /app/tests/fixtures/instance ((null)) +Instance Path (realpath): /app/tests/fixtures/instance + +Iterating directory (original): /app/tests/fixtures/templatedir/api +Attempting to iterate: /app/tests/fixtures/templatedir/api +Full path: /app/tests/fixtures/templatedir/api +In template: /app/tests/fixtures/templatedir/api +Path check: /app/tests/fixtures/templatedir/api => /app/tests/fixtures/instance/api +Opendir: /app/tests/fixtures/templatedir/api (/app/tests/fixtures/instance/api) +Opening templdir: /app/tests/fixtures/templatedir/api +shadow_stat: URL: /app/tests/fixtures/templatedir/api/rest.php, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/api/rest.php +In template: /app/tests/fixtures/templatedir/api/rest.php +Path check: /app/tests/fixtures/templatedir/api/rest.php => /app/tests/fixtures/instance/api/rest.php +Stat: /app/tests/fixtures/templatedir/api/rest.php (/app/tests/fixtures/instance/api/rest.php) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/api/rest.php (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/api + +Iterating directory (original): /app/tests/fixtures/templatedir/qwe +Attempting to iterate: /app/tests/fixtures/templatedir/qwe +Full path: /app/tests/fixtures/templatedir/qwe +In template: /app/tests/fixtures/templatedir/qwe +Path check: /app/tests/fixtures/templatedir/qwe => /app/tests/fixtures/instance/qwe +Opendir: /app/tests/fixtures/templatedir/qwe (/app/tests/fixtures/instance/qwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +In template: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +Path check: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt => (null) +Stat: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt ((null)) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Found 20 items in /app/tests/fixtures/templatedir/qwe +---- FAILED diff --git a/tests/iterators.out b/tests/iterators.out new file mode 100644 index 0000000..4b6cad7 --- /dev/null +++ b/tests/iterators.out @@ -0,0 +1,282 @@ +Resolve: /app/tests/fixtures/templatedir -> /app/tests/fixtures/templatedir +Resolve: /app/tests/fixtures/instance -> /app/tests/fixtures/instance +Shadow paths set: Template='/app/tests/fixtures/templatedir', Instance='/app/tests/fixtures/instance' +Full path: /app/tests/fixtures/templatedir +Path check: /app/tests/fixtures/templatedir => (null) +Realpath /app/tests/fixtures/templatedir ((null)) +Template Path (realpath): /app/tests/fixtures/templatedir +Full path: /app/tests/fixtures/instance +Path check: /app/tests/fixtures/instance => (null) +Realpath /app/tests/fixtures/instance ((null)) +Instance Path (realpath): /app/tests/fixtures/instance + +Iterating directory (original): /app/tests/fixtures/templatedir/api +Attempting to iterate: /app/tests/fixtures/templatedir/api +Full path: /app/tests/fixtures/templatedir/api +In template: /app/tests/fixtures/templatedir/api +Path check: /app/tests/fixtures/templatedir/api => /app/tests/fixtures/instance/api +Opendir: /app/tests/fixtures/templatedir/api (/app/tests/fixtures/instance/api) +Opening templdir: /app/tests/fixtures/templatedir/api +shadow_stat: URL: /app/tests/fixtures/templatedir/api/rest.php, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/api/rest.php +In template: /app/tests/fixtures/templatedir/api/rest.php +Path check: /app/tests/fixtures/templatedir/api/rest.php => /app/tests/fixtures/instance/api/rest.php +Stat: /app/tests/fixtures/templatedir/api/rest.php (/app/tests/fixtures/instance/api/rest.php) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/api/rest.php (isDir: No, isFile: Yes) +Found 1 items in /app/tests/fixtures/templatedir/api + +Iterating directory (original): /app/tests/fixtures/templatedir/qwe +Attempting to iterate: /app/tests/fixtures/templatedir/qwe +Full path: /app/tests/fixtures/templatedir/qwe +In template: /app/tests/fixtures/templatedir/qwe +Path check: /app/tests/fixtures/templatedir/qwe => /app/tests/fixtures/instance/qwe +Opendir: /app/tests/fixtures/templatedir/qwe (/app/tests/fixtures/instance/qwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 0 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +In template: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt +Path check: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt => (null) +Stat: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt ((null)) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/template_qwe_file.txt (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder, Instance Name (early): NULL, Flags: 7 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) 7 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder => /app/tests/fixtures/instance/qwe/modulebuilder +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder (/app/tests/fixtures/instance/qwe/modulebuilder) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds => /app/tests/fixtures/instance/qwe/modulebuilder/builds +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/fixtures/instance/qwe/modulebuilder/builds) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls/Call.php (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (isDir: No, isFile: Yes) +shadow_stat: URL: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Instance Name (early): NULL, Flags: 6 +shadow_stat: Stat result before actual call (early), res: -1, errno: 2 (errno here is pre-stat call) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Path check: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Stat: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) 6 +Stat res: 0 +Item: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (isDir: Yes, isFile: No) +Full path: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +In template: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Path check from cache: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks => /app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Opendir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +Opening templdir: /app/tests/fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +Found 20 items in /app/tests/fixtures/templatedir/qwe \ No newline at end of file diff --git a/tests/iterators.php b/tests/iterators.php new file mode 100644 index 0000000..3d9156b --- /dev/null +++ b/tests/iterators.php @@ -0,0 +1,97 @@ +getPathname() . " (isDir: " . ($item->isDir()?'Yes':'No') . ", isFile: " . ($item->isFile()?'Yes':'No') . ")\n"; + $count++; + } + echo "Found $count items in $effective_dir\n"; + } catch (UnexpectedValueException $e) { + // This exception is thrown if the path cannot be opened, e.g., it does not exist or is not a directory. + echo "Error creating RecursiveDirectoryIterator for $effective_dir: " . $e->getMessage() . "\n"; + } catch (Exception $e) { + echo "Error iterating $effective_dir: " . $e->getMessage() . "\n"; + } +} + +?> diff --git a/tests/iterators.phpt b/tests/iterators.phpt new file mode 100644 index 0000000..eb9fa85 --- /dev/null +++ b/tests/iterators.phpt @@ -0,0 +1,71 @@ +--TEST-- +Check iterators failure (with options debug) +--SKIPIF-- + +--FILE-- +getPathname() . " (isDir: " . ($item->isDir()?'Yes':'No') . ", isFile: " . ($item->isFile()?'Yes':'No') . ") +"; + $count++; + } + echo "Found $count items in $dir +"; + } catch (UnexpectedValueException $e) { + echo "Error creating RecursiveDirectoryIterator for $dir: " . $e->getMessage() . " +"; + } catch (Exception $e) { + echo "Error iterating $dir: " . $e->getMessage() . " +"; + } +} +?> +--EXPECT-- +This will be filled once we see the actual output. diff --git a/tests/iterators.sh b/tests/iterators.sh new file mode 100755 index 0000000..0999cbc --- /dev/null +++ b/tests/iterators.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +export SHELL='/bin/bash' +export TERM_PROGRAM_VERSION='3.4' +export TMUX='/tmp/tmux-1001/default,1249,0' +export PWD='/app' +export LOGNAME='swebot' +export XDG_SESSION_TYPE='tty' +export HOME='/home/swebot' +export LANG='C.UTF-8' +export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:' +export SSH_CONNECTION='deleted' +export LESSCLOSE='/usr/bin/lesspipe %s %s' +export XDG_SESSION_CLASS='user' +export TERM='tmux-256color' +export LESSOPEN='| /usr/bin/lesspipe %s' +export USER='swebot' +export TMUX_PANE='%0' +export SHLVL='2' +export XDG_SESSION_ID='c1' +export XDG_RUNTIME_DIR='/run/user/1001' +export SSH_CLIENT='deleted' +export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin' +export DBUS_SESSION_BUS_ADDRESS='unix:path=/run/user/1001/bus' +export TEST_PHP_EXECUTABLE='/usr/bin/php' +export TERM_PROGRAM='tmux' +export _='/usr/bin/php' +export SSH_AUTH_SOCK='deleted' +export SSH_TTY='deleted' +export TEMP='/tmp' +export TEST_PHP_EXECUTABLE_ESCAPED=''\''/usr/bin/php'\''' +export TEST_PHP_CGI_EXECUTABLE='' +export TEST_PHP_CGI_EXECUTABLE_ESCAPED=''\'''\''' +export TEST_PHPDBG_EXECUTABLE='' +export TEST_PHPDBG_EXECUTABLE_ESCAPED=''\'''\''' +export REDIRECT_STATUS='1' +export QUERY_STRING='' +export PATH_TRANSLATED='/app/tests/iterators.php' +export SCRIPT_FILENAME='/app/tests/iterators.php' +export REQUEST_METHOD='GET' +export CONTENT_TYPE='' +export CONTENT_LENGTH='' +export TZ='' +export TEST_PHP_EXTRA_ARGS=' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off"' +export HTTP_COOKIE='' + +case "$1" in +"gdb") + gdb --args '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/iterators.php" 2>&1 + ;; +"lldb") + lldb -- '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/iterators.php" 2>&1 + ;; +"valgrind") + USE_ZEND_ALLOC=0 valgrind $2 '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/iterators.php" 2>&1 + ;; +"rr") + rr record $2 '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/iterators.php" 2>&1 + ;; +*) + '/usr/bin/php' -d "output_handler=" -d "open_basedir=" -d "disable_functions=" -d "output_buffering=Off" -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0" -d "html_errors=0" -d "track_errors=0" -d "report_memleaks=1" -d "report_zend_debug=0" -d "docref_root=" -d "docref_ext=.html" -d "error_prepend_string=" -d "error_append_string=" -d "auto_prepend_file=" -d "auto_append_file=" -d "ignore_repeated_errors=0" -d "precision=14" -d "serialize_precision=-1" -d "memory_limit=128M" -d "opcache.fast_shutdown=0" -d "opcache.file_update_protection=0" -d "opcache.revalidate_freq=0" -d "opcache.jit_hot_loop=1" -d "opcache.jit_hot_func=1" -d "opcache.jit_hot_return=1" -d "opcache.jit_hot_side_exit=1" -d "zend.assertions=1" -d "zend.exception_ignore_args=0" -d "zend.exception_string_param_max_len=15" -d "short_open_tag=0" -d "session.auto_start=0" -d "zlib.output_compression=Off" -f "/app/tests/iterators.php" 2>&1 + ;; +esac \ No newline at end of file diff --git a/tests/user_fixtures/instance/api/rest.php b/tests/user_fixtures/instance/api/rest.php new file mode 100644 index 0000000..e69de29 diff --git a/tests/user_fixtures/templatedir/api/rest.php b/tests/user_fixtures/templatedir/api/rest.php new file mode 100644 index 0000000..e69de29 diff --git a/tests/user_iterators_test.phpt b/tests/user_iterators_test.phpt new file mode 100644 index 0000000..d8dfc17 --- /dev/null +++ b/tests/user_iterators_test.phpt @@ -0,0 +1,84 @@ +--TEST-- +User-provided iterator test case +--SKIPIF-- + +--FILE-- + instance/qwe) + echo "Note: Base directory $dir_to_iterate does not physically exist in template. Shadow behavior will apply. +"; + } elseif (!is_dir($dir_to_iterate)) { + echo "Warning: Base directory $dir_to_iterate exists but is NOT a directory according to is_dir(). Iterator might fail. +"; + } + + $count = 0; + $items = []; + try { + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir_to_iterate, FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS | FilesystemIterator::CURRENT_AS_FILEINFO), + RecursiveIteratorIterator::SELF_FIRST + ); + + foreach ($iterator as $item) { + $pathname = $item->getPathname(); + $type = $item->isDir() ? 'Dir' : ($item->isFile() ? 'File' : 'Other'); + $items[] = "Item: " . $pathname . " (Type: " . $type . ", isLink: " . ($item->isLink()?'Yes':'No') . ")"; + $count++; + } + echo "Found $count items in $dir_to_iterate: +"; + sort($items); // Sort for consistent output + foreach($items as $line) { + echo $line . " +"; + } + + } catch (UnexpectedValueException $e) { + echo "ERROR creating RecursiveDirectoryIterator for $dir_to_iterate: " . $e->getMessage() . " +"; + } catch (Exception $e) { + echo "ERROR iterating $dir_to_iterate: " . $e->getMessage() . " +"; + } +} + +?> +--EXPECTF-- +This will be filled after observing the output. diff --git a/user_iterators_stderr.log b/user_iterators_stderr.log new file mode 100644 index 0000000..2b39e8f --- /dev/null +++ b/user_iterators_stderr.log @@ -0,0 +1,537 @@ +Resolve: /app/tests/user_fixtures/templatedir -> /app/tests/user_fixtures/templatedir +Resolve: /app/tests/user_fixtures/instance -> /app/tests/user_fixtures/instance +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir', returning 'NULL (use original)' +Realpath /app/tests/user_fixtures/templatedir ((null)) +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/instance', options: 2 (CHK_EX=N, RET_INST=N) +T2I_REFACTOR: Path '/app/tests/user_fixtures/instance' is outside template/instance or does not meet criteria. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/instance', returning 'NULL (use original)' +Realpath /app/tests/user_fixtures/instance ((null)) +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe', returning '/app/tests/user_fixtures/instance/qwe' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe (original URL: /app/tests/user_fixtures/templatedir/qwe) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe' => '/app/tests/user_fixtures/instance/qwe' +Opendir: /app/tests/user_fixtures/templatedir/qwe (/app/tests/user_fixtures/instance/qwe) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: modulebuilder +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry: modulebuilder +shadow_dirstream_read: Copied to dirent: modulebuilder +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry: modulebuilder +shadow_dirstream_read: Copied to dirent: modulebuilder +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder' => '/app/tests/user_fixtures/instance/qwe/modulebuilder' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder (/app/tests/user_fixtures/instance/qwe/modulebuilder) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', returning '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Result: 0 +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (original URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' => '/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks' +Opendir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (/app/tests/user_fixtures/instance/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks) +Opening templdir: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/api, Flags: 6 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/api' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/api', returning '/app/tests/user_fixtures/instance/api' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/api (original URL: /app/tests/user_fixtures/templatedir/api) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/api': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0040755 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': Directory +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/api, Result: 0 +shadow_dir_opener: ENTER Path: /app/tests/user_fixtures/templatedir/api, Mode: r +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/api', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/api' is in TEMPLATE territory. +T2I_REFACTOR: Cache hit for '/app/tests/user_fixtures/templatedir/api' => '/app/tests/user_fixtures/instance/api' +Opendir: /app/tests/user_fixtures/templatedir/api (/app/tests/user_fixtures/instance/api) +Opening templdir: /app/tests/user_fixtures/templatedir/api +shadow_dir_opener: Adding from TEMPLATE to mergedata: rest.php +shadow_dir_opener: Adding from TEMPLATE to mergedata: .. +shadow_dir_opener: Adding from TEMPLATE to mergedata: . +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: rest.php +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: .. +shadow_dir_opener: Adding/Updating from INSTANCE to mergedata: . +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_dirstream_read: Attempting to read entry: rest.php +shadow_dirstream_read: Copied to dirent: rest.php +shadow_stat: ENTER URL: /app/tests/user_fixtures/templatedir/api/rest.php, Flags: 7 +STAT_DEBUG: Values: OCE=1, ORI=4, Combo=5. About to call t2i for '/app/tests/user_fixtures/templatedir/api/rest.php' with options: 5 +T2I_REFACTOR: ENTER '/app/tests/user_fixtures/templatedir/api/rest.php', options: 5 (CHK_EX=Y, RET_INST=Y) +T2I_REFACTOR: Path '/app/tests/user_fixtures/templatedir/api/rest.php' is in TEMPLATE territory. +T2I_REFACTOR: EXIT for '/app/tests/user_fixtures/templatedir/api/rest.php', returning '/app/tests/user_fixtures/instance/api/rest.php' +shadow_stat: Resolved Instance Name: /app/tests/user_fixtures/instance/api/rest.php (original URL: /app/tests/user_fixtures/templatedir/api/rest.php) +shadow_stat: Stat on INSTANCE '/app/tests/user_fixtures/instance/api/rest.php': Result: 0 +shadow_stat: SUCCESS for 'used_instance_path_potentially_freed': Mode: 0100644 (octal), UID: 1001, GID: 0 +shadow_stat: Type for 'used_instance_path_potentially_freed': File +shadow_stat: EXIT URL: /app/tests/user_fixtures/templatedir/api/rest.php, Result: 0 +shadow_dirstream_read: Attempting to read entry: .. +shadow_dirstream_read: Copied to dirent: .. +shadow_dirstream_read: Attempting to read entry: . +shadow_dirstream_read: Copied to dirent: . +shadow_dirstream_read: Attempting to read entry (non-string key or end of hash) diff --git a/user_iterators_stdout.log b/user_iterators_stdout.log new file mode 100644 index 0000000..45267a8 --- /dev/null +++ b/user_iterators_stdout.log @@ -0,0 +1,34 @@ +--TEST-- +User-provided iterator test case +--SKIPIF-- +--FILE-- +Shadow paths set: Template='/app/tests/user_fixtures/templatedir', Instance='/app/tests/user_fixtures/instance' +Template Path (realpath): /app/tests/user_fixtures/templatedir +Instance Path (realpath): /app/tests/user_fixtures/instance + +Iterating directory (original path given to iterator): /app/tests/user_fixtures/templatedir/qwe +Found 18 items in /app/tests/user_fixtures/templatedir/qwe: +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Accounts/Account.php (Type: File, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Calls (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Cases (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Contacts (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Documents (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/ExternalUsers (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Meetings (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Messages (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Notes (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Project (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/PurchasedLineItems (Type: Dir, isLink: No) +Item: /app/tests/user_fixtures/templatedir/qwe/modulebuilder/builds/qweqwe/SugarModules/modules/Tasks (Type: Dir, isLink: No) + +Iterating directory (original path given to iterator): /app/tests/user_fixtures/templatedir/api +Found 1 items in /app/tests/user_fixtures/templatedir/api: +Item: /app/tests/user_fixtures/templatedir/api/rest.php (Type: File, isLink: No) +--EXPECTF-- +This will be filled after observing the output.