]> source.dussan.org Git - nextcloud-server.git/commitdiff
Wait with getting the timezone from the smb server until we need it
authorRobin Appelman <icewind@owncloud.com>
Fri, 13 Mar 2015 13:35:37 +0000 (14:35 +0100)
committerRobin Appelman <icewind@owncloud.com>
Fri, 13 Mar 2015 13:36:34 +0000 (14:36 +0100)
apps/files_external/3rdparty/composer.lock
apps/files_external/3rdparty/composer/installed.json
apps/files_external/3rdparty/icewind/smb/.gitignore
apps/files_external/3rdparty/icewind/smb/src/Parser.php
apps/files_external/3rdparty/icewind/smb/src/Share.php
apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php [new file with mode: 0644]
apps/files_external/3rdparty/icewind/smb/tests/AbstractShare.php
apps/files_external/3rdparty/icewind/smb/tests/Parser.php

index 3da75b2a900daba7d683eaa266b00cb6c8efaaed..0a7dcf89876a8e5b494f5b08b812781f545df4b7 100644 (file)
             "source": {
                 "type": "git",
                 "url": "https://github.com/icewind1991/SMB.git",
-                "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+                "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
-                "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+                "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+                "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
                 "shasum": ""
             },
             "require": {
@@ -45,7 +45,7 @@
                 }
             ],
             "description": "php wrapper for smbclient and libsmbclient-php",
