Hello community,

here is the log from the commit of package platformsh-cli for openSUSE:Factory 
checked in at 2018-01-31 19:53:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/platformsh-cli (Old)
 and      /work/SRC/openSUSE:Factory/.platformsh-cli.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "platformsh-cli"

Wed Jan 31 19:53:17 2018 rev:34 rq:571273 version:3.28.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/platformsh-cli/platformsh-cli.changes    
2018-01-24 15:32:19.389258493 +0100
+++ /work/SRC/openSUSE:Factory/.platformsh-cli.new/platformsh-cli.changes       
2018-01-31 19:53:45.016291392 +0100
@@ -1,0 +2,17 @@
+Wed Jan 31 03:51:19 UTC 2018 - [email protected]
+
+- Update to version 3.28.0:
+  * Update manifest for rebuild of v3.28.0
+  * Release v3.28.0
+  * Update dependencies (mainly Symfony 3.4.2 -> 3.4.4)
+  * Add activity state in log
+  * Fix inverted requirement of -e/-a in activity:list and activity:log
+  * Add activity duration and simplify log output
+  * Add activity:get command
+  * Add --date-fmt option to `activity:list` and `snapshot:list`.
+  * Respect date.timezone and allow TZ env var
+  * Fix existing aliases being prefixed with "@" (#679)
+  * Avoid fatal if an InvalidConfigException is encountered during 
updateDrushAliases()
+  * Use -t instead of RequestTty, for OpenSSH <5.9
+
+-------------------------------------------------------------------

Old:
----
  platformsh-cli-3.27.2.tar.xz

New:
----
  platformsh-cli-3.28.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ platformsh-cli.spec ++++++
--- /var/tmp/diff_new_pack.vNCo2R/_old  2018-01-31 19:53:46.228235031 +0100
+++ /var/tmp/diff_new_pack.vNCo2R/_new  2018-01-31 19:53:46.232234845 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           platformsh-cli
-Version:        3.27.2
+Version:        3.28.0
 Release:        0
 Summary:        Tool for managing Platform.sh services from the command line
 # See licenses.txt for dependency licenses.

++++++ _service ++++++
--- /var/tmp/diff_new_pack.vNCo2R/_old  2018-01-31 19:53:46.268233171 +0100
+++ /var/tmp/diff_new_pack.vNCo2R/_new  2018-01-31 19:53:46.268233171 +0100
@@ -2,7 +2,7 @@
   <service name="tar_scm" mode="disabled">
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
-    <param name="revision">refs/tags/v3.27.2</param>
+    <param name="revision">refs/tags/v3.28.0</param>
     <param name="url">git://github.com/platformsh/platformsh-cli.git</param>
     <param name="scm">git</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.vNCo2R/_old  2018-01-31 19:53:46.304231497 +0100
+++ /var/tmp/diff_new_pack.vNCo2R/_new  2018-01-31 19:53:46.308231311 +0100
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param name="url">git://github.com/platformsh/platformsh-cli.git</param>
-    <param 
name="changesrevision">52ea816bec0b04d68feeac9109cf3a1e0d551364</param>
+    <param 
name="changesrevision">c6a6802cd9b738a9a3234fe32e4476c74ba98c6c</param>
   </service>
 </servicedata>

++++++ licenses.txt ++++++
--- /var/tmp/diff_new_pack.vNCo2R/_old  2018-01-31 19:53:46.372228335 +0100
+++ /var/tmp/diff_new_pack.vNCo2R/_new  2018-01-31 19:53:46.376228149 +0100
@@ -10,25 +10,25 @@
 doctrine/cache                      v1.6.2   MIT           
 firebase/php-jwt                    v2.2.0   BSD-3-Clause  
 guzzlehttp/cache-subscriber         0.1.0    MIT           
-guzzlehttp/guzzle                   5.3.1    MIT           
+guzzlehttp/guzzle                   5.3.2    MIT           
 guzzlehttp/ringphp                  1.1.0    MIT           
 guzzlehttp/streams                  3.0.0    MIT           
 padraic/humbug_get_contents         1.0.4    BSD-3-Clause  
 padraic/phar-updater                1.0.4    BSD-3-Clause  
 paragonie/random_compat             v2.0.11  MIT           
-platformsh/client                   v0.14.0  MIT           
+platformsh/client                   v0.14.1  MIT           
 platformsh/console-form             v0.0.15  MIT           
 psr/container                       1.0.0    MIT           
 psr/log                             1.0.2    MIT           
 react/promise                       v2.5.1   MIT           
 stecman/symfony-console-completion  0.7.0    MIT           
-symfony/config                      v3.4.2   MIT           
-symfony/console                     v3.4.2   MIT           
-symfony/debug                       v3.4.2   MIT           
-symfony/dependency-injection        v3.4.2   MIT           
-symfony/event-dispatcher            v3.4.2   MIT           
-symfony/filesystem                  v3.4.2   MIT           
-symfony/finder                      v3.4.2   MIT           
+symfony/config                      v3.4.4   MIT           
+symfony/console                     v3.4.4   MIT           
+symfony/debug                       v3.4.4   MIT           
+symfony/dependency-injection        v3.4.4   MIT           
+symfony/event-dispatcher            v3.4.4   MIT           
+symfony/filesystem                  v3.4.4   MIT           
+symfony/finder                      v3.4.4   MIT           
 symfony/polyfill-mbstring           v1.6.0   MIT           
-symfony/process                     v3.4.2   MIT           
-symfony/yaml                        v3.4.2   MIT           
+symfony/process                     v3.4.4   MIT           
+symfony/yaml                        v3.4.4   MIT           

++++++ platformsh-cli-3.27.2.tar.xz -> platformsh-cli-3.28.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/CHANGELOG.md 
new/platformsh-cli-3.28.0/CHANGELOG.md
--- old/platformsh-cli-3.27.2/CHANGELOG.md      2018-01-23 19:08:21.000000000 
+0100
+++ new/platformsh-cli-3.28.0/CHANGELOG.md      2018-01-30 17:56:41.000000000 
+0100
@@ -4,6 +4,19 @@
 
 More readable, curated release notes can be found at: 
https://github.com/platformsh/platformsh-cli/releases
 
+## [v3.28.0](https://github.com/platformsh/platformsh-cli/tree/v3.27.2) 
(2018-01-30)
+[Full 
Changelog](https://github.com/platformsh/platformsh-cli/compare/v3.27.2...v3.28.0)
+
+* Improve `activity:log` output to show more activity information.
+* Add `activity:get` command, hidden for now.
+* Add `--date-fmt` option to `activity:list` and `snapshot:list`.
+* Respect the date.timezone ini setting, and the TZ environment variable.
+* Fix inverted requirement of -e/-a options in activity:log (`-a` should make 
`-e` not required).
+* Fix user-defined aliases being prefixed with "@" (thanks to @GROwen, #677)
+* Avoid fatal error if invalid YAML config is encountered during 
updateDrushAliases()
+* Use -t instead of RequestTTY in SSH commands, for OpenSSH <5.9
+* Update dependencies (mainly Symfony 3.4.2 -> 3.4.4)
+
 ## [v3.27.2](https://github.com/platformsh/platformsh-cli/tree/v3.27.2) 
(2018-01-23)
 [Full 
Changelog](https://github.com/platformsh/platformsh-cli/compare/v3.27.1...v3.27.2)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/composer.json 
new/platformsh-cli-3.28.0/composer.json
--- old/platformsh-cli-3.27.2/composer.json     2018-01-23 19:08:21.000000000 
+0100
+++ new/platformsh-cli-3.28.0/composer.json     2018-01-30 17:56:41.000000000 
+0100
@@ -37,8 +37,7 @@
     },
     "require-dev": {
         "phpunit/phpunit": "^4.3 <4.8",
-        "drush/drush": "^8.0",
-        "sensiolabs/security-checker": "^3.0"
+        "drush/drush": "^8.0"
     },
     "authors": [
         {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/composer.lock 
new/platformsh-cli-3.28.0/composer.lock
--- old/platformsh-cli-3.27.2/composer.lock     2018-01-23 19:08:21.000000000 
+0100
+++ new/platformsh-cli-3.28.0/composer.lock     2018-01-30 17:56:41.000000000 
+0100
@@ -4,7 +4,7 @@
         "Read more about it at 
https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file";,
         "This file is @generated automatically"
     ],
-    "content-hash": "c2de348d7c061147a43e58c9dc33b88c",
+    "content-hash": "99aec30edb51fe7608bde25ca891ca04",
     "packages": [
         {
             "name": "cocur/slugify",
@@ -332,21 +332,22 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "5.3.1",
+            "version": "5.3.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git";,
-                "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8"
+                "reference": "f9acb4761844317e626a32259205bec1f1bc60d2"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/guzzle/guzzle/zipball/70f1fa53b71c4647bf2762c09068a95f77e12fb8";,
-                "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8",
+                "url": 
"https://api.github.com/repos/guzzle/guzzle/zipball/f9acb4761844317e626a32259205bec1f1bc60d2";,
+                "reference": "f9acb4761844317e626a32259205bec1f1bc60d2",
                 "shasum": ""
             },
             "require": {
                 "guzzlehttp/ringphp": "^1.1",
-                "php": ">=5.4.0"
+                "php": ">=5.4.0",
+                "react/promise": "^2.2"
             },
             "require-dev": {
                 "ext-curl": "*",
@@ -380,7 +381,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2016-07-15T19:28:39+00:00"
+            "time": "2018-01-15T07:18:01+00:00"
         },
         {
             "name": "guzzlehttp/ringphp",
@@ -642,16 +643,16 @@
         },
         {
             "name": "platformsh/client",
-            "version": "v0.14.0",
+            "version": "v0.14.1",
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/platformsh/platformsh-client-php.git";,
-                "reference": "47013df77c5ac9d1cea32fd4caa3999ecca150ca"
+                "reference": "b1c5ff8a0cd896a80aa7330a42d7be9e9ef0dd98"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/platformsh/platformsh-client-php/zipball/47013df77c5ac9d1cea32fd4caa3999ecca150ca";,
-                "reference": "47013df77c5ac9d1cea32fd4caa3999ecca150ca",
+                "url": 
"https://api.github.com/repos/platformsh/platformsh-client-php/zipball/b1c5ff8a0cd896a80aa7330a42d7be9e9ef0dd98";,
+                "reference": "b1c5ff8a0cd896a80aa7330a42d7be9e9ef0dd98",
                 "shasum": ""
             },
             "require": {
@@ -687,7 +688,7 @@
                 }
             ],
             "description": "Platform.sh API client",
-            "time": "2017-12-20T12:45:06+00:00"
+            "time": "2018-01-19T10:05:52+00:00"
         },
         {
             "name": "platformsh/console-form",
@@ -917,16 +918,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git";,
-                "reference": "e57211b88aa889fefac1cb36866db04100b0f21c"
+                "reference": "72689b934d6c6ecf73eca874e98933bf055313c9"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c";,
-                "reference": "e57211b88aa889fefac1cb36866db04100b0f21c",
+                "url": 
"https://api.github.com/repos/symfony/config/zipball/72689b934d6c6ecf73eca874e98933bf055313c9";,
+                "reference": "72689b934d6c6ecf73eca874e98933bf055313c9",
                 "shasum": ""
             },
             "require": {
@@ -975,20 +976,20 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-21T19:05:02+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git";,
-                "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e"
+                "reference": "26b6f419edda16c19775211987651cb27baea7f1"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e";,
-                "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e",
+                "url": 
"https://api.github.com/repos/symfony/console/zipball/26b6f419edda16c19775211987651cb27baea7f1";,
+                "reference": "26b6f419edda16c19775211987651cb27baea7f1",
                 "shasum": ""
             },
             "require": {
@@ -1044,20 +1045,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-29T09:03:43+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git";,
-                "reference": "543deab3ffff94402440b326fc94153bae2dfa7a"
+                "reference": "53f6af2805daf52a43b393b93d2f24925d35c937"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a";,
-                "reference": "543deab3ffff94402440b326fc94153bae2dfa7a",
+                "url": 
"https://api.github.com/repos/symfony/debug/zipball/53f6af2805daf52a43b393b93d2f24925d35c937";,
+                "reference": "53f6af2805daf52a43b393b93d2f24925d35c937",
                 "shasum": ""
             },
             "require": {
@@ -1100,20 +1101,20 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-12T08:27:14+00:00"
+            "time": "2018-01-18T22:16:57+00:00"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git";,
-                "reference": "5f81907ea43bfa971ac2c7fbac593ebe7cd7d333"
+                "reference": "4b2717ee2499390e371e1fc7abaf886c1c83e83d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/dependency-injection/zipball/5f81907ea43bfa971ac2c7fbac593ebe7cd7d333";,
-                "reference": "5f81907ea43bfa971ac2c7fbac593ebe7cd7d333",
+                "url": 
"https://api.github.com/repos/symfony/dependency-injection/zipball/4b2717ee2499390e371e1fc7abaf886c1c83e83d";,
+                "reference": "4b2717ee2499390e371e1fc7abaf886c1c83e83d",
                 "shasum": ""
             },
             "require": {
@@ -1171,20 +1172,20 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-29T09:16:57+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git";,
-                "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835"
+                "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/event-dispatcher/zipball/b869cbf8a15ca6261689de2c28a7d7f2d0706835";,
-                "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835",
+                "url": 
"https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca";,
+                "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca",
                 "shasum": ""
             },
             "require": {
@@ -1234,20 +1235,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-03T07:37:34+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git";,
-                "reference": "25b135bea251829e3db6a77d773643408b575ed4"
+                "reference": "e078773ad6354af38169faf31c21df0f18ace03d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4";,
-                "reference": "25b135bea251829e3db6a77d773643408b575ed4",
+                "url": 
"https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d";,
+                "reference": "e078773ad6354af38169faf31c21df0f18ace03d",
                 "shasum": ""
             },
             "require": {
@@ -1283,20 +1284,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-03T07:37:34+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git";,
-                "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a"
+                "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a";,
-                "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a",
+                "url": 
"https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f";,
+                "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f",
                 "shasum": ""
             },
             "require": {
@@ -1332,7 +1333,7 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-11-05T16:10:10+00:00"
+            "time": "2018-01-03T07:37:34+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
@@ -1395,16 +1396,16 @@
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git";,
-                "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098"
+                "reference": "09a5172057be8fc677840e591b17f385e58c7c0d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/process/zipball/bb3ef65d493a6d57297cad6c560ee04e2a8f5098";,
-                "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098",
+                "url": 
"https://api.github.com/repos/symfony/process/zipball/09a5172057be8fc677840e591b17f385e58c7c0d";,
+                "reference": "09a5172057be8fc677840e591b17f385e58c7c0d",
                 "shasum": ""
             },
             "require": {
@@ -1440,20 +1441,20 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-14T19:40:10+00:00"
+            "time": "2018-01-29T09:03:43+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.2",
+            "version": "v3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git";,
-                "reference": "afe0cd38486505c9703707707d91450cfc1bd536"
+                "reference": "eab73b6c21d27ae4cd037c417618dfd4befb0bfe"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536";,
-                "reference": "afe0cd38486505c9703707707d91450cfc1bd536",
+                "url": 
"https://api.github.com/repos/symfony/yaml/zipball/eab73b6c21d27ae4cd037c417618dfd4befb0bfe";,
+                "reference": "eab73b6c21d27ae4cd037c417618dfd4befb0bfe",
                 "shasum": ""
             },
             "require": {
@@ -1498,7 +1499,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com";,
-            "time": "2017-12-11T20:38:23+00:00"
+            "time": "2018-01-21T19:05:02+00:00"
         }
     ],
     "packages-dev": [
@@ -1888,16 +1889,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v3.1.3",
+            "version": "v3.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git";,
-                "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda"
+                "reference": "e57b3a09784f846411aa7ed664eedb73e3399078"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda";,
-                "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda",
+                "url": 
"https://api.github.com/repos/nikic/PHP-Parser/zipball/e57b3a09784f846411aa7ed664eedb73e3399078";,
+                "reference": "e57b3a09784f846411aa7ed664eedb73e3399078",
                 "shasum": ""
             },
             "require": {
@@ -1935,20 +1936,20 @@
                 "parser",
                 "php"
             ],
-            "time": "2017-12-26T14:43:21+00:00"
+            "time": "2018-01-25T21:31:33+00:00"
         },
         {
             "name": "pear/console_table",
-            "version": "v1.3.0",
+            "version": "v1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Table.git";,
-                "reference": "64100b9ee81852f4fa17823e55d0b385a544f976"
+                "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/pear/Console_Table/zipball/64100b9ee81852f4fa17823e55d0b385a544f976";,
-                "reference": "64100b9ee81852f4fa17823e55d0b385a544f976",
+                "url": 
"https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea";,
+                "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea",
                 "shasum": ""
             },
             "require": {
@@ -1990,7 +1991,7 @@
             "keywords": [
                 "console"
             ],
-            "time": "2016-01-21T16:14:31+00:00"
+            "time": "2018-01-25T20:47:17+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -2925,50 +2926,6 @@
             "time": "2015-06-21T13:59:46+00:00"
         },
         {
-            "name": "sensiolabs/security-checker",
-            "version": "v3.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/sensiolabs/security-checker.git";,
-                "reference": "59a6a299e2f5612dc8692d40e84373703a5df1b5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": 
"https://api.github.com/repos/sensiolabs/security-checker/zipball/59a6a299e2f5612dc8692d40e84373703a5df1b5";,
-                "reference": "59a6a299e2f5612dc8692d40e84373703a5df1b5",
-                "shasum": ""
-            },
-            "require": {
-                "symfony/console": "~2.0|~3.0"
-            },
-            "bin": [
-                "security-checker"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "SensioLabs\\Security": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/";,
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "[email protected]"
-                }
-            ],
-            "description": "A security checker for your composer.lock",
-            "time": "2017-03-29T09:29:53+00:00"
-        },
-        {
             "name": "symfony/var-dumper",
             "version": "v3.2.4",
             "source": {
@@ -3033,16 +2990,16 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.2.0",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git";,
-                "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f";,
-                "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
+                "url": 
"https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a";,
+                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
                 "shasum": ""
             },
             "require": {
@@ -3079,7 +3036,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2016-11-23T20:04:58+00:00"
+            "time": "2018-01-29T19:49:41+00:00"
         },
         {
             "name": "webmozart/path-util",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/config.yaml 
new/platformsh-cli-3.28.0/config.yaml
--- old/platformsh-cli-3.27.2/config.yaml       2018-01-23 19:08:21.000000000 
+0100
+++ new/platformsh-cli-3.28.0/config.yaml       2018-01-30 17:56:41.000000000 
+0100
@@ -1,7 +1,7 @@
 # Metadata about the CLI application itself.
 application:
   name: 'Platform.sh CLI'
-  version: '3.27.2'
+  version: '3.28.0'
   executable: 'platform'
   package_name: 'platformsh/cli'
   installer_url: 'https://platform.sh/cli/installer'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/dist/manifest.json 
new/platformsh-cli-3.28.0/dist/manifest.json
--- old/platformsh-cli-3.27.2/dist/manifest.json        2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/dist/manifest.json        2018-01-30 
17:56:41.000000000 +0100
@@ -1,10 +1,10 @@
 [
     {
         "name": "platform.phar",
-        "sha1": "7163104887c943ed8035f9d42fc87f8baf25edef",
-        "sha256": 
"8508e9e766078d1081208184e8393eb9f2616bb79520bb3d0035202417d24508",
-        "url": 
"https://github.com/platformsh/platformsh-cli/releases/download/v3.27.2/platform.phar";,
-        "version": "3.27.2",
+        "sha1": "4ea45e3d18eaaba7422460ef03912f68638a7ccb",
+        "sha256": 
"fcf5e8d67c198621106a242937c7d6e35eb2df5044847c447b78f3aaa31bce8a",
+        "url": 
"https://github.com/platformsh/platformsh-cli/releases/download/v3.28.0/platform.phar";,
+        "version": "3.28.0",
         "php": {
             "min": "5.5.9"
         },
@@ -97,6 +97,11 @@
                 "notes": "* Use browser login by default (the old login method 
is available as `auth:password-login`).\n* Set 
`--build-pull-requests-post-merge` to false by default (GitHub 
integrations).\n* Respect `--no-wait` in `environment:init`, and clear the 
environment cache afterwards.\n* In the `project:delete` command, leave access 
control to the API.\n* Support disabling or enabling colorized output via the 
CLICOLOR_FORCE environment variable.",
                 "show from": "3.26.0",
                 "hide from": "3.27.0"
+            },
+            {
+                "notes": "* Improved `activity:log` output to show more 
activity information.\n* Added `activity:get` command, hidden for now.\n* Added 
`--date-fmt` option to `activity:list` and `snapshot:list`.\n* Added detection 
for the date.timezone ini setting, and the TZ environment variable.\n* Fixed 
inverted requirement of -e/-a options in activity:log (`-a` should make `-e` 
not required).\n* Fixed user-defined aliases being prefixed with \"@\" (thanks 
to @GROwen, #677).\n* Avoid fatal error if invalid YAML config is encountered 
during updateDrushAliases().\n* Fixed SSH commands for very old OpenSSH 
versions <5.9 (using -t instead of RequestTTY).\n* Updated dependencies (mainly 
Symfony 3.4.2 -> 3.4.4).",
+                "show from": "3.27.0",
+                "hide from": "3.28.0"
             }
         ]
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/src/Application.php 
new/platformsh-cli-3.28.0/src/Application.php
--- old/platformsh-cli-3.27.2/src/Application.php       2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Application.php       2018-01-30 
17:56:41.000000000 +0100
@@ -3,6 +3,7 @@
 
 use Platformsh\Cli\Console\EventSubscriber;
 use Platformsh\Cli\Service\Config;
+use Platformsh\Cli\Util\TimezoneUtil;
 use Symfony\Component\Console\Application as ParentApplication;
 use Symfony\Component\Console\Command\Command as ConsoleCommand;
 use Symfony\Component\Console\Exception\InvalidArgumentException as 
ConsoleInvalidArgumentException;
@@ -34,7 +35,7 @@
         $this->cliConfig = new Config();
         parent::__construct($this->cliConfig->get('application.name'), 
$this->cliConfig->get('application.version'));
 
-        $this->setDefaultTimezone();
+        date_default_timezone_set(TimezoneUtil::getTimezone());
 
         $this->addCommands($this->getCommands());
 
@@ -88,6 +89,7 @@
         $commands[] = new Command\DocsCommand();
         $commands[] = new Command\LegacyMigrateCommand();
         $commands[] = new Command\MultiCommand();
+        $commands[] = new Command\Activity\ActivityGetCommand();
         $commands[] = new Command\Activity\ActivityListCommand();
         $commands[] = new Command\Activity\ActivityLogCommand();
         $commands[] = new Command\App\AppConfigGetCommand();
@@ -261,40 +263,6 @@
     }
 
     /**
-     * Set the default PHP timezone according to the system timezone.
-     *
-     * PHP >=5.4 removed the autodetection of the system timezone, so it is
-     * re-implemented here.
-     */
-    protected function setDefaultTimezone()
-    {
-        $timezone = date_default_timezone_get();
-
-        if (is_link('/etc/localtime')) {
-            // Mac OS X (and older Linuxes)
-            // /etc/localtime is a symlink to the timezone in 
/usr/share/zoneinfo.
-            $filename = readlink('/etc/localtime');
-            if (strpos($filename, '/usr/share/zoneinfo/') === 0) {
-                $timezone = substr($filename, 20);
-            }
-        } elseif (file_exists('/etc/timezone')) {
-            // Ubuntu / Debian.
-            $data = file_get_contents('/etc/timezone');
-            if ($data) {
-                $timezone = trim($data);
-            }
-        } elseif (file_exists('/etc/sysconfig/clock')) {
-            // RHEL/CentOS
-            $data = parse_ini_file('/etc/sysconfig/clock');
-            if (!empty($data['ZONE'])) {
-                $timezone = trim($data['ZONE']);
-            }
-        }
-
-        date_default_timezone_set($timezone);
-    }
-
-    /**
      * {@inheritdoc}
      */
     public function renderException(\Exception $e, OutputInterface $output)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Activity/ActivityGetCommand.php 
