summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@owncloud.com>2015-11-06 13:36:19 +0100
committerRoeland Jago Douma <rullzer@owncloud.com>2015-11-06 13:36:19 +0100
commit0bb5eadf8984fbb21e9f573da9a37e4a75e83a68 (patch)
tree9a6f35cf75a0ee6e0bc1a010ba2757ef90458708
parentdc96aa384921dab74ea3aea07cbf016f8bd0681f (diff)
downloadnextcloud-server-0bb5eadf8984fbb21e9f573da9a37e4a75e83a68.tar.gz
nextcloud-server-0bb5eadf8984fbb21e9f573da9a37e4a75e83a68.zip
[autoloader] Make sure to load construct full paths
This reduces a lot of the autoloader magic and makes sure that we generate full paths in the autoloader.
-rw-r--r--lib/autoloader.php32
-rw-r--r--lib/base.php6
-rw-r--r--tests/lib/autoloader.php53
3 files changed, 69 insertions, 22 deletions
diff --git a/lib/autoloader.php b/lib/autoloader.php
index b91681946a5..f0fbd9e9f27 100644
--- a/lib/autoloader.php
+++ b/lib/autoloader.php
@@ -100,14 +100,30 @@ class Autoloader {
$paths[] = str_replace('apps/', '', \OC::$CLASSPATH[$class]);
}
} elseif (strpos($class, 'OC_') === 0) {
- // first check for legacy classes if underscores are used
- $paths[] = 'private/legacy/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
- $paths[] = 'private/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
+ $paths[] = \OC::$SERVERROOT . '/lib/private/legacy/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
+ $paths[] = \OC::$SERVERROOT . '/lib/private/' . strtolower(str_replace('_', '/', substr($class, 3)) . '.php');
} elseif (strpos($class, 'OC\\') === 0) {
- $paths[] = 'private/' . strtolower(str_replace('\\', '/', substr($class, 3)) . '.php');
- $paths[] = strtolower(str_replace('\\', '/', substr($class, 3)) . '.php');
+ $split = explode('\\', $class, 3);
+
+ if (count($split) === 3) {
+ $split[1] = strtolower($split[1]);
+
+ if ($split[1] === 'core') {
+ $paths[] = \OC::$SERVERROOT . '/core/' . strtolower(str_replace('\\', '/', $split[2])) . '.php';
+ } else if ($split[1] === 'settings') {
+ $paths[] = \OC::$SERVERROOT . '/settings/' . strtolower(str_replace('\\', '/', $split[2])) . '.php';
+ } else if ($split[1] === 'repair') {
+ $paths[] = \OC::$SERVERROOT . '/lib/repair/' . strtolower(str_replace('\\', '/', $split[2])) . '.php';
+
+ } else {
+ $paths[] = \OC::$SERVERROOT . '/lib/private/' . $split[1] . '/' . strtolower(str_replace('\\', '/', $split[2])) . '.php';
+ }
+
+ } else {
+ $paths[] = \OC::$SERVERROOT . '/lib/private/' . strtolower(str_replace('\\', '/', $split[1])) . '.php';
+ }
} elseif (strpos($class, 'OCP\\') === 0) {
- $paths[] = 'public/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php');
+ $paths[] = \OC::$SERVERROOT . '/lib/public/' . strtolower(str_replace('\\', '/', substr($class, 4)) . '.php');
} elseif (strpos($class, 'OCA\\') === 0) {
list(, $app, $rest) = explode('\\', $class, 3);
$app = strtolower($app);
@@ -118,9 +134,9 @@ class Autoloader {
$paths[] = $appPath . '/lib/' . strtolower(str_replace('\\', '/', $rest) . '.php');
}
} elseif (strpos($class, 'Test_') === 0) {
- $paths[] = 'tests/lib/' . strtolower(str_replace('_', '/', substr($class, 5)) . '.php');
+ $paths[] = \OC::$SERVERROOT . '/tests/lib/' . strtolower(str_replace('_', '/', substr($class, 5)) . '.php');
} elseif (strpos($class, 'Test\\') === 0) {
- $paths[] = 'tests/lib/' . strtolower(str_replace('\\', '/', substr($class, 5)) . '.php');
+ $paths[] = \OC::$SERVERROOT . '/tests/lib/' . strtolower(str_replace('\\', '/', substr($class, 5)) . '.php');
}
return $paths;
}
diff --git a/lib/base.php b/lib/base.php
index 95a47dec1e2..f44c4ff5bf2 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -117,12 +117,6 @@ class OC {
* the app path list is empty or contains an invalid path
*/
public static function initPaths() {
- // ensure we can find OC_Config
- set_include_path(
- OC::$SERVERROOT . '/lib' . PATH_SEPARATOR .
- get_include_path()
- );
-
if(defined('PHPUNIT_CONFIG_DIR')) {
self::$configDir = OC::$SERVERROOT . '/' . PHPUNIT_CONFIG_DIR . '/';
} elseif(defined('PHPUNIT_RUN') and PHPUNIT_RUN and is_dir(OC::$SERVERROOT . '/tests/config/')) {
diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php
index 6d9d3bd8eba..fa10c0b6216 100644
--- a/tests/lib/autoloader.php
+++ b/tests/lib/autoloader.php
@@ -20,41 +20,78 @@ class AutoLoader extends TestCase {
}
public function testLeadingSlashOnClassName() {
- $this->assertEquals(array('private/files/storage/local.php', 'files/storage/local.php'), $this->loader->findClass('\OC\Files\Storage\Local'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/private/files/storage/local.php',
+ ], $this->loader->findClass('\OC\Files\Storage\Local'));
}
public function testNoLeadingSlashOnClassName() {
- $this->assertEquals(array('private/files/storage/local.php', 'files/storage/local.php'), $this->loader->findClass('OC\Files\Storage\Local'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/private/files/storage/local.php',
+ ], $this->loader->findClass('OC\Files\Storage\Local'));
}
public function testLegacyPath() {
- $this->assertEquals(array('private/legacy/files.php', 'private/files.php'), $this->loader->findClass('OC_Files'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/private/legacy/files.php',
+ \OC::$SERVERROOT . '/lib/private/files.php',
+ ], $this->loader->findClass('OC_Files'));
}
public function testLoadTestNamespace() {
- $this->assertEquals(array('tests/lib/foo/bar.php'), $this->loader->findClass('Test\Foo\Bar'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/tests/lib/foo/bar.php'
+ ], $this->loader->findClass('Test\Foo\Bar'));
}
public function testLoadTest() {
- $this->assertEquals(array('tests/lib/foo/bar.php'), $this->loader->findClass('Test_Foo_Bar'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/tests/lib/foo/bar.php'
+ ], $this->loader->findClass('Test_Foo_Bar'));
}
public function testLoadCoreNamespace() {
- $this->assertEquals(array('private/foo/bar.php', 'foo/bar.php'), $this->loader->findClass('OC\Foo\Bar'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/private/foo/bar.php',
+ ], $this->loader->findClass('OC\Foo\Bar'));
}
public function testLoadCore() {
- $this->assertEquals(array('private/legacy/foo/bar.php', 'private/foo/bar.php'), $this->loader->findClass('OC_Foo_Bar'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/private/legacy/foo/bar.php',
+ \OC::$SERVERROOT . '/lib/private/foo/bar.php',
+ ], $this->loader->findClass('OC_Foo_Bar'));
}
public function testLoadPublicNamespace() {
- $this->assertEquals(array('public/foo/bar.php'), $this->loader->findClass('OCP\Foo\Bar'));
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/public/foo/bar.php',
+ ], $this->loader->findClass('OCP\Foo\Bar'));
}
public function testLoadAppNamespace() {
$result = $this->loader->findClass('OCA\Files\Foobar');
+ print_r($result);
$this->assertEquals(2, count($result));
$this->assertStringEndsWith('apps/files/foobar.php', $result[0]);
$this->assertStringEndsWith('apps/files/lib/foobar.php', $result[1]);
}
+
+ public function testLoadCoreNamespaceCore() {
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/core/foo/bar.php',
+ ], $this->loader->findClass('OC\Core\Foo\Bar'));
+ }
+
+ public function testLoadCoreNamespaceSettings() {
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/settings/foo/bar.php',
+ ], $this->loader->findClass('OC\Settings\Foo\Bar'));
+ }
+
+ public function testLoadCoreNamespaceRepair() {
+ $this->assertEquals([
+ \OC::$SERVERROOT . '/lib/repair/foo/bar.php',
+ ], $this->loader->findClass('OC\Repair\Foo\Bar'));
+ }
}