-            "time": "2015-02-10 16:37:37"
+            "time": "2015-03-13 12:17:14"
         },
         {
             "name": "icewind/streams",
index 03bad8abf36255f363c0fa24ea0f0d0c06dee3b4..eae04e877d209c2329633d22edf804624a2d7094 100644 (file)
         "source": {
             "type": "git",
             "url": "https://github.com/icewind1991/SMB.git",
-            "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d"
+            "reference": "ef4b128143b7272e97665b84862d77faabf7d36d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
-            "reference": "ededbfbaa3d7124ce8d4b6c119cd225fa342916d",
+            "url": "https://api.github.com/repos/icewind1991/SMB/zipball/ef4b128143b7272e97665b84862d77faabf7d36d",
+            "reference": "ef4b128143b7272e97665b84862d77faabf7d36d",
             "shasum": ""
         },
         "require": {
@@ -63,7 +63,7 @@
         "require-dev": {
             "satooshi/php-coveralls": "dev-master"
         },
-        "time": "2015-02-10 16:37:37",
+        "time": "2015-03-13 12:17:14",
         "type": "library",
         "installation-source": "source",
         "autoload": {
index 3ce5adbbde5536c3d923b26fb03652d0fa05ba3a..4f389129e2d9021981c41e0389a3bbb2455d8786 100644 (file)
@@ -1,2 +1,3 @@
 .idea
 vendor
+composer.lock
index 645678d9855444209113ada96903ed49db606707..381c4917a92e604ee3d599e02cd40c3f47c0e97a 100644 (file)
@@ -17,15 +17,15 @@ use Icewind\SMB\Exception\NotFoundException;
 
 class Parser {
        /**
-        * @var string
+        * @var \Icewind\SMB\TimeZoneProvider
         */
-       protected $timeZone;
+       protected $timeZoneProvider;
 
        /**
-        * @param string $timeZone
+        * @param \Icewind\SMB\TimeZoneProvider $timeZoneProvider
         */
-       public function __construct($timeZone) {
-               $this->timeZone = $timeZone;
+       public function __construct(TimeZoneProvider $timeZoneProvider) {
+               $this->timeZoneProvider = $timeZoneProvider;
        }
 
        public function checkForError($output, $path) {
@@ -120,7 +120,7 @@ class Parser {
                                list(, $name, $mode, $size, $time) = $matches;
                                if ($name !== '.' and $name !== '..') {
                                        $mode = $this->parseMode($mode);
-                                       $time = strtotime($time . ' ' . $this->timeZone);
+                                       $time = strtotime($time . ' ' . $this->timeZoneProvider->get());
                                        $content[] = new FileInfo($basePath . '/' . $name, $name, $size, $time, $mode);
                                }
                        }
index 5c48b1702fa8b6bacc9bc712eb4cef05ba470237..025a84380a1a5bb1ae80a5a2a257309c87ef3c12 100644 (file)
@@ -38,8 +38,6 @@ class Share implements IShare {
         */
        protected $parser;
 
-       private $serverTimezone;
-
        /**
         * @param Server $server
         * @param string $name
@@ -47,7 +45,7 @@ class Share implements IShare {
        public function __construct($server, $name) {
                $this->server = $server;
                $this->name = $name;
-               $this->parser = new Parser($this->server->getTimeZone());
+               $this->parser = new Parser(new TimeZoneProvider($this->server->getHost()));
        }
 
        /**
@@ -374,6 +372,9 @@ class Share implements IShare {
         * @return string
         */
        protected function escapePath($path) {
+               if ($path === '/') {
+                       $path = '';
+               }
                $path = str_replace('/', '\\', $path);
                $path = str_replace('"', '^"', $path);
                return '"' . $path . '"';
diff --git a/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php b/apps/files_external/3rdparty/icewind/smb/src/TimeZoneProvider.php
new file mode 100644 (file)
index 0000000..22406a4
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Licensed under the MIT license:
+ * http://opensource.org/licenses/MIT
+ */
+
+namespace Icewind\SMB;
+
+class TimeZoneProvider {
+       /**
+        * @var string
+        */
+       private $host;
+
+       /**
+        * @var string
+        */
+       private $timeZone;
+
+       /**
+        * @param string $host
+        */
+       function __construct($host) {
+               $this->host = $host;
+       }
+
+       public function get() {
+               if (!$this->timeZone) {
+                       $command = 'net time zone -S ' . escapeshellarg($this->host);
+                       $this->timeZone = exec($command);
+               }
+               return $this->timeZone;
+       }
+}
index 117fff1ca196efb2e0944cb6fe5a0febde565e83..f8ccb7119ed10047bde6b082218cf8a2d8733ece 100644 (file)
@@ -331,7 +331,7 @@ abstract class AbstractShare extends \PHPUnit_Framework_TestCase {
                $this->share->put($this->getTextFile(), $this->root . '/foo.txt');
                $dir = $this->share->dir($this->root);
                $mtime = $dir[0]->getMTime();
-               $this->assertTrue(abs($now - $mtime) <= 1, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
+               $this->assertTrue(abs($now - $mtime) <= 2, 'Modified time differs by ' . abs($now - $mtime) . ' seconds');
                $this->share->del($this->root . '/foo.txt');
        }
 
@@ -531,4 +531,9 @@ abstract class AbstractShare extends \PHPUnit_Framework_TestCase {
                $this->assertCount(1, $content);
                $this->assertEquals($name, $content[0]->getName());
        }
+
+       public function testStatRoot() {
+               $info = $this->share->stat('/');
+               $this->assertInstanceOf('\Icewind\SMB\IFileInfo', $info);
+       }
 }
index 0dd06d6af3311c5727fcb67aa4a7fac02963af17..5caa048a6648072d647e4a8566f02d34904e6117 100644 (file)
@@ -24,11 +24,25 @@ class Parser extends \PHPUnit_Framework_TestCase {
                );
        }
 
+       /**
+        * @param string $timeZone
+        * @return \Icewind\SMB\TimeZoneProvider
+        */
+       private function getTimeZoneProvider($timeZone) {
+               $mock = $this->getMockBuilder('\Icewind\SMB\TimeZoneProvider')
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects($this->any())
+                       ->method('get')
+                       ->will($this->returnValue($timeZone));
+               return $mock;
+       }
+
        /**
         * @dataProvider modeProvider
         */
        public function testParseMode($string, $mode) {
-               $parser = new \Icewind\SMB\Parser('UTC');
+               $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
                $this->assertEquals($mode, $parser->parseMode($string), 'Failed parsing ' . $string);
        }
 
@@ -48,7 +62,8 @@ class Parser extends \PHPUnit_Framework_TestCase {
                                        'mtime' => strtotime('12 Oct 2013 19:05:58 CEST'),
                                        'mode' => FileInfo::MODE_NORMAL,
                                        'size' => 29634
-                               ))
+                               )
+                       )
                );
        }
 
@@ -56,7 +71,7 @@ class Parser extends \PHPUnit_Framework_TestCase {
         * @dataProvider statProvider
         */
        public function testStat($output, $stat) {
-               $parser = new \Icewind\SMB\Parser('UTC');
+               $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('UTC'));
                $this->assertEquals($stat, $parser->parseStat($output));
        }
 
@@ -71,7 +86,8 @@ class Parser extends \PHPUnit_Framework_TestCase {
                                        '                62536 blocks of size 8388608. 57113 blocks available'
                                ),
                                array(
-                                       new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'), FileInfo::MODE_NORMAL)
+                                       new FileInfo('/c.pdf', 'c.pdf', 29634, strtotime('12 Oct 2013 19:05:58 CEST'),
+                                               FileInfo::MODE_NORMAL)
                                )
                        )
                );
@@ -81,7 +97,7 @@ class Parser extends \PHPUnit_Framework_TestCase {
         * @dataProvider dirProvider
         */
        public function testDir($output, $dir) {
-               $parser = new \Icewind\SMB\Parser('CEST');
+               $parser = new \Icewind\SMB\Parser($this->getTimeZoneProvider('CEST'));
                $this->assertEquals($dir, $parser->parseDir($output, ''));
        }
 }