new/platformsh-cli-3.28.0/src/Command/Activity/ActivityGetCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Activity/ActivityGetCommand.php       
1970-01-01 01:00:00.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Activity/ActivityGetCommand.php       
2018-01-30 17:56:41.000000000 +0100
@@ -0,0 +1,126 @@
+<?php
+namespace Platformsh\Cli\Command\Activity;
+
+use Platformsh\Cli\Command\CommandBase;
+use Platformsh\Cli\Service\PropertyFormatter;
+use Platformsh\Cli\Service\Table;
+use Platformsh\Client\Model\Activity;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ActivityGetCommand extends CommandBase
+{
+    protected $hiddenInList = true;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('activity:get')
+            ->addArgument('id', InputArgument::OPTIONAL, 'The activity ID. 
Defaults to the most recent activity.')
+            ->addOption('type', null, InputOption::VALUE_REQUIRED, 'Filter 
recent activities by type')
+            ->addOption('all', 'a', InputOption::VALUE_NONE, 'Check recent 
activities on all environments')
+            ->addOption('property', 'P', InputOption::VALUE_REQUIRED, 'The 
property to view')
+            ->setDescription('View detailed information on a single activity');
+        $this->addProjectOption()
+            ->addEnvironmentOption();
+        Table::configureInput($this->getDefinition());
+        PropertyFormatter::configureInput($this->getDefinition());
+        $this->addExample('Find the time a project was created', '--all --type 
project.create -P completed_at');
+        $this->addExample('Find the duration (in seconds) of the last 
activity', '-P duration');
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->validateInput($input, $input->getOption('all'));
+
+        $id = $input->getArgument('id');
+        if ($id) {
+            $activity = $this->getSelectedProject()
+                ->getActivity($id);
+            if (!$activity) {
+                $this->stdErr->writeln("Activity not found: 
<error>$id</error>");
+
+                return 1;
+            }
+        } else {
+            if ($this->hasSelectedEnvironment() && !$input->getOption('all')) {
+                $activities = $this->getSelectedEnvironment()
+                    ->getActivities(1, $input->getOption('type'));
+            } else {
+                $activities = $this->getSelectedProject()
+                    ->getActivities(1, $input->getOption('type'));
+            }
+            /** @var Activity $activity */
+            $activity = reset($activities);
+            if (!$activity) {
+                $this->stdErr->writeln('No activities found');
+
+                return 1;
+            }
+        }
+
+        /** @var Table $table */
+        $table = $this->getService('table');
+        /** @var PropertyFormatter $formatter */
+        $formatter = $this->getService('property_formatter');
+
+        $properties = $activity->getProperties();
+
+        // Add the activity "description" as a property.
+        if (!isset($properties['description'])) {
+            $properties['description'] = $activity->getDescription();
+        }
+
+        // Calculate the duration of the activity.
+        if (!isset($properties['duration'])) {
+            $start = strtotime($activity->started_at);
+            $created = strtotime($activity->created_at);
+            $end = strtotime($activity->isComplete() ? $activity->completed_at 
: $activity->updated_at);
+            $start = $start === $end ? $created : $start;
+            $properties['duration'] = $end - $start > 0 ? $end - $start : null;
+        }
+
+        if ($property = $input->getOption('property')) {
+            $formatter->displayData($output, $properties, $property);
+            return 0;
+        }
+
+        unset($properties['payload'], $properties['log']);
+
+        $this->stdErr->writeln(
+            'These properties have been omitted for brevity: 
<comment>payload</comment> and <comment>log</comment>.'
+            . ' You can still view them with the -P (--property) option.',
+            OutputInterface::VERBOSITY_VERBOSE
+        );
+
+        $header = [];
+        $rows = [];
+        foreach ($properties as $property => $value) {
+            $header[] = $property;
+            $rows[] = $formatter->format($value, $property);
+        }
+
+        $table->renderSimple($rows, $header);
+
+        if (!$table->formatIsMachineReadable()) {
+            $executable = $this->config()->get('application.executable');
+            $this->stdErr->writeln('');
+            $this->stdErr->writeln(sprintf(
+                'To view the log for this activity, run: <info>%s activity:log 
%s</info>',
+                $executable,
+                $activity->id
+            ));
+            $this->stdErr->writeln(sprintf(
+                'To list activities, run: <info>%s activities</info>',
+                $executable
+            ));
+        }
+
+        return 0;
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Activity/ActivityListCommand.php 
new/platformsh-cli-3.28.0/src/Command/Activity/ActivityListCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Activity/ActivityListCommand.php      
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Activity/ActivityListCommand.php      
2018-01-30 17:56:41.000000000 +0100
@@ -4,6 +4,7 @@
 use Platformsh\Cli\Command\CommandBase;
 use Platformsh\Cli\Console\AdaptiveTableCell;
 use Platformsh\Cli\Service\ActivityMonitor;
+use Platformsh\Cli\Service\PropertyFormatter;
 use Platformsh\Cli\Service\Table;
 use Symfony\Component\Console\Helper\ProgressBar;
 use Symfony\Component\Console\Input\InputInterface;
@@ -27,6 +28,7 @@
             ->addOption('all', 'a', InputOption::VALUE_NONE, 'Check activities 
on all environments')
             ->setDescription('Get a list of activities for an environment or 
project');
         Table::configureInput($this->getDefinition());
+        PropertyFormatter::configureInput($this->getDefinition());
         $this->addProjectOption()
              ->addEnvironmentOption();
         $this->addExample('List recent activities for the current environment')
@@ -87,12 +89,14 @@
 
         /** @var \Platformsh\Cli\Service\Table $table */
         $table = $this->getService('table');
+        /** @var \Platformsh\Cli\Service\PropertyFormatter $formatter */
+        $formatter = $this->getService('property_formatter');
 
         $rows = [];
         foreach ($activities as $activity) {
             $row = [
                 new AdaptiveTableCell($activity->id, ['wrap' => false]),
-                date('Y-m-d H:i:s', strtotime($activity['created_at'])),
+                $formatter->format($activity['created_at'], 'created_at'),
                 $activity->getDescription(),
                 $activity->getCompletionPercent() . '%',
                 ActivityMonitor::formatState($activity->state),
@@ -131,13 +135,16 @@
         $table->render($rows, $headers);
 
         if (!$table->formatIsMachineReadable()) {
+            $executable = $this->config()->get('application.executable');
             $this->stdErr->writeln('');
-            $this->stdErr->writeln(
-                sprintf(
-                    'To view the log for an activity, run: <info>%s 
activity:log [id]</info>',
-                    $this->config()->get('application.executable')
-                )
-            );
+            $this->stdErr->writeln(sprintf(
+                'To view the log for an activity, run: <info>%s activity:log 
[id]</info>',
+                $executable
+            ));
+            $this->stdErr->writeln(sprintf(
+                'To view more information about an activity, run: <info>%s 
activity:get [id]</info>',
+                $executable
+            ));
         }
 
         return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Activity/ActivityLogCommand.php 
new/platformsh-cli-3.28.0/src/Command/Activity/ActivityLogCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Activity/ActivityLogCommand.php       
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Activity/ActivityLogCommand.php       
2018-01-30 17:56:41.000000000 +0100
@@ -2,6 +2,8 @@
 namespace Platformsh\Cli\Command\Activity;
 
 use Platformsh\Cli\Command\CommandBase;
+use Platformsh\Cli\Service\ActivityMonitor;
+use Platformsh\Cli\Service\PropertyFormatter;
 use Platformsh\Client\Model\Activity;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
@@ -25,9 +27,10 @@
                 'Log refresh interval (seconds). Set to 0 to disable 
refreshing.',
                 1
             )
-            ->addOption('type', null, InputOption::VALUE_REQUIRED, 'Filter 
activities by type')
-            ->addOption('all', 'a', InputOption::VALUE_NONE, 'Check activities 
on all environments')
+            ->addOption('type', null, InputOption::VALUE_REQUIRED, 'Filter 
recent activities by type')
+            ->addOption('all', 'a', InputOption::VALUE_NONE, 'Check recent 
activities on all environments')
             ->setDescription('Display the log for an activity');
+        PropertyFormatter::configureInput($this->getDefinition());
         $this->addProjectOption()
              ->addEnvironmentOption();
         $this->addExample('Display the log for the last push on the current 
environment', '--type environment.push')
@@ -36,7 +39,7 @@
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $this->validateInput($input, !$input->getOption('all'));
+        $this->validateInput($input, $input->getOption('all'));
 
         $id = $input->getArgument('id');
         if ($id) {
@@ -64,9 +67,16 @@
             }
         }
 
-        $this->stdErr->writeln(
-            "Log for activity <info>" . $activity->id . "</info> (" . 
$activity->getDescription() . "):\n"
-        );
+        /** @var \Platformsh\Cli\Service\PropertyFormatter $formatter */
+        $formatter = $this->getService('property_formatter');
+
+        $this->stdErr->writeln([
+            sprintf('<info>Activity ID: </info>%s', $activity->id),
+            sprintf('<info>Description: </info>%s', 
$activity->getDescription()),
+            sprintf('<info>Created: </info>%s', 
$formatter->format($activity->created_at, 'created_at')),
+            sprintf('<info>State: </info>%s', 
ActivityMonitor::formatState($activity->state)),
+            '<info>Log: </info>',
+        ]);
 
         $refresh = $input->getOption('refresh');
         if ($refresh > 0 && !$this->runningViaMulti && $output->isDecorated() 
&& !$activity->isComplete()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/src/Command/CommandBase.php 
new/platformsh-cli-3.28.0/src/Command/CommandBase.php
--- old/platformsh-cli-3.27.2/src/Command/CommandBase.php       2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/CommandBase.php       2018-01-30 
17:56:41.000000000 +0100
@@ -497,8 +497,11 @@
         $drush = $this->getService('drush');
         try {
             $drush->createAliases($event->getProject(), $projectRoot, 
$event->getEnvironments());
-        } catch (\RuntimeException $e) {
-            $this->stdErr->writeln('<comment>Failed to update Drush 
aliases:</comment> ' . $e->getMessage());
+        } catch (\Exception $e) {
+            $this->stdErr->writeln(sprintf(
+                "<comment>Failed to update Drush aliases:</comment>\n%s\n",
+                preg_replace('/^/m', '  ', trim($e->getMessage()))
+            ));
         }
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Db/DbSqlCommand.php 
new/platformsh-cli-3.28.0/src/Command/Db/DbSqlCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Db/DbSqlCommand.php   2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Db/DbSqlCommand.php   2018-01-30 
17:56:41.000000000 +0100
@@ -74,10 +74,10 @@
         $ssh = $this->getService('ssh');
 
         $sshOptions = [];
+        $sshCommand = $ssh->getSshCommand($sshOptions);
         if ($this->isTerminal(STDIN)) {
-            $sshOptions['RequestTty'] = 'yes';
+            $sshCommand .= ' -t';
         }
-        $sshCommand = $ssh->getSshCommand($sshOptions);
         $sshCommand .= ' ' . escapeshellarg($sshUrl)
             . ' ' . escapeshellarg($sqlCommand);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Environment/EnvironmentSshCommand.php 
new/platformsh-cli-3.28.0/src/Command/Environment/EnvironmentSshCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Environment/EnvironmentSshCommand.php 
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Environment/EnvironmentSshCommand.php 
2018-01-30 17:56:41.000000000 +0100
@@ -58,10 +58,10 @@
         /** @var \Platformsh\Cli\Service\Ssh $ssh */
         $ssh = $this->getService('ssh');
         $sshOptions = [];
+        $command = $ssh->getSshCommand($sshOptions);
         if ($this->isTerminal(STDIN)) {
-            $sshOptions['RequestTty'] = 'yes';
+            $command .= ' -t';
         }
-        $command = $ssh->getSshCommand($sshOptions);
         $command .= ' ' . escapeshellarg($sshUrl);
         if ($remoteCommand) {
             $command .= ' ' . escapeshellarg($remoteCommand);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Service/RedisCliCommand.php 
new/platformsh-cli-3.28.0/src/Command/Service/RedisCliCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Service/RedisCliCommand.php   
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Service/RedisCliCommand.php   
2018-01-30 17:56:41.000000000 +0100
@@ -60,10 +60,10 @@
         $ssh = $this->getService('ssh');
 
         $sshOptions = [];
+        $sshCommand = $ssh->getSshCommand($sshOptions);
         if ($this->isTerminal(STDIN)) {
-            $sshOptions['RequestTty'] = 'yes';
+            $sshCommand .= ' -t';
         }
-        $sshCommand = $ssh->getSshCommand($sshOptions);
         $sshCommand .= ' ' . escapeshellarg($sshUrl)
             . ' ' . escapeshellarg($redisCommand);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Snapshot/SnapshotListCommand.php 
new/platformsh-cli-3.28.0/src/Command/Snapshot/SnapshotListCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Snapshot/SnapshotListCommand.php      
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Snapshot/SnapshotListCommand.php      
2018-01-30 17:56:41.000000000 +0100
@@ -4,6 +4,7 @@
 use Platformsh\Cli\Command\CommandBase;
 use Platformsh\Cli\Console\AdaptiveTableCell;
 use Platformsh\Cli\Service\ActivityMonitor;
+use Platformsh\Cli\Service\PropertyFormatter;
 use Platformsh\Cli\Service\Table;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -21,6 +22,7 @@
             ->addOption('limit', null, InputOption::VALUE_REQUIRED, 'Limit the 
number of snapshots to list', 10)
             ->addOption('start', null, InputOption::VALUE_REQUIRED, 'Only 
snapshots created before this date will be listed');
         Table::configureInput($this->getDefinition());
+        PropertyFormatter::configureInput($this->getDefinition());
         $this->addProjectOption()
              ->addEnvironmentOption();
         $this->addExample('List the most recent snapshots')
@@ -41,6 +43,8 @@
 
         /** @var \Platformsh\Cli\Service\Table $table */
         $table = $this->getService('table');
+        /** @var \Platformsh\Cli\Service\PropertyFormatter $formatter */
+        $formatter = $this->getService('property_formatter');
 
         if (!$table->formatIsMachineReadable()) {
             $this->stdErr->writeln("Finding snapshots for the environment 
<info>{$environment->id}</info>");
@@ -57,7 +61,7 @@
         foreach ($activities as $activity) {
             $snapshot_name = !empty($activity->payload['backup_name']) ? 
$activity->payload['backup_name'] : 'N/A';
             $rows[] = [
-                date('Y-m-d H:i:s', strtotime($activity->created_at)),
+                $formatter->format($activity->created_at, 'created_at'),
                 new AdaptiveTableCell($snapshot_name, ['wrap' => false]),
                 $activity->getCompletionPercent() . '%',
                 ActivityMonitor::formatState($activity->state),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Command/Snapshot/SnapshotRestoreCommand.php 
new/platformsh-cli-3.28.0/src/Command/Snapshot/SnapshotRestoreCommand.php
--- old/platformsh-cli-3.27.2/src/Command/Snapshot/SnapshotRestoreCommand.php   
2018-01-23 19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Command/Snapshot/SnapshotRestoreCommand.php   
2018-01-30 17:56:41.000000000 +0100
@@ -75,7 +75,7 @@
         /** @var \Platformsh\Cli\Service\QuestionHelper $questionHelper */
         $questionHelper = $this->getService('question_helper');
         $name = $selectedActivity['payload']['backup_name'];
-        $date = date('Y-m-d H:i', strtotime($selectedActivity['created_at']));
+        $date = date('c', strtotime($selectedActivity['created_at']));
         if (!$questionHelper->confirm(
             "Are you sure you want to restore the snapshot 
<comment>$name</comment> from <comment>$date</comment>?"
         )) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/src/Service/PropertyFormatter.php 
new/platformsh-cli-3.28.0/src/Service/PropertyFormatter.php
--- old/platformsh-cli-3.27.2/src/Service/PropertyFormatter.php 2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Service/PropertyFormatter.php 2018-01-30 
17:56:41.000000000 +0100
@@ -39,6 +39,8 @@
             case 'created_at':
             case 'updated_at':
             case 'expires_at':
+            case 'started_at':
+            case 'completed_at':
             case 'ssl.expires_on':
                 return $this->formatDate($value);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/src/SiteAlias/DrushAlias.php 
new/platformsh-cli-3.28.0/src/SiteAlias/DrushAlias.php
--- old/platformsh-cli-3.27.2/src/SiteAlias/DrushAlias.php      2018-01-23 
19:08:21.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/SiteAlias/DrushAlias.php      2018-01-30 
17:56:41.000000000 +0100
@@ -138,13 +138,15 @@
      * @param string|null $previousGroup
      *
      * @return array
+     *   The aliases, with their group prefixes removed.
      */
     protected function getExistingAliases($currentGroup, $previousGroup = null)
     {
         $aliases = [];
         foreach (array_filter([$currentGroup, $previousGroup]) as $groupName) {
-            foreach ($this->drush->getAliases($groupName) as $aliasName => 
$alias) {
-                $aliases[str_replace($groupName . '.', '', $aliasName)] = 
$alias;
+            $prefix = '@' . $groupName . '.';
+            foreach ($this->drush->getAliases($groupName) as $prefixedName => 
$alias) {
+                $aliases[str_replace($prefix, '', $prefixedName)] = $alias;
             }
         }
 
@@ -154,7 +156,7 @@
     /**
      * Generate new aliases.
      *
-     * @param array $apps
+     * @param LocalApplication[] $apps
      * @param array $environments
      *
      * @return array
@@ -225,7 +227,7 @@
      *
      * @return array|false
      */
-    protected function generateRemoteAlias($environment, $app)
+    protected function generateRemoteAlias(Environment $environment, 
LocalApplication $app)
     {
         if (!$environment->hasLink('ssh')) {
             return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.27.2/src/Util/TimezoneUtil.php 
new/platformsh-cli-3.28.0/src/Util/TimezoneUtil.php
--- old/platformsh-cli-3.27.2/src/Util/TimezoneUtil.php 1970-01-01 
01:00:00.000000000 +0100
+++ new/platformsh-cli-3.28.0/src/Util/TimezoneUtil.php 2018-01-30 
17:56:41.000000000 +0100
@@ -0,0 +1,84 @@
+<?php
+
+namespace Platformsh\Cli\Util;
+
+class TimezoneUtil
+{
+    /**
+     * Get the timezone intended by the user.
+     *
+     * The timezone is detected with the following priorities:
+     *
+     * 1. A value previously set via date_default_timezone_set(), which can
+     *    only be known if it is not the default, UTC.
+     * 2. The value of the ini setting 'date.timezone'.
+     * 3. The value of the TZ environment variable, if set.
+     * 4. A best guess at the system timezone: see 
self::detectSystemTimezone().
+     * 5. Default to the value of date_default_timezone_get(), which at this
+     *    stage will almost definitely be UTC.
+     *
+     * @return string
+     */
+    public static function getTimezone()
+    {
+        $currentTz = date_default_timezone_get();
+        if ($currentTz !== 'UTC') {
+            return $currentTz;
+        }
+
+        if (ini_get('date.timezone')) {
+            return ini_get('date.timezone');
+        }
+
+        if (getenv('TZ')) {
+            return (string) getenv('TZ');
+        }
+
+        if ($systemTz = self::detectSystemTimezone()) {
+            return $systemTz;
+        }
+
+        return $currentTz;
+    }
+
+    /**
+     * Detect the system timezone, restoring functionality from PHP < 5.4.
+     *
+     * @return string|false
+     */
+    private static function detectSystemTimezone()
+    {
+        // Mac OS X (and older Linuxes): /etc/localtime is a symlink to the
+        // timezone in /usr/share/zoneinfo or /var/db/timezone/zoneinfo.
+        if (is_link('/etc/localtime')) {
+            $filename = readlink('/etc/localtime');
+            $prefixes = [
+                '/usr/share/zoneinfo/',
+                '/var/db/timezone/zoneinfo/',
+            ];
+            foreach ($prefixes as $prefix) {
+                if (strpos($filename, $prefix) === 0) {
+                    return substr($filename, strlen($prefix));
+                }
+            }
+        }
+
+        // Ubuntu and Debian.
+        if (file_exists('/etc/timezone')) {
+            $data = file_get_contents('/etc/timezone');
+            if ($data !== false) {
+                return trim($data);
+            }
+        }
+
+        // RHEL and CentOS.
+        if (file_exists('/etc/sysconfig/clock')) {
+            $data = parse_ini_file('/etc/sysconfig/clock');
+            if (!empty($data['ZONE'])) {
+                return trim($data['ZONE']);
+            }
+        }
+
+        return false;
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.27.2/tests/Util/TimezoneUtilTest.php 
new/platformsh-cli-3.28.0/tests/Util/TimezoneUtilTest.php
--- old/platformsh-cli-3.27.2/tests/Util/TimezoneUtilTest.php   1970-01-01 
01:00:00.000000000 +0100
+++ new/platformsh-cli-3.28.0/tests/Util/TimezoneUtilTest.php   2018-01-30 
17:56:41.000000000 +0100
@@ -0,0 +1,59 @@
+<?php
+
+namespace Platformsh\Cli\Tests\Util;
+
+use Platformsh\Cli\Util\TimezoneUtil;
+
+class TimezoneUtilTest extends \PHPUnit_Framework_TestCase
+{
+    private $originalSetting;
+    private $originalIni;
+    private $originalEnv;
+
+    public function setUp()
+    {
+        // Reset to PHP defaults.
+        $this->originalIni = ini_get('date.timezone');
+        $this->originalSetting = date_default_timezone_get();
+        $this->originalEnv = getenv('TZ');
+        ini_set('date.timezone', 'UTC');
+        date_default_timezone_set('UTC');
+        putenv('TZ=');
+    }
+
+    public function tearDown()
+    {
+        // Reset to original settings.
+        ini_set('date.timezone', $this->originalIni);
+        date_default_timezone_set($this->originalSetting);
+        if ($this->originalEnv !== false) {
+            putenv('TZ=' . $this->originalEnv);
+        }
+    }
+
+    public function testGetTimezoneReturnsIni()
+    {
+        // Pick a rare timezone.
+        ini_set('date.timezone', 'Pacific/Galapagos');
+        $this->assertEquals('Pacific/Galapagos', TimezoneUtil::getTimezone());
+    }
+
+    public function testGetTimezoneReturnsCurrent()
+    {
+        ini_set('date.timezone', 'Antarctica/McMurdo');
+        date_default_timezone_set('Antarctica/Troll');
+        $this->assertEquals('Antarctica/Troll', TimezoneUtil::getTimezone());
+    }
+
+    public function testGetTimezoneReturnsEnvVar()
+    {
+        @ini_set('date.timezone', '');
+        putenv('TZ=Arctic/Longyearbyen');
+        $this->assertEquals('Arctic/Longyearbyen', 
TimezoneUtil::getTimezone());
+    }
+
+    public function testGetTimezoneReturnsSomething()
+    {
+        $this->assertNotEmpty(TimezoneUtil::getTimezone());
+    }
+}

++++++ platformsh-cli-vendor.tar.xz ++++++
++++ 4191 lines of diff (skipped)


Reply via email to