Hello community,

here is the log from the commit of package platformsh-cli for openSUSE:Factory 
checked in at 2020-07-24 09:58:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/platformsh-cli (Old)
 and      /work/SRC/openSUSE:Factory/.platformsh-cli.new.3592 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "platformsh-cli"

Fri Jul 24 09:58:16 2020 rev:102 rq:822144 version:3.59.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/platformsh-cli/platformsh-cli.changes    
2020-06-23 21:06:25.662197586 +0200
+++ /work/SRC/openSUSE:Factory/.platformsh-cli.new.3592/platformsh-cli.changes  
2020-07-24 09:59:45.685632153 +0200
@@ -1,0 +2,28 @@
+Tue Jul 21 19:13:36 UTC 2020 - [email protected]
+
+- Update to version 3.59.1:
+  * Release v3.59.1
+  * Fix error (undefined index) when selecting some projects
+  * Remove GH issue number from manifest.json
+  * Release v3.59.0
+  * Revert "Installer: remove unnecessary mbstring check"
+  * Clarify API token login vs environment variables in README
+  * Support new user invitations
+  * Clean up temporary file in self:build command
+  * Remove some unused variables/code
+  * Avoid hardcoding the token URL in the auth:api-token-login command
+  * Installer: Create a .zshrc file if it doesn't already exist, on ZSH (#956)
+  * Release v3.58.0
+  * Support prompting for re-authentication in the login command
+  * Add results per page (--count/-c option) to the self:stats command
+  * Fix method name in sorting regions
+  * Sort regions by domain independently of suffix
+  * Move SSH hostname to the session-specific configuration
+  * Decrease condescension level
+  * Sort regions
+  * Release v3.57.6
+  * Update dependencies (symfony 3.4.37 -> 3.4.42)
+  * Remove session:switch command suggestion when not relevant in the login 
command
+  * Login help clarifications
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ platformsh-cli.spec ++++++
--- /var/tmp/diff_new_pack.orwszJ/_old  2020-07-24 09:59:47.669634001 +0200
+++ /var/tmp/diff_new_pack.orwszJ/_new  2020-07-24 09:59:47.673634004 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           platformsh-cli
-Version:        3.57.5
+Version:        3.59.1
 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.orwszJ/_old  2020-07-24 09:59:47.701634030 +0200
+++ /var/tmp/diff_new_pack.orwszJ/_new  2020-07-24 09:59:47.701634030 +0200
@@ -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.57.5</param>
+    <param name="revision">refs/tags/v3.59.1</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.orwszJ/_old  2020-07-24 09:59:47.721634048 +0200
+++ /var/tmp/diff_new_pack.orwszJ/_new  2020-07-24 09:59:47.721634048 +0200
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param name="url">git://github.com/platformsh/platformsh-cli.git</param>
-    <param 
name="changesrevision">8552ed3f17f28ef6504c599d4df707e7d294044e</param>
+    <param 
name="changesrevision">3854cfd67303add357cece3c5f330ac9e443bf33</param>
   </service>
 </servicedata>

++++++ licenses.txt ++++++
--- /var/tmp/diff_new_pack.orwszJ/_old  2020-07-24 09:59:47.757634082 +0200
+++ /var/tmp/diff_new_pack.orwszJ/_new  2020-07-24 09:59:47.757634082 +0200
@@ -5,7 +5,7 @@
 
 Name                                Version  License       
 cocur/slugify                       v2.5     MIT           
-composer/ca-bundle                  1.2.6    MIT           
+composer/ca-bundle                  1.2.7    MIT           
 doctrine/cache                      v1.6.2   MIT           
 firebase/php-jwt                    v2.2.0   BSD-3-Clause  
 guzzlehttp/cache-subscriber         0.2.0    MIT           
@@ -16,20 +16,20 @@
 padraic/phar-updater                v1.0.6   BSD-3-Clause  
 paragonie/random_compat             v2.0.18  MIT           
 pjcdawkins/guzzle-oauth2-plugin     v2.3.1   MIT           
-platformsh/client                   v0.33.0  MIT           
+platformsh/client                   v0.35.2  MIT           
 platformsh/console-form             v0.0.24  MIT           
 psr/container                       1.0.0    MIT           
-psr/log                             1.1.2    MIT           
-react/promise                       v2.7.1   MIT           
+psr/log                             1.1.3    MIT           
+react/promise                       v2.8.0   MIT           
 stecman/symfony-console-completion  0.10.1   MIT           
-symfony/config                      v3.4.37  MIT           
-symfony/console                     v3.4.37  MIT           
-symfony/debug                       v3.4.37  MIT           
-symfony/dependency-injection        v3.4.37  MIT           
-symfony/event-dispatcher            v3.4.37  MIT           
-symfony/filesystem                  v3.4.37  MIT           
-symfony/finder                      v3.4.37  MIT           
-symfony/polyfill-ctype              v1.13.1  MIT           
-symfony/polyfill-mbstring           v1.13.1  MIT           
-symfony/process                     v3.4.37  MIT           
-symfony/yaml                        v3.4.37  MIT           
+symfony/config                      v3.4.42  MIT           
+symfony/console                     v3.4.42  MIT           
+symfony/debug                       v3.4.42  MIT           
+symfony/dependency-injection        v3.4.42  MIT           
+symfony/event-dispatcher            v3.4.42  MIT           
+symfony/filesystem                  v3.4.42  MIT           
+symfony/finder                      v3.4.42  MIT           
+symfony/polyfill-ctype              v1.17.1  MIT           
+symfony/polyfill-mbstring           v1.17.1  MIT           
+symfony/process                     v3.4.42  MIT           
+symfony/yaml                        v3.4.42  MIT           

++++++ platformsh-cli-3.57.5.tar.xz -> platformsh-cli-3.59.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/README.md 
new/platformsh-cli-3.59.1/README.md
--- old/platformsh-cli-3.57.5/README.md 2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/README.md 2020-07-21 15:02:11.000000000 +0200
@@ -18,7 +18,7 @@
 
 ## Installation
 
-Simply use this command:
+Run this command to install the CLI:
 
     curl -sS https://platform.sh/cli/installer | php
 
@@ -54,18 +54,15 @@
 
 There are two ways to authenticate:
 
