Browse Source

After update and install commands display how many packages want funding

Nils Adermann 5 years ago
parent
commit
d665ea7ea9

+ 19 - 0
src/Composer/Installer.php

@@ -35,6 +35,7 @@ use Composer\IO\IOInterface;
 use Composer\Package\AliasPackage;
 use Composer\Package\BasePackage;
 use Composer\Package\CompletePackage;
+use Composer\Package\CompletePackageInterface;
 use Composer\Package\Link;
 use Composer\Package\Loader\ArrayLoader;
 use Composer\Package\Dumper\ArrayDumper;
@@ -313,6 +314,24 @@ class Installer
             }
         }
 
+        $fundingCount = 0;
+        foreach ($localRepo->getPackages() as $package) {
+            if ($package instanceof CompletePackageInterface && !empty($package->getFunding())) {
+                $fundingCount++;
+            }
+        }
+        if ($fundingCount) {
+            $this->io->writeError(array(
+                sprintf(
+                    "<info>%d package%s you are using %s looking for funding.</info>",
+                    $fundingCount,
+                    1 === $fundingCount ? '' : 's',
+                    1 === $fundingCount ? 'is' : 'are'
+                ),
+                '<info>Use the composer fund command to find out more!</info>',
+            ));
+        }
+
         if ($this->runScripts) {
             // dispatch post event
             $eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;

+ 54 - 0
tests/Composer/Test/Fixtures/installer/install-funding-notice.test

@@ -0,0 +1,54 @@
+--TEST--
+Installs a simple package with exact match requirement
+--COMPOSER--
+{
+    "repositories": [
+        {
+            "type": "package",
+            "package": [
+                {
+                    "name": "a/a",
+                    "version": "1.0.0",
+                    "funding": [{ "type": "example", "url": "http://example.org/fund" }],
+                    "require": {
+                        "d/d": "^1.0"
+                    }
+                },
+                {
+                    "name": "b/b",
+                    "version": "1.0.0",
+                    "funding": [{ "type": "example", "url": "http://example.org/fund" }]
+                },
+                {
+                    "name": "c/c",
+                    "version": "1.0.0",
+                    "funding": [{ "type": "example", "url": "http://example.org/fund" }]
+                },
+                {
+                    "name": "d/d",
+                    "version": "1.0.0",
+                    "require": {
+                        "b/b": "^1.0"
+                    }
+                }
+            ]
+        }
+    ],
+    "require": {
+        "a/a": "1.0.0"
+    }
+}
+--RUN--
+install
+--EXPECT-OUTPUT--
+Loading composer repositories with package information
+Updating dependencies (including require-dev)
+Package operations: 3 installs, 0 updates, 0 removals
+Writing lock file
+Generating autoload files
+2 packages you are using are looking for funding.
+Use the composer fund command to find out more!
+--EXPECT--
+Installing b/b (1.0.0)
+Installing d/d (1.0.0)
+Installing a/a (1.0.0)