Ver código fonte

Add isFresh to InstalledRepositoryInterface and make sure local repo is always an InstalledRepositoryInterface

Jordi Boggiano 5 anos atrás
pai
commit
6529fabb24

+ 1 - 1
src/Composer/Repository/FilesystemRepository.php

@@ -28,7 +28,7 @@ use Composer\Util\Filesystem;
  */
 class FilesystemRepository extends WritableArrayRepository
 {
-    private $file;
+    protected $file;
     private $dumpVersions;
     private $rootPackage;
 

+ 10 - 0
src/Composer/Repository/InstalledArrayRepository.php

@@ -25,4 +25,14 @@ class InstalledArrayRepository extends WritableArrayRepository implements Instal
     {
         return 'installed '.parent::getRepoName();
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function isFresh()
+    {
+        // this is not a completely correct implementation but there is no way to
+        // distinguish an empty repo and a newly created one given this is all in-memory
+        return $this->count() === 0;
+    }
 }

+ 8 - 0
src/Composer/Repository/InstalledFilesystemRepository.php

@@ -23,4 +23,12 @@ class InstalledFilesystemRepository extends FilesystemRepository implements Inst
     {
         return 'installed '.parent::getRepoName();
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function isFresh()
+    {
+        return !$this->file->exists();
+    }
 }

+ 4 - 0
src/Composer/Repository/InstalledRepositoryInterface.php

@@ -21,4 +21,8 @@ namespace Composer\Repository;
  */
 interface InstalledRepositoryInterface extends WritableRepositoryInterface
 {
+    /**
+     * @return bool true if packages were never installed in this repository
+     */
+    public function isFresh();
 }

+ 3 - 3
src/Composer/Repository/RepositoryManager.php

@@ -163,9 +163,9 @@ class RepositoryManager
     /**
      * Sets local repository for the project.
      *
-     * @param WritableRepositoryInterface $repository repository instance
+     * @param InstalledRepositoryInterface $repository repository instance
      */
-    public function setLocalRepository(WritableRepositoryInterface $repository)
+    public function setLocalRepository(InstalledRepositoryInterface $repository)
     {
         $this->localRepository = $repository;
     }
@@ -173,7 +173,7 @@ class RepositoryManager
     /**
      * Returns local repository for the project.
      *
-     * @return WritableRepositoryInterface
+     * @return InstalledRepositoryInterface
      */
     public function getLocalRepository()
     {