-1. `platform login` (AKA `platform auth:browser-login`): this opens a temporary
-  local server and a browser, allowing you to log in to Platform.sh via the
-  normal login form, including via third-party providers like Bitbucket, GitHub
-  and Google.
-
-2. [API tokens](https://docs.platform.sh/gettingstarted/cli/api-tokens.html):
-  these allow non-interactive authentication. To use an API token, you can run
-  the `platform auth:api-token-login` command. Alternatively you can supply the
-  API token in an environment variable named `PLATFORMSH_CLI_TOKEN`.
+1. The recommended way is `platform login`, which lets you log in via a web 
browser, including via third-party providers such as Google, GitHub and 
Bitbucket.
 
-  *_Warning_*: An API token can act as the account that created it, with no
-  restrictions. Use a separate machine account to limit the token's access.
+2. If using a browser is not possible, use an [API 
token](https://docs.platform.sh/gettingstarted/cli/api-tokens.html).
+
+    An interactive command is available for this: `platform 
auth:api-token-login`
+
+    For non-interactive uses such as scripts or CI systems, set the API token 
in an environment variable named `PLATFORMSH_CLI_TOKEN`. This can be insecure 
if not handled properly, although it is appropriate for systems such as 
CircleCI, Jenkins and GitLab.
+
+    *_Warning_*: An API token can act as the account that created it, with no 
restrictions. Use a separate machine account to limit the token's access.
 
 ### Commands
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/composer.json 
new/platformsh-cli-3.59.1/composer.json
--- old/platformsh-cli-3.57.5/composer.json     2020-06-22 08:30:26.000000000 
+0200
+++ new/platformsh-cli-3.59.1/composer.json     2020-07-21 15:02:11.000000000 
+0200
@@ -8,7 +8,7 @@
         "guzzlehttp/guzzle": "^5.3",
         "guzzlehttp/ringphp": "^1.1",
         "platformsh/console-form": ">=0.0.24 <2.0",
-        "platformsh/client": ">=0.33.0 <2.0",
+        "platformsh/client": ">=0.35.2 <2.0",
         "symfony/console": "^3.0 >=3.2",
         "symfony/yaml": "^3.0 || ^2.6",
         "symfony/finder": "^3.0",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/composer.lock 
new/platformsh-cli-3.59.1/composer.lock
--- old/platformsh-cli-3.57.5/composer.lock     2020-06-22 08:30:26.000000000 
+0200
+++ new/platformsh-cli-3.59.1/composer.lock     2020-07-21 15:02:11.000000000 
+0200
@@ -4,7 +4,7 @@
         "Read more about it at 
https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies";,
         "This file is @generated automatically"
     ],
-    "content-hash": "b5d3ce4e6a73d8adc7bf5699e8f3e7f2",
+    "content-hash": "34395bedceaf33b0af253532c389a178",
     "packages": [
         {
             "name": "cocur/slugify",
@@ -72,16 +72,16 @@
         },
         {
             "name": "composer/ca-bundle",
-            "version": "1.2.6",
+            "version": "1.2.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/ca-bundle.git";,
-                "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e"
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/composer/ca-bundle/zipball/47fe531de31fca4a1b997f87308e7d7804348f7e";,
-                "reference": "47fe531de31fca4a1b997f87308e7d7804348f7e",
+                "url": 
"https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd";,
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
                 "shasum": ""
             },
             "require": {
@@ -124,7 +124,7 @@
                 "ssl",
                 "tls"
             ],
-            "time": "2020-01-13T10:02:55+00:00"
+            "time": "2020-04-08T08:27:21+00:00"
         },
         {
             "name": "doctrine/cache",
@@ -665,16 +665,16 @@
         },
         {
             "name": "platformsh/client",
-            "version": "v0.33.0",
+            "version": "v0.35.2",
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/platformsh/platformsh-client-php.git";,
-                "reference": "0b5efe375fcb1f5c23491b07b879dbab507109d9"
+                "reference": "ce7f949dc6788ee90b8172d991845a5a66788531"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/platformsh/platformsh-client-php/zipball/0b5efe375fcb1f5c23491b07b879dbab507109d9";,
-                "reference": "0b5efe375fcb1f5c23491b07b879dbab507109d9",
+                "url": 
"https://api.github.com/repos/platformsh/platformsh-client-php/zipball/ce7f949dc6788ee90b8172d991845a5a66788531";,
+                "reference": "ce7f949dc6788ee90b8172d991845a5a66788531",
                 "shasum": ""
             },
             "require": {
@@ -704,7 +704,7 @@
                 }
             ],
             "description": "Platform.sh API client",
-            "time": "2020-05-27T21:11:24+00:00"
+            "time": "2020-07-21T07:54:05+00:00"
         },
         {
             "name": "platformsh/console-form",
@@ -796,16 +796,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.2",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git";,
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801";,
-                "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
+                "url": 
"https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc";,
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -839,27 +839,27 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2019-11-01T11:05:21+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "react/promise",
-            "version": "v2.7.1",
+            "version": "v2.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/reactphp/promise.git";,
-                "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d"
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d";,
-                "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d",
+                "url": 
"https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4";,
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.8"
+                "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
             },
             "type": "library",
             "autoload": {
@@ -885,7 +885,7 @@
                 "promise",
                 "promises"
             ],
-            "time": "2019-01-07T21:25:54+00:00"
+            "time": "2020-05-12T15:16:56+00:00"
         },
         {
             "name": "stecman/symfony-console-completion",
@@ -934,16 +934,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git";,
-                "reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace"
+                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/config/zipball/6abc18b2a97f63508d23929bbb2ae65aaa07bace";,
-                "reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace",
+                "url": 
"https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab";,
+                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
                 "shasum": ""
             },
             "require": {
@@ -994,20 +994,20 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-04T12:05:51+00:00"
+            "time": "2020-05-22T10:56:48+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git";,
-                "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12"
+                "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/console/zipball/7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12";,
-                "reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12",
+                "url": 
"https://api.github.com/repos/symfony/console/zipball/bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13";,
+                "reference": "bfe29ead7e7b1cc9ce74c6a40d06ad1f96fced13",
                 "shasum": ""
             },
             "require": {
@@ -1066,20 +1066,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-10T07:52:48+00:00"
+            "time": "2020-05-30T18:58:05+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git";,
-                "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8"
+                "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/debug/zipball/70dd18e93bb8bdf3c4db7fde832619fef9828cf8";,
-                "reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8",
+                "url": 
"https://api.github.com/repos/symfony/debug/zipball/518c6a00d0872da30bd06aee3ea59a0a5cf54d6d";,
+                "reference": "518c6a00d0872da30bd06aee3ea59a0a5cf54d6d",
                 "shasum": ""
             },
             "require": {
@@ -1122,20 +1122,20 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-08T16:36:15+00:00"
+            "time": "2020-05-22T18:25:20+00:00"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git";,
-                "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc"
+                "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/dependency-injection/zipball/22000f10c9e1cfef051e8b4de46815b41a0223fc";,
-                "reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc",
+                "url": 
"https://api.github.com/repos/symfony/dependency-injection/zipball/e39380b7104b0ec538a075ae919f00c7e5267bac";,
+                "reference": "e39380b7104b0ec538a075ae919f00c7e5267bac",
                 "shasum": ""
             },
             "require": {
@@ -1193,20 +1193,20 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-08T11:20:51+00:00"
+            "time": "2020-05-30T21:06:01+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git";,
-                "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8"
+                "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/event-dispatcher/zipball/79ede8f2836e5ec910ebb325bde40f987244baa8";,
-                "reference": "79ede8f2836e5ec910ebb325bde40f987244baa8",
+                "url": 
"https://api.github.com/repos/symfony/event-dispatcher/zipball/14d978f8e8555f2de719c00eb65376be7d2e9081";,
+                "reference": "14d978f8e8555f2de719c00eb65376be7d2e9081",
                 "shasum": ""
             },
             "require": {
@@ -1256,20 +1256,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-04T12:05:51+00:00"
+            "time": "2020-05-05T15:06:23+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git";,
-                "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628"
+                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/filesystem/zipball/0a0d3b4bda11aa3a0464531c40e681e184e75628";,
-                "reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628",
+                "url": 
"https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10";,
+                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
                 "shasum": ""
             },
             "require": {
@@ -1306,20 +1306,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-17T08:50:08+00:00"
+            "time": "2020-05-30T17:48:24+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git";,
-                "reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f"
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/finder/zipball/a90a9d3b9f458a5cdeabfa4090b20c000ca3962f";,
-                "reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f",
+                "url": 
"https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200";,
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200",
                 "shasum": ""
             },
             "require": {
@@ -1355,20 +1355,20 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-01T11:03:25+00:00"
+            "time": "2020-02-14T07:34:21+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.13.1",
+            "version": "v1.17.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git";,
-                "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
+                "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3";,
-                "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
+                "url": 
"https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d";,
+                "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d",
                 "shasum": ""
             },
             "require": {
@@ -1380,7 +1380,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.13-dev"
+                    "dev-master": "1.17-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill";
                 }
             },
             "autoload": {
@@ -1413,20 +1417,20 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2019-11-27T13:56:44+00:00"
+            "time": "2020-06-06T08:46:27+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.13.1",
+            "version": "v1.17.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git";,
-                "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
+                "reference": "7110338d81ce1cbc3e273136e4574663627037a7"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f";,
-                "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
+                "url": 
"https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7";,
+                "reference": "7110338d81ce1cbc3e273136e4574663627037a7",
                 "shasum": ""
             },
             "require": {
@@ -1438,7 +1442,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.13-dev"
+                    "dev-master": "1.17-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill";
                 }
             },
             "autoload": {
@@ -1472,20 +1480,20 @@
                 "portable",
                 "shim"
             ],
