[Pkg-owncloud-commits] [owncloud] 27/83: Emulate touch() for backends that don't support it

David Prévot taffit at moszumanska.debian.org
Wed Dec 18 13:05:26 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch 5.0
in repository owncloud.

commit 64b484e32e2d16736a8bacc86980026deefcf42a
Author: Robin Appelman <icewind at owncloud.com>
Date:   Sun Feb 10 12:44:27 2013 +0100

    Emulate touch() for backends that don't support it
    
    Backport of 9738fae3cf1ad18593d21eb62e138e00c01f5f36
---
 lib/files/view.php       |  6 +++++-
 tests/lib/files/view.php | 34 ++++++++++++++++++++++++++++++++--
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/lib/files/view.php b/lib/files/view.php
index f02e3d4..65c5a52 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -254,7 +254,11 @@ class View {
 			$hooks[] = 'write';
 		}
 
-		return $this->basicOperation('touch', $path, $hooks, $mtime);
+		$result = $this->basicOperation('touch', $path, array('write'), $mtime);
+		if (!$result) { //if native touch fails, we emulate it by changing the mtime in the cache
+			$this->putFileInfo($path, array('mtime' => $mtime));
+		}
+		return true;
 	}
 
 	public function file_get_contents($path) {
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 732f61d..88b4113 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -7,6 +7,12 @@
 
 namespace Test\Files;
 
+class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
+	public function touch($path, $mtime = null) {
+		return false;
+	}
+}
+
 class View extends \PHPUnit_Framework_TestCase {
 	/**
 	 * @var \OC\Files\Storage\Storage[] $storages;
@@ -262,12 +268,36 @@ class View extends \PHPUnit_Framework_TestCase {
 		$this->hookPath = $params['path'];
 	}
 
+	function testTouch() {
+		$storage = $this->getTestStorage(true, '\Test\Files\TemporaryNoTouch');
+
+		\OC\Files\Filesystem::mount($storage, array(), '/');
+
+		$rootView = new \OC\Files\View('');
+		$oldCachedData = $rootView->getFileInfo('foo.txt');
+
+		$rootView->touch('foo.txt', 500);
+
+		$cachedData = $rootView->getFileInfo('foo.txt');
+		$this->assertEquals(500, $cachedData['mtime']);
+		$this->assertEquals($oldCachedData['storage_mtime'], $cachedData['storage_mtime']);
+
+		$rootView->putFileInfo('foo.txt', array('storage_mtime' => 1000)); //make sure the watcher detects the change
+		$rootView->file_put_contents('foo.txt', 'asd');
+		$cachedData = $rootView->getFileInfo('foo.txt');
+		$this->assertGreaterThanOrEqual($cachedData['mtime'], $oldCachedData['mtime']);
+		$this->assertEquals($cachedData['storage_mtime'], $cachedData['mtime']);
+	}
+
 	/**
 	 * @param bool $scan
 	 * @return \OC\Files\Storage\Storage
 	 */
-	private function getTestStorage($scan = true) {
-		$storage = new \OC\Files\Storage\Temporary(array());
+	private function getTestStorage($scan = true, $class = '\OC\Files\Storage\Temporary') {
+		/**
+		 * @var \OC\Files\Storage\Storage $storage
+		 */
+		$storage = new $class(array());
 		$textData = "dummy file data\n";
 		$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo.png');
 		$storage->mkdir('folder');

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list