From 19c7d9c3dcbce1c6b2d38f82d61a8d95a800a65a Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Sun, 24 Mar 2013 16:20:59 +0100
Subject: [PATCH] Port Icewind's fix I

---
 lib/files/cache/legacy.php  | 24 ++++++++++++++++++++++--
 lib/files/cache/upgrade.php |  1 +
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/lib/files/cache/legacy.php b/lib/files/cache/legacy.php
index eac2795d6d..55e40e1af7 100644
--- a/lib/files/cache/legacy.php
+++ b/lib/files/cache/legacy.php
@@ -79,7 +79,23 @@ class Legacy {
 			$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `path` = ?');
 		}
 		$result = $query->execute(array($path));
-		return $result->fetchRow();
+		$data = $result->fetchRow();
+		$data['etag'] = $this->getEtag($data['path']);
+		return $data;
+	}
+
+	function getEtag($path) {
+		list(, $user, , $relativePath) = explode('/', $path, 4);
+		if (is_null($relativePath)) {
+			$relativePath = '';
+		}
+		$query = \OC_DB::prepare('SELECT `propertyvalue` FROM `*PREFIX*properties` WHERE `userid` = ? AND propertypath = ? AND propertyname = "{DAV:}getetag"');
+		$result = $query->execute(array($user, $relativePath));
+		if ($row = $result->fetchRow()) {
+			return trim($row['propertyvalue'], '"');
+		} else {
+			return '';
+		}
 	}
 
 	/**
@@ -91,6 +107,10 @@ class Legacy {
 	function getChildren($id) {
 		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `parent` = ?');
 		$result = $query->execute(array($id));
-		return $result->fetchAll();
+		$data = $result->fetchAll();
+		foreach ($data as $i => $item) {
+			$data[$i]['etag'] = $this->getEtag($item['path']);
+		}
+		return $data;
 	}
 }
diff --git a/lib/files/cache/upgrade.php b/lib/files/cache/upgrade.php
index ab64a65a28..4d60199b15 100644
--- a/lib/files/cache/upgrade.php
+++ b/lib/files/cache/upgrade.php
@@ -134,6 +134,7 @@ class Upgrade {
 		 */
 		list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath($data['path']);
 		if ($storage) {
+			$newData['etag'] = $data['etag'];
 			$newData['path_hash'] = md5($internalPath);
 			$newData['path'] = $internalPath;
 			$newData['storage'] = $this->getNumericId($storage);
-- 
GitLab