-            "time": "2019-11-27T14:18:11+00:00"
+            "time": "2020-06-06T08:46:27+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git";,
-                "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a"
+                "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/process/zipball/5b9d2bcffe4678911a4c941c00b7c161252cf09a";,
-                "reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a",
+                "url": 
"https://api.github.com/repos/symfony/process/zipball/8a895f0c92a7c4b10db95139bcff71bdf66d4d21";,
+                "reference": "8a895f0c92a7c4b10db95139bcff71bdf66d4d21",
                 "shasum": ""
             },
             "require": {
@@ -1521,20 +1529,20 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-01T11:03:25+00:00"
+            "time": "2020-05-23T17:05:51+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git";,
-                "reference": "aa46bc2233097d5212332c907f9911533acfbf80"
+                "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/yaml/zipball/aa46bc2233097d5212332c907f9911533acfbf80";,
-                "reference": "aa46bc2233097d5212332c907f9911533acfbf80",
+                "url": 
"https://api.github.com/repos/symfony/yaml/zipball/7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb";,
+                "reference": "7233ac2bfdde24d672f5305f2b3f6b5d741ef8eb",
                 "shasum": ""
             },
             "require": {
@@ -1580,37 +1588,35 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com";,
-            "time": "2020-01-13T08:00:59+00:00"
+            "time": "2020-05-11T07:51:54+00:00"
         }
     ],
     "packages-dev": [
         {
             "name": "bamarni/composer-bin-plugin",
-            "version": "v1.3.0",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bamarni/composer-bin-plugin.git";,
-                "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24"
+                "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/67f9d314dc7ecf7245b8637906e151ccc62b8d24";,
-                "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24",
+                "url": 
"https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/9329fb0fbe29e0e1b2db8f4639a193e4f5406225";,
+                "reference": "9329fb0fbe29e0e1b2db8f4639a193e4f5406225",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0"
+                "composer-plugin-api": "^1.0 || ^2.0",
+                "php": "^5.5.9 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "composer/composer": "dev-master",
+                "composer/composer": "^1.0 || ^2.0",
                 "symfony/console": "^2.5 || ^3.0 || ^4.0"
             },
             "type": "composer-plugin",
             "extra": {
-                "class": "Bamarni\\Composer\\Bin\\Plugin",
-                "branch-alias": {
-                    "dev-master": "1.1-dev"
-                }
+                "class": "Bamarni\\Composer\\Bin\\Plugin"
             },
             "autoload": {
                 "psr-4": {
@@ -1621,7 +1627,16 @@
             "license": [
                 "MIT"
             ],
-            "time": "2019-03-17T12:38:04+00:00"
+            "description": "No conflicts for your bin dependencies",
+            "keywords": [
+                "composer",
+                "conflict",
+                "dependency",
+                "executable",
+                "isolation",
+                "tool"
+            ],
+            "time": "2020-05-03T08:27:20+00:00"
         },
         {
             "name": "consolidation/annotated-command",
@@ -1968,16 +1983,16 @@
         },
         {
             "name": "drush/drush",
-            "version": "8.3.2",
+            "version": "8.3.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drush-ops/drush.git";,
-                "reference": "60306a27347f6c69517dc2d91bb2fd5d1a41abec"
+                "reference": "24e317b182155c9cd551e772b45ebce1fe7a2b17"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/drush-ops/drush/zipball/60306a27347f6c69517dc2d91bb2fd5d1a41abec";,
-                "reference": "60306a27347f6c69517dc2d91bb2fd5d1a41abec",
+                "url": 
"https://api.github.com/repos/drush-ops/drush/zipball/24e317b182155c9cd551e772b45ebce1fe7a2b17";,
+                "reference": "24e317b182155c9cd551e772b45ebce1fe7a2b17",
                 "shasum": ""
             },
             "require": {
@@ -1987,11 +2002,12 @@
                 "php": ">=5.4.5",
                 "psr/log": "~1.0",
                 "psy/psysh": "~0.6",
-                "symfony/console": "~2.7|^3",
-                "symfony/event-dispatcher": "~2.7|^3",
-                "symfony/finder": "~2.7|^3",
-                "symfony/var-dumper": "~2.7|^3",
-                "symfony/yaml": "~2.3|^3",
+                "symfony/console": "~2.7|^3|^4.4",
+                "symfony/event-dispatcher": "~2.7|^3|^4.4",
+                "symfony/finder": "~2.7|^3|^4.4",
+                "symfony/process": "~2.7|^3|^4.4",
+                "symfony/var-dumper": "~2.7|^3|^4.4|^5",
+                "symfony/yaml": "~2.3|^3|^4.4",
                 "webflo/drupal-finder": "^1.1.0",
                 "webmozart/path-util": "~2"
             },
@@ -2077,97 +2093,7 @@
             ],
             "description": "Drush is a command line shell and scripting 
interface for Drupal, a veritable Swiss Army knife designed to make life easier 
for those of us who spend some of our working hours hacking away at the command 
prompt.",
             "homepage": "http://www.drush.org";,
-            "time": "2019-11-26T22:34:50+00:00"
-        },
-        {
-            "name": "jakub-onderka/php-console-color",
-            "version": "v0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/JakubOnderka/PHP-Console-Color.git";,
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
-            },
-            "dist": {
-                "type": "zip",
-                "url": 
"https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191";,
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "1.0",
-                "jakub-onderka/php-parallel-lint": "1.0",
-                "jakub-onderka/php-var-dump-check": "0.*",
-                "phpunit/phpunit": "~4.3",
-                "squizlabs/php_codesniffer": "1.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleColor\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/";,
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "[email protected]"
-                }
-            ],
-            "abandoned": "php-parallel-lint/php-console-color",
-            "time": "2018-09-29T17:23:10+00:00"
-        },
-        {
-            "name": "jakub-onderka/php-console-highlighter",
-            "version": "v0.4",
-            "source": {
-                "type": "git",
-                "url": 
"https://github.com/JakubOnderka/PHP-Console-Highlighter.git";,
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
-            },
-            "dist": {
-                "type": "zip",
-                "url": 
"https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547";,
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "jakub-onderka/php-console-color": "~0.2",
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "~1.0",
-                "jakub-onderka/php-parallel-lint": "~1.0",
-                "jakub-onderka/php-var-dump-check": "~0.1",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~1.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/";,
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "[email protected]",
-                    "homepage": "http://www.acci.cz/";
-                }
-            ],
-            "description": "Highlight PHP code in terminal",
-            "abandoned": "php-parallel-lint/php-console-highlighter",
-            "time": "2018-09-29T18:48:56+00:00"
+            "time": "2020-05-30T01:54:49+00:00"
         },
         {
             "name": "nikic/php-parser",
@@ -2423,16 +2349,16 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "v1.10.2",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git";,
-                "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9";,
-                "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
+                "url": 
"https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093";,
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
@@ -2482,7 +2408,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2020-01-20T15:57:02+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -2863,32 +2789,30 @@
         },
         {
             "name": "psy/psysh",
-            "version": "v0.9.12",
+            "version": "v0.10.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git";,
-                "reference": "90da7f37568aee36b116a030c5f99c915267edd4"
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4";,
-                "reference": "90da7f37568aee36b116a030c5f99c915267edd4",
+                "url": 
"https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560";,
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
                 "shasum": ""
             },
             "require": {
                 "dnoegel/php-xdg-base-dir": "0.1.*",
                 "ext-json": "*",
                 "ext-tokenizer": "*",
-                "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
-                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-                "php": ">=5.4.0",
-                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0",
-                "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0"
+                "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+                "php": "^8.0 || ^7.0 || ^5.5.9",
+                "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+                "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.2",
-                "hoa/console": "~2.15|~3.16",
-                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+                "hoa/console": "3.17.*"
             },
             "suggest": {
                 "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot 
happier :)",
@@ -2903,7 +2827,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-develop": "0.9.x-dev"
+                    "dev-master": "0.10.x-dev"
                 }
             },
             "autoload": {
@@ -2933,7 +2857,7 @@
                 "interactive",
                 "shell"
             ],
