aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/lib/DAV/Tree.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/lib/DAV/Tree.php')
-rw-r--r--vendor/sabre/dav/lib/DAV/Tree.php14
1 files changed, 13 insertions, 1 deletions
diff --git a/vendor/sabre/dav/lib/DAV/Tree.php b/vendor/sabre/dav/lib/DAV/Tree.php
index 65b4583ce..1483e1bc5 100644
--- a/vendor/sabre/dav/lib/DAV/Tree.php
+++ b/vendor/sabre/dav/lib/DAV/Tree.php
@@ -62,9 +62,21 @@ class Tree implements INodeByPath
return $this->rootNode;
}
- $parts = explode('/', $path);
$node = $this->rootNode;
+ // look for any cached parent and collect the parts below the parent
+ $parts = [];
+ $remainingPath = $path;
+ do {
+ list($remainingPath, $baseName) = Uri\split($remainingPath);
+ array_unshift($parts, $baseName);
+
+ if (isset($this->cache[$remainingPath])) {
+ $node = $this->cache[$remainingPath];
+ break;
+ }
+ } while ('' !== $remainingPath);
+
while (count($parts)) {
if (!($node instanceof ICollection)) {
throw new Exception\NotFound('Could not find node at path: '.$path);