Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / drush / drush / src / SiteAlias / SiteAliasFileDiscovery.php
diff --git a/vendor/drush/drush/src/SiteAlias/SiteAliasFileDiscovery.php b/vendor/drush/drush/src/SiteAlias/SiteAliasFileDiscovery.php
new file mode 100644 (file)
index 0000000..d41e210
--- /dev/null
@@ -0,0 +1,168 @@
+<?php
+namespace Drush\SiteAlias;
+
+use Symfony\Component\Finder\Finder;
+
+/**
+ * Discover alias files named:
+ *
+ * - sitename.site.yml: contains multiple aliases, one for each of the
+ *     environments of 'sitename'.
+ *
+ * Drush aliases that contain both a site name and an environment
+ * (e.g. @site.env) will cause Drush to find the file named after
+ * the respective site name and retrieve the specified environment
+ * record.
+ *
+ * Sites may also define a special alias file self.site.yml, which
+ * may be stored in the drush/sites directory relative to either
+ * the Drupal root or the Composer root of the site. The environments
+ * in this file will be merged with the available environments for
+ * the element @self, however it is defined.
+ */
+class SiteAliasFileDiscovery
+{
+    protected $searchLocations = [];
+    protected $depth = '<= 1';
+
+    /**
+     * Add a location that alias files may be found.
+     *
+     * @param string $path
+     * @return $this
+     */
+    public function addSearchLocation($path)
+    {
+        if (is_dir($path)) {
+            $this->searchLocations[] = $path;
+        }
+        return $this;
+    }
+
+    /**
+     * Return all of the paths where alias files may be found.
+     * @return string[]
+     */
+    public function searchLocations()
+    {
+        return $this->searchLocations;
+    }
+
+
+    /**
+     * Set the search depth for finding alias files
+     *
+     * @param string|int $depth (@see \Symfony\Component\Finder\Finder::depth)
+     * @return $this
+     */
+    public function depth($depth)
+    {
+        $this->depth = $depth;
+        return $this;
+    }
+
+    /**
+     * Find an alias file SITENAME.site.yml in one
+     * of the specified search locations.
+     *
+     * @param string $siteName
+     * @return string|bool
+     */
+    public function findSingleSiteAliasFile($siteName)
+    {
+        $matches = $this->searchForAliasFiles("$siteName.site.yml");
+        if (empty($matches)) {
+            return false;
+        }
+        return reset($matches);
+    }
+
+    /**
+     * Return a list of all SITENAME.site.yml files in any of
+     * the search locations.
+     *
+     * @return string[]
+     */
+    public function findAllSingleAliasFiles()
+    {
+        return $this->searchForAliasFiles('*.site.yml');
+    }
+
+    /**
+     * Return all of the legacy alias files used in previous Drush versions.
+     *
+     * @return string[]
+     */
+    public function findAllLegacyAliasFiles()
+    {
+        return array_merge(
+            $this->searchForAliasFiles('*.alias.drushrc.php'),
+            $this->searchForAliasFiles('*.aliases.drushrc.php')
+        );
+    }
+
+    /**
+     * Create a Symfony Finder object to search all available search locations
+     * for the specified search pattern.
+     *
+     * @param string $searchPattern
+     * @return Finder
+     */
+    protected function createFinder($searchPattern)
+    {
+        $finder = new Finder();
+        $finder->files()
+            ->name($searchPattern)
+            ->in($this->searchLocations)
+            ->depth($this->depth);
+        return $finder;
+    }
+
+    /**
+     * Return a list of all alias files matching the provided pattern.
+     *
+     * @param string $searchPattern
+     * @return string[]
+     */
+    protected function searchForAliasFiles($searchPattern)
+    {
+        if (empty($this->searchLocations)) {
+            return [];
+        }
+        $finder = $this->createFinder($searchPattern);
+        $result = [];
+        foreach ($finder as $file) {
+            $path = $file->getRealPath();
+            $result[] = $path;
+        }
+        return $result;
+    }
+
+    /**
+     * Return a list of all alias files with the specified extension.
+     *
+     * @param string $filenameExensions
+     * @return string[]
+     */
+    protected function searchForAliasFilesKeyedByBasenamePrefix($filenameExensions)
+    {
+        if (empty($this->searchLocations)) {
+            return [];
+        }
+        $searchPattern = '*' . $filenameExensions;
+        $finder = $this->createFinder($searchPattern);
+        $result = [];
+        foreach ($finder as $file) {
+            $path = $file->getRealPath();
+            $key = $this->extractKey($file->getBasename(), $filenameExensions);
+            $result[$key] = $path;
+        }
+        return $result;
+    }
+
+    // TODO: Seems like this could just be basename()
+    protected function extractKey($basename, $filenameExensions)
+    {
+        return str_replace($filenameExensions, '', $basename);
+    }
+}