-            "time": "2019-12-06T14:19:43+00:00"
+            "time": "2020-05-03T19:32:03+00:00"
         },
         {
             "name": "sebastian/comparator",
@@ -3309,16 +3233,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.37",
+            "version": "v3.4.42",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git";,
-                "reference": "51ecb139114c38080801145a212f10210ea99ea3"
+                "reference": "7a947d1b5e81583759a3a927f1761b95bddc5f1b"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/symfony/var-dumper/zipball/51ecb139114c38080801145a212f10210ea99ea3";,
-                "reference": "51ecb139114c38080801145a212f10210ea99ea3",
+                "url": 
"https://api.github.com/repos/symfony/var-dumper/zipball/7a947d1b5e81583759a3a927f1761b95bddc5f1b";,
+                "reference": "7a947d1b5e81583759a3a927f1761b95bddc5f1b",
                 "shasum": ""
             },
             "require": {
@@ -3374,7 +3298,7 @@
                 "debug",
                 "dump"
             ],
-            "time": "2020-01-01T11:03:25+00:00"
+            "time": "2020-05-23T12:00:17+00:00"
         },
         {
             "name": "webflo/drupal-finder",
@@ -3418,16 +3342,16 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.6.0",
+            "version": "1.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git";,
-                "reference": "573381c0a64f155a0d9a23f4b0c797194805b925"
+                "reference": "9dc4f203e36f2b486149058bade43c851dd97451"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925";,
-                "reference": "573381c0a64f155a0d9a23f4b0c797194805b925",
+                "url": 
"https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451";,
+                "reference": "9dc4f203e36f2b486149058bade43c851dd97451",
                 "shasum": ""
             },
             "require": {
@@ -3435,7 +3359,8 @@
                 "symfony/polyfill-ctype": "^1.8"
             },
             "conflict": {
-                "vimeo/psalm": "<3.6.0"
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
                 "phpunit/phpunit": "^4.8.36 || ^7.5.13"
@@ -3462,7 +3387,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2019-11-24T13:36:37+00:00"
+            "time": "2020-06-16T10:16:42+00:00"
         },
         {
             "name": "webmozart/path-util",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/config.yaml 
new/platformsh-cli-3.59.1/config.yaml
--- old/platformsh-cli-3.57.5/config.yaml       2020-06-22 08:30:26.000000000 
+0200
+++ new/platformsh-cli-3.59.1/config.yaml       2020-07-21 15:02:11.000000000 
+0200
@@ -149,6 +149,9 @@
   # Overridden by {application.env_prefix}AUTO_LOAD_SSH_CERT env var
   auto_load_ssh_cert: false
 
+  # Whether the API supports project invitations.
+  invitations: true
+
 # How the CLI detects and configures Git repositories as projects.
 detection:
   git_remote_name: 'platform'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/dist/installer.php 
new/platformsh-cli-3.59.1/dist/installer.php
--- old/platformsh-cli-3.57.5/dist/installer.php        2020-06-22 
08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/dist/installer.php        2020-07-21 
15:02:11.000000000 +0200
@@ -120,6 +120,8 @@
         );
 
         $required_extensions = [
+            // Either mbstring or iconv is required by Symfony Console (even 
though this is not enforced in its composer.json).
+            'mbstring',
             'openssl',
             'pcre',
         ];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/dist/manifest.json 
