Skip to content
This repository was archived by the owner on Nov 25, 2020. It is now read-only.

Commit 0c76910

Browse files
committed
Use loadNodeInfo() instead of stat in ChangesTracker, otherwise eventForwarding can end up indexing a folder as file.
1 parent c9162bd commit 0c76910

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

core/src/plugins/meta.syncable/class.ChangesTracker.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ public function updateNodesIndex($oldNode = null, $newNode = null, $copy = false
332332
if(!dibi::isConnected()) {
333333
dibi::connect($this->sqlDriver);
334334
}
335+
$this->logInfo("Syncable index", array($oldNode == null?'null':$oldNode->getUrl(), $newNode == null?'null':$newNode->getUrl()));
335336
try {
336337
if ($newNode != null && $this->excludeNode($newNode)) {
337338
// CREATE
@@ -349,11 +350,21 @@ public function updateNodesIndex($oldNode = null, $newNode = null, $copy = false
349350
dibi::query("DELETE FROM [ajxp_index] WHERE [node_path] LIKE %like~ AND [repository_identifier] = %s", $oldNode->getPath(), $repoId);
350351
} else if ($oldNode == null || $copy) {
351352
// CREATE
352-
$stat = stat($newNode->getUrl());
353+
$newNode->loadNodeInfo();
354+
$mtime = $newNode->ajxp_modiftime;
355+
$size = $newNode->bytesize;
356+
if(!isSet($mtime)){
357+
$stat = @stat($newNode->getUrl());
358+
if($stat === false){
359+
throw new Exception('Error while trying to sync node '.$newNode->getUrl());
360+
}
361+
$mtime = $stat["mtime"];
362+
$size = $stat["size"];
363+
}
353364
$res = dibi::query("INSERT INTO [ajxp_index]", array(
354365
"node_path" => $newNode->getPath(),
355-
"bytesize" => $stat["size"],
356-
"mtime" => $stat["mtime"],
366+
"bytesize" => $size,
367+
"mtime" => $mtime,
357368
"md5" => $newNode->isLeaf()? md5_file($newNode->getUrl()):"directory",
358369
"repository_identifier" => $repoId = $this->computeIdentifier($newNode->getRepository(), $newNode->getUser())
359370
));
@@ -386,6 +397,7 @@ public function updateNodesIndex($oldNode = null, $newNode = null, $copy = false
386397
}
387398
}
388399
} catch (Exception $e) {
400+
AJXP_Logger::error("[meta.syncable]", "Exception", $e->getTraceAsString());
389401
AJXP_Logger::error("[meta.syncable]", "Indexation", $e->getMessage());
390402
}
391403

0 commit comments

Comments
 (0)