new/platformsh-cli-3.59.1/dist/manifest.json
--- old/platformsh-cli-3.57.5/dist/manifest.json        2020-06-22 
08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/dist/manifest.json        2020-07-21 
15:02:11.000000000 +0200
@@ -17,10 +17,10 @@
     },
     {
         "name": "platform.phar",
-        "sha1": "5d8b57fc687a2df41ff14b688a22bd9aa4502349",
-        "sha256": 
"df6d8baf36d6229b12cdb93f57f49c719554fbed36b2b0266b4af6e9f9ba1f2b",
-        "url": 
"https://github.com/platformsh/platformsh-cli/releases/download/v3.57.5/platform.phar";,
-        "version": "3.57.5",
+        "sha1": "be6d7919c5a776dbcbdc7887c47d27651f5f49f3",
+        "sha256": 
"cd367d27beb28c7ee9852c5fbe5ae808f1dbff448d1ff8fed7ceab9a792b6839",
+        "url": 
"https://github.com/platformsh/platformsh-cli/releases/download/v3.59.1/platform.phar";,
+        "version": "3.59.1",
         "php": {
             "min": "5.5.9"
         },
@@ -274,6 +274,16 @@
                 "notes": "New features:\n\n* Improve SSH key commands\n  - 
Provide a choice and a more meaningful key name when generating a key in the\n  
  `ssh-key:add` command.\n  - Clarify the account that an SSH key is going to 
be added to.\n  - Append the `.pub` extension automatically.\n  - Show the 
local path (if present) in the `ssh-key:list` (`ssh-keys`) command.\n  - Ensure 
session-based SSH configuration is up to date, when running any SSH command.\n* 
Automatically select an SSH key from `~/.ssh` corresponding to the user\n  
account when there are multiple identities available, and specify it in SSH\n  
commands.\n* Provide an interactive choice in the `integration:update` command 
when no\n  integration ID is specified.\n* Add a `session:switch` command 
(beta), which helps change the session when\n  managing multiple accounts. When 
there is more than one session present,\n  information (session ID and 
logged-in user email) is displayed in various\n  relevant commands.\n\nOther 
changes:\n\n* Fix irrelevant 403 errors when the user does not have access to 
the current\n  project, but they specified another project in the command line 
anyway.\n* Include only one session's SSH certificate configuration.\n* Fix use 
of certifier URL configuration.\n* Remove the command `auth:password-login`, 
which no longer works.",
                 "show from": "3.56.0",
                 "hide from": "3.57.0"
+            },
+            {
+                "notes": "* Support prompting for re-authentication in the 
login command.\n  The command `platform login --force` (or `-f`) will now ask 
the\n  authentication server to prompt the user to log in again, even if they\n 
 already had a session in that browser. This is helpful for refreshing\n  
authentication status (e.g. to re-verify 2FA), or for logging in as another\n  
account.\n* The region list in the `platform create` command is now sorted\n  
alphabetically (with the subdomain and suffix sorted separately).\n* Add 
`--count` (`-c`) option to the `self:stats` command to modify the results per 
page.\n* Move the SSH hostname to the session-specific SSH configuration. This 
means\n  less rewriting needed for the global `~/.ssh/config` file when 
changing CLI\n  configuration.",
+                "show from": "3.57.0",
+                "hide from": "3.58.0"
+            },
+            {
+                "notes": "* Support new user invitations\n* Installer 
improvements:\n  - Create a .zshrc file if it doesn't already exist, on ZSH.\n  
- Require the mbstring extension.",
+                "show from": "3.58.0",
+                "hide from": "3.59.0"
             }
         ]
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/resources/oauth-listener/index.php 
new/platformsh-cli-3.59.1/resources/oauth-listener/index.php
--- old/platformsh-cli-3.57.5/resources/oauth-listener/index.php        
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/resources/oauth-listener/index.php        
2020-07-21 15:02:11.000000000 +0200
@@ -11,6 +11,7 @@
     private $localUrl;
     private $response;
     private $codeChallenge;
+    private $prompt;
 
     public function __construct() {
         $required = [
@@ -19,6 +20,7 @@
             'CLI_OAUTH_CLIENT_ID',
             'CLI_OAUTH_FILE',
             'CLI_OAUTH_CODE_CHALLENGE',
+            'CLI_OAUTH_PROMPT'
         ];
         if ($missing = array_diff($required, array_keys($_ENV))) {
             throw new \RuntimeException('Invalid environment, missing: ' . 
implode(', ', $missing));
@@ -27,6 +29,7 @@
         $this->authUrl = $_ENV['CLI_OAUTH_AUTH_URL'];
         $this->clientId = $_ENV['CLI_OAUTH_CLIENT_ID'];
         $this->file = $_ENV['CLI_OAUTH_FILE'];
+        $this->prompt = $_ENV['CLI_OAUTH_PROMPT'];
         $this->codeChallenge = $_ENV['CLI_OAUTH_CODE_CHALLENGE'];
         $this->localUrl = $localUrl = 'http://127.0.0.1:' . 
$_SERVER['SERVER_PORT'];
         $this->response = new Response();
@@ -41,6 +44,7 @@
             'redirect_uri' => $this->localUrl,
             'state' => $this->state,
             'client_id' => $this->clientId,
+            'prompt' => $this->prompt,
             'response_type' => 'code',
             'code_challenge' => $this->codeChallenge,
             'code_challenge_method' => 'S256',
@@ -83,7 +87,8 @@
         // Respond after an OAuth2 error.
         if (isset($_GET['error'])) {
             $message = isset($_GET['error_description']) ? 
$_GET['error_description'] : null;
-            $this->reportError($message, $_GET['error']);
+            $hint = isset($_GET['error_hint']) ? $_GET['error_hint'] : null;
+            $this->reportError($message, $_GET['error'], $hint);
             return;
         }
 
@@ -123,10 +128,11 @@
     }
 
     /**
-     * @param string      $message The error message.
-     * @param string|null $error   An OAuth2 error type.
+     * @param string $message The error message.
+     * @param string|null $error An OAuth2 error type.
+     * @param string|null $hint An OAuth2 error hint.
      */
-    private function reportError($message = null, $error = null)
+    private function reportError($message = null, $error = null, $hint = null)
     {
         $this->response->headers['Status'] = 401;
         $this->response->content = '<h1 class="error">Error</h1>';
@@ -136,8 +142,11 @@
         if (isset($message)) {
             $this->response->content .= '<p class="error">' . 
htmlspecialchars($message) . '</p>';
         }
-        if ($message || $error) {
-            $response = ['error' => $error, 'error_description' => $message];
+        if (isset($hint)) {
+            $this->response->content .= '<p class="error">' . 
htmlspecialchars($hint) . '</p>';
+        }
+        if ($message || $error || $hint) {
+            $response = ['error' => $error, 'error_description' => $message, 
'error_hint' => $hint];
             if (!$this->sendToTerminal($response)) {
                 $this->response->content .= '<p class="error">Additionally: 
failed to send error message back to terminal</p>';
             }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/App/AppListCommand.php 
new/platformsh-cli-3.59.1/src/Command/App/AppListCommand.php
--- old/platformsh-cli-3.57.5/src/Command/App/AppListCommand.php        
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/App/AppListCommand.php        
2020-07-21 15:02:11.000000000 +0200
@@ -63,7 +63,6 @@
             foreach ($localApps as $localApp) {
                 if ($localApp->getName() === $appName) {
                     return $localApp->getRoot();
-                    break;
                 }
             }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Auth/ApiTokenLoginCommand.php 
new/platformsh-cli-3.59.1/src/Command/Auth/ApiTokenLoginCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Auth/ApiTokenLoginCommand.php 
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Auth/ApiTokenLoginCommand.php 
2020-07-21 15:02:11.000000000 +0200
@@ -44,16 +44,15 @@
         }
         if (!$input->isInteractive()) {
             $this->stdErr->writeln('Non-interactive use of this command is not 
supported.');
-            $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment'));
+            $this->stdErr->writeln("\n" . 
$this->getNonInteractiveAuthHelp('comment'));
             return 1;
         }
 
         $tokenClient = new Client($this->api()->getGuzzleOptions());
-        $tokenUrl = 
Url::fromString($this->config()->get('api.accounts_api_url'))
-            ->combine('/oauth2/token')
-            ->__toString();
+        $clientId = $this->config()->get('api.oauth2_client_id');
+        $tokenUrl = $this->config()->get('api.oauth2_token_url');
 
-        $validator = function ($apiToken) use ($tokenClient, $tokenUrl) {
+        $validator = function ($apiToken) use ($tokenClient, $clientId, 
$tokenUrl) {
             $apiToken = trim($apiToken);
             if (!strlen($apiToken)) {
                 throw new \RuntimeException('The token cannot be empty');
@@ -61,7 +60,7 @@
 
             try {
                 $token = (new ApiToken($tokenClient, [
-                    'client_id' => 
$this->config()->get('api.oauth2_client_id'),
+                    'client_id' => $clientId,
                     'token_url' => $tokenUrl,
                     'auth_location' => 'headers',
                     'api_token' => $apiToken,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Auth/BrowserLoginCommand.php 
new/platformsh-cli-3.59.1/src/Command/Auth/BrowserLoginCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Auth/BrowserLoginCommand.php  
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Auth/BrowserLoginCommand.php  
2020-07-21 15:02:11.000000000 +0200
@@ -32,9 +32,13 @@
             ->addOption('force', 'f', InputOption::VALUE_NONE, 'Log in again, 
even if already logged in');
         Url::configureInput($this->getDefinition());
 
-        $help = 'Use this command to log in to the ' . $applicationName . ' 
using a browser.'
-            . "\n\n" . $this->getApiTokenHelp();
-        $this->setHelp($help);
+        $executable = $this->config()->get('application.executable');
+        $help = 'Use this command to log in to the ' . $applicationName . ' 
using a web browser.'
+            . "\n\nIt launches a temporary local website which redirects you 
to log in if necessary, and then captures the resulting authorization code."
+            . "\n\nYour system's default browser will be used. You can 
override this using the <info>--browser</info> option."
+            . "\n\nAlternatively, to log in using an API token (without a 
browser), run: <info>$executable auth:api-token-login</info>"
+            . "\n\n" . $this->getNonInteractiveAuthHelp();
+        $this->setHelp(\wordwrap($help, 80));
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
@@ -44,8 +48,8 @@
             return 1;
         }
         if (!$input->isInteractive()) {
-            $this->stdErr->writeln('Non-interactive login is not supported.');
-            $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment'));
+            $this->stdErr->writeln('Non-interactive use of this command is not 
supported.');
+            $this->stdErr->writeln("\n" . 
$this->getNonInteractiveAuthHelp('comment'));
             return 1;
         }
         if ($this->config()->getSessionId() !== 'default' || 
count($this->api()->listSessionIds()) > 1) {
@@ -140,6 +144,7 @@
             'CLI_OAUTH_CODE_CHALLENGE' => 
$this->convertVerifierToChallenge($codeVerifier),
             'CLI_OAUTH_AUTH_URL' => 
$this->config()->get('api.oauth2_auth_url'),
             'CLI_OAUTH_CLIENT_ID' => 
$this->config()->get('api.oauth2_client_id'),
+            'CLI_OAUTH_PROMPT' => $input->getOption('force') ? 'consent 
select_account' : 'consent',
             'CLI_OAUTH_FILE' => $responseFile,
         ] + $this->getParentEnv());
         $process->setTimeout(null);
@@ -174,7 +179,6 @@
         $this->stdErr->writeln('<options=bold>Help:</>');
         $this->stdErr->writeln('  Leave this command running during login.');
         $this->stdErr->writeln('  If you need to quit, use Ctrl+C.');
-        $this->stdErr->writeln("\n" . preg_replace('/^/m', '  ', 
$this->getApiTokenHelp()));
         $this->stdErr->writeln('');
 
         // Wait for the file to be filled with an OAuth2 authorization code.
@@ -211,7 +215,11 @@
             $this->stdErr->writeln('Failed to get an authorization code.');
             $this->stdErr->writeln('');
             if (!empty($response['error']) && 
!empty($response['error_description'])) {
-                $this->stdErr->writeln(sprintf('%s (<error>%s</error>)', 
$response['error_description'], $response['error']));
+                $this->stdErr->writeln('  OAuth 2.0 error: <error>' . 
$response['error'] . '</error>');
+                $this->stdErr->writeln('  Description: ' . 
$response['error_description']);
+                if (!empty($response['error_hint'])) {
+                    $this->stdErr->writeln('  Hint: ' . 
$response['error_hint']);
+                }
                 $this->stdErr->writeln('');
             } elseif (!empty($response['error_description'])) {
                 $this->stdErr->writeln($response['error_description']);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Auth/PasswordLoginCommand.php 
new/platformsh-cli-3.59.1/src/Command/Auth/PasswordLoginCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Auth/PasswordLoginCommand.php 
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Auth/PasswordLoginCommand.php 
2020-07-21 15:02:11.000000000 +0200
@@ -32,7 +32,7 @@
             . $accountsUrl . '/user/password</info>'
             . "\n\nAlternatively, to log in to the CLI with a browser, run:\n  
  <info>"
             . $executable . ' auth:browser-login</info>'
-            . "\n\n" . $this->getApiTokenHelp();
+            . "\n\n" . $this->getNonInteractiveAuthHelp();
         $this->setHelp($help);
     }
 
@@ -43,8 +43,8 @@
             return 1;
         }
         if (!$input->isInteractive()) {
-            $this->stdErr->writeln('Non-interactive login is not supported.');
-            $this->stdErr->writeln("\n" . $this->getApiTokenHelp('comment'));
+            $this->stdErr->writeln('Non-interactive use of this command is not 
supported.');
+            $this->stdErr->writeln("\n" . 
$this->getNonInteractiveAuthHelp('comment'));
             return 1;
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Command/CommandBase.php 
new/platformsh-cli-3.59.1/src/Command/CommandBase.php
--- old/platformsh-cli-3.57.5/src/Command/CommandBase.php       2020-06-22 
08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/CommandBase.php       2020-07-21 
15:02:11.000000000 +0200
@@ -381,7 +381,9 @@
         if ($this->output && $this->input && $this->input->isInteractive()) {
             if ($this->config()->getSessionId() !== 'default' || 
count($this->api()->listSessionIds()) > 1) {
                 $this->stdErr->writeln(sprintf('The current session ID is: 
<info>%s</info>', $this->config()->getSessionId()));
-                $this->stdErr->writeln(sprintf('To switch sessions, run: 
<info>%s session:switch</info>', 
$this->config()->get('application.executable')));
+                if (!$this->config()->isSessionIdFromEnv()) {
+                    $this->stdErr->writeln(sprintf('To switch sessions, run: 
<info>%s session:switch</info>', 
$this->config()->get('application.executable')));
+                }
                 $this->stdErr->writeln('');
             }
 
@@ -1560,17 +1562,17 @@
     }
 
     /**
-     * Get help on how to use API tokens.
+     * Get help on how to use API tokens non-interactively.
      *
      * @param string $tag
      *
      * @return string
      */
-    protected function getApiTokenHelp($tag = 'info')
+    protected function getNonInteractiveAuthHelp($tag = 'info')
     {
-        $executable = $this->config()->get('application.executable');
+        $prefix = $this->config()->get('application.env_prefix');
 
-        return "To log in using an API token, run: <$tag>$executable 
auth:api-token-login</$tag>";
+        return "To authenticate non-interactively, configure an API token 
using the <$tag>${prefix}TOKEN</$tag> environment variable.";
     }
 
     /**
@@ -1633,7 +1635,6 @@
         // Generate a new certificate from the certifier API.
         /** @var \Platformsh\Cli\SshCert\Certifier $certifier */
         $certifier = $this->getService('certifier');
-        $sshCert = null;
         if ($certifier->isAutoLoadEnabled()) {
             $this->stdErr->writeln('');
             $this->stdErr->writeln('Generating SSH certificate...');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Environment/EnvironmentDeleteCommand.php 
new/platformsh-cli-3.59.1/src/Command/Environment/EnvironmentDeleteCommand.php
--- 
old/platformsh-cli-3.57.5/src/Command/Environment/EnvironmentDeleteCommand.php  
    2020-06-22 08:30:26.000000000 +0200
+++ 
new/platformsh-cli-3.59.1/src/Command/Environment/EnvironmentDeleteCommand.php  
    2020-07-21 15:02:11.000000000 +0200
@@ -139,7 +139,7 @@
         // Find a list of branches merged on the remote.
         $git->fetch($remoteName);
         $mergedBranches = $git->getMergedBranches($remoteName . '/' . $base, 
true);
-        $mergedBranches = array_filter($mergedBranches, function 
($mergedBranch) use ($remoteName, $base) {
+        $mergedBranches = array_filter($mergedBranches, function 
($mergedBranch) use ($remoteName) {
             return strpos($mergedBranch, $remoteName) === 0;
         });
         $stripLength = strlen($remoteName . '/');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Project/ProjectCreateCommand.php 
new/platformsh-cli-3.59.1/src/Command/Project/ProjectCreateCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Project/ProjectCreateCommand.php      
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Project/ProjectCreateCommand.php      
2020-07-21 15:02:11.000000000 +0200
@@ -274,6 +274,7 @@
                     $regions[$region->id] = $region->label;
                 }
             }
+            \uksort($regions, [$this->api(), 'compareDomains']);
         } else {
             $regions = (array) 
$this->config()->get('service.available_regions');
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Self/SelfBuildCommand.php 
new/platformsh-cli-3.59.1/src/Command/Self/SelfBuildCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Self/SelfBuildCommand.php     
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Self/SelfBuildCommand.php     
2020-07-21 15:02:11.000000000 +0200
@@ -130,9 +130,9 @@
             $originalConfig = json_decode(file_get_contents(CLI_ROOT . 
'/box.json'), true);
             $boxConfig = array_merge($originalConfig, $boxConfig);
             $boxConfig['base-path'] = CLI_ROOT;
-            $filename = tempnam(sys_get_temp_dir(), 'cli-box-');
-            file_put_contents($filename, json_encode($boxConfig));
-            $boxArgs[] = '--config=' . $filename;
+            $tmpJson = tempnam(sys_get_temp_dir(), 'cli-box-');
+            file_put_contents($tmpJson, json_encode($boxConfig));
+            $boxArgs[] = '--config=' . $tmpJson;
         }
 
         $this->stdErr->writeln('Building Phar package using Box');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Self/SelfInstallCommand.php 
new/platformsh-cli-3.59.1/src/Command/Self/SelfInstallCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Self/SelfInstallCommand.php   
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Self/SelfInstallCommand.php   
2020-07-21 15:02:11.000000000 +0200
@@ -384,6 +384,7 @@
             return getenv($envPrefix . 'APP_DIR') . '/.environment';
         }
 
+        // Default to Bash filenames.
         $candidates = [
             '.bashrc',
             '.bash_profile',
@@ -397,10 +398,12 @@
             ];
         }
 
+        // Use .zshrc on ZSH.
         if ($shellType === 'zsh' || (empty($shellType) && getenv('ZSH'))) {
-            array_unshift($candidates, '.zshrc');
+            $candidates = ['.zshrc'];
         }
 
+        // Pick the first of the candidate files that already exists.
         $homeDir = $this->config()->getHomeDirectory();
         foreach ($candidates as $candidate) {
             if (file_exists($homeDir . DIRECTORY_SEPARATOR . $candidate)) {
@@ -410,10 +413,13 @@
             }
         }
 
-        // If none of the files exist (yet), and we are on Bash, and the home
-        // directory is writable, then use ~/.bashrc or ~/.bash_profile on
-        // OS X.
-        if (is_writable($homeDir) && $shellType === 'bash') {
+        if (!is_writable($homeDir)) {
+            return false;
+        }
+
+        // If none of the files exist (yet), and the home directory is 
writable,
+        // then create a new file based on the shell type.
+        if ($shellType === 'bash') {
             if (OsUtil::isOsX()) {
                 $this->debug('OS X: defaulting to ~/.bash_profile');
 
@@ -422,6 +428,10 @@
             $this->debug('Defaulting to ~/.bashrc');
 
             return $homeDir . DIRECTORY_SEPARATOR . '.bashrc';
+        } elseif ($shellType === 'zsh') {
+            $this->debug('Defaulting to ~/.zshrc');
+
+            return $homeDir . DIRECTORY_SEPARATOR . '.zshrc';
         }
 
         return false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/Self/SelfStatsCommand.php 
new/platformsh-cli-3.59.1/src/Command/Self/SelfStatsCommand.php
--- old/platformsh-cli-3.57.5/src/Command/Self/SelfStatsCommand.php     
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/Self/SelfStatsCommand.php     
2020-07-21 15:02:11.000000000 +0200
@@ -18,7 +18,8 @@
         $this
             ->setName('self:stats')
             ->setDescription('View stats on GitHub package downloads')
-            ->addOption('page', 'p', InputOption::VALUE_REQUIRED, 'Page 
number', 1);
+            ->addOption('page', 'p', InputOption::VALUE_REQUIRED, 'Page 
number', 1)
+            ->addOption('count', 'c', InputOption::VALUE_REQUIRED, 'Results 
per page (max: 100)', 20);
         Table::configureInput($this->getDefinition());
         PropertyFormatter::configureInput($this->getDefinition());
     }
@@ -39,7 +40,7 @@
                 ],
                 'query' => [
                     'page' => (int) $input->getOption('page'),
-                    'per_page' => 20,
+                    'per_page' => (int) $input->getOption('count'),
                 ],
             ])->json();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/platformsh-cli-3.57.5/src/Command/User/UserAddCommand.php 
new/platformsh-cli-3.59.1/src/Command/User/UserAddCommand.php
--- old/platformsh-cli-3.57.5/src/Command/User/UserAddCommand.php       
2020-06-22 08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Command/User/UserAddCommand.php       
2020-07-21 15:02:11.000000000 +0200
@@ -3,6 +3,8 @@
 
 use Platformsh\Cli\Command\CommandBase;
 use Platformsh\Client\Model\EnvironmentAccess;
+use Platformsh\Client\Model\Invitation\AlreadyInvitedException;
+use Platformsh\Client\Model\Invitation\Environment;
 use Platformsh\Client\Model\ProjectAccess;
 use Symfony\Component\Console\Exception\InvalidArgumentException;
 use Symfony\Component\Console\Helper\ProgressBar;
@@ -251,20 +253,37 @@
         // Ask for confirmation.
         if ($existingProjectAccess) {
             if (!$questionHelper->confirm('Are you sure you want to make these 
change(s)?')) {
-
                 return 1;
             }
         } else {
             $this->stdErr->writeln('<comment>Adding users can result in 
additional charges.</comment>');
             $this->stdErr->writeln('');
             if (!$questionHelper->confirm('Are you sure you want to add this 
user?')) {
-
                 return 1;
             }
         }
+        $this->stdErr->writeln('');
+
+        // If the user does not already exist on the project, then use the 
Invitations API.
+        if (!$existingProjectAccess && 
$this->config()->getWithDefault('api.invitations', false)) {
+            $this->stdErr->writeln('Inviting the user to the project...');
+            $environments = [];
+            foreach ($desiredEnvironmentRoles as $id => $role) {
+                $environments[] = new Environment($id, $role);
+            }
+            try {
+                $project->inviteUserByEmail($email, $desiredProjectRole, 
$environments);
+                $this->stdErr->writeln('');
+                $this->stdErr->writeln(sprintf('An invitation has been sent to 
<info>%s</info>', $email));
+            } catch (AlreadyInvitedException $e) {
+                $this->stdErr->writeln('');
+                $this->stdErr->writeln(sprintf('An invitation has already been 
sent to <info>%s</info>', $e->getEmail()));
+            }
+
+            return 0;
+        }
 
-        // Make the required modifications on the project level: add the user,
-        // change their role, or do nothing.
+        // Make the desired changes at the project level.
         if (!$existingProjectAccess) {
             $this->stdErr->writeln("Adding the user to the project");
             $result = $project->addUser($email, $desiredProjectRole);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Service/Api.php 
new/platformsh-cli-3.59.1/src/Service/Api.php
--- old/platformsh-cli-3.57.5/src/Service/Api.php       2020-06-22 
08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Service/Api.php       2020-07-21 
15:02:11.000000000 +0200
@@ -247,6 +247,7 @@
     private function getConnectorOptions() {
         $connectorOptions = [];
         $connectorOptions['accounts'] = 
rtrim($this->config->get('api.accounts_api_url'), '/') . '/';
+        $connectorOptions['api_url'] = 
$this->config->getWithDefault('api.base_url', '');
         $connectorOptions['certifier_url'] = 
$this->config->get('api.certifier_url');
         $connectorOptions['verify'] = !$this->config->get('api.skip_ssl');
         $connectorOptions['debug'] = $this->config->get('api.debug') ? STDERR 
: false;
@@ -324,7 +325,7 @@
      * @return AccessToken|null
      */
     private function tokenFromSession(SessionInterface $session) {
-        if (!$accessToken = $session->get('accessToken')) {
+        if (!$session->get('accessToken')) {
             return null;
         }
         $map = [
@@ -531,8 +532,12 @@
             $this->cache->save($cacheKey, $cachedProjects, 
$this->config->get('api.projects_ttl'));
         } else {
             $guzzleClient = $this->getHttpClient();
+            $apiUrl = $this->config->getWithDefault('api.base_url', '');
             foreach ((array) $cached as $id => $data) {
                 $projects[$id] = new Project($data, $data['_endpoint'], 
$guzzleClient);
+                if ($apiUrl) {
+                    $projects[$id]->setApiUrl($apiUrl);
+                }
             }
         }
 
@@ -580,6 +585,10 @@
             $baseUrl = $cached['_endpoint'];
             unset($cached['_endpoint']);
             $project = new Project($cached, $baseUrl, $guzzleClient);
+            $apiUrl = $this->config->getWithDefault('api.base_url', '');
+            if ($apiUrl) {
+                $project->setApiUrl($apiUrl);
+            }
         }
 
         return $project;
@@ -1128,4 +1137,22 @@
             }
         }
     }
+
+    /**
+     * Compares domains as a sorting function. Used to sort region IDs.
+     *
+     * @param string $regionA
+     * @param string $regionB
+     *
+     * @return int
+     */
+    public function compareDomains($regionA, $regionB)
+    {
+        if (strpos($regionA, '.') && strpos($regionB, '.')) {
+            $partsA = explode('.', $regionA, 2);
+            $partsB = explode('.', $regionB, 2);
+            return (\strnatcasecmp($partsA[1], $partsB[1]) * 10) + 
\strnatcasecmp($partsA[0], $partsB[0]);
+        }
+        return \strnatcasecmp($regionA, $regionB);
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/src/Service/SshConfig.php 
new/platformsh-cli-3.59.1/src/Service/SshConfig.php
--- old/platformsh-cli-3.57.5/src/Service/SshConfig.php 2020-06-22 
08:30:26.000000000 +0200
+++ new/platformsh-cli-3.59.1/src/Service/SshConfig.php 2020-07-21 
15:02:11.000000000 +0200
@@ -81,7 +81,8 @@
                 '# This file is included from your SSH config file 
(~/.ssh/config).',
                 '# In turn, it includes the configuration for the currently 
active CLI session.',
                 '# It is updated automatically when certain CLI commands are 
run.',
-                'Include ' . $sessionSpecificFilename,
+                'Host ' . $this->config->get('api.ssh_domain_wildcard'),
+                '  Include ' . $sessionSpecificFilename,
             ]
         );
 
@@ -136,8 +137,7 @@
     {
         $filename = $this->getUserSshConfigFilename();
 
-        $suggestedConfig = 'Host ' . 
$this->config->get('api.ssh_domain_wildcard') . PHP_EOL
-            . '  Include ' . $this->getCliSshDir() . DIRECTORY_SEPARATOR . 
'*.config';
+        $suggestedConfig = 'Include ' . $this->getCliSshDir() . 
DIRECTORY_SEPARATOR . '*.config';
 
         $manualMessage = 'To configure SSH manually, add the following lines 
to: <comment>' . $filename . '</comment>'
             . "\n" . $suggestedConfig;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/platformsh-cli-3.57.5/tests/Service/ApiTest.php 
new/platformsh-cli-3.59.1/tests/Service/ApiTest.php
--- old/platformsh-cli-3.57.5/tests/Service/ApiTest.php 1970-01-01 
01:00:00.000000000 +0100
+++ new/platformsh-cli-3.59.1/tests/Service/ApiTest.php 2020-07-21 
15:02:11.000000000 +0200
@@ -0,0 +1,37 @@
+<?php
+
+namespace Platformsh\Cli\Tests\Service;
+
+use Platformsh\Cli\Service\Api;
+
+class ApiTest extends \PHPUnit_Framework_TestCase
+{
+    public function testCompareDomains() {
+        $api = new Api();
+        $arr = [
+            'region-1.fxample.com',
+            'region-4.example.com',
+            'region-1.example.com',
+            'region-3.example.com',
+            'a',
+            'example.com',
+            'Region-2.example.com',
+            'region-10.example.com',
+            'region-2.fxample.com',
+            'region.example.com',
+        ];
+        \usort($arr, [$api, 'compareDomains']);
+        $this->assertEquals([
+            'a',
+            'example.com',
+            'region.example.com',
+            'region-1.example.com',
+            'Region-2.example.com',
+            'region-3.example.com',
+            'region-4.example.com',
+            'region-10.example.com',
+            'region-1.fxample.com',
+            'region-2.fxample.com',
+        ], $arr);
+    }
+}

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


Reply via email to