@@ -27,6 +27,8 @@ import (
2727 "github.com/pmylund/sortutil"
2828 "github.com/sirupsen/logrus"
2929 semver "go.bug.st/relaxed-semver"
30+ "google.golang.org/grpc/codes"
31+ "google.golang.org/grpc/status"
3032)
3133
3234// LibrariesManager keeps the current status of the libraries in the system
@@ -160,13 +162,14 @@ func (lm *LibrariesManager) AddPlatformReleaseLibrariesDir(plaftormRelease *core
160162}
161163
162164// RescanLibraries reload all installed libraries in the system.
163- func (lm * LibrariesManager ) RescanLibraries () error {
165+ func (lm * LibrariesManager ) RescanLibraries () []* status.Status {
166+ statuses := []* status.Status {}
164167 for _ , dir := range lm .LibrariesDir {
165- if err := lm .LoadLibrariesFromDir (dir ); err != nil {
166- return fmt . Errorf ( "loading libs from %s: %s" , dir . Path , err )
168+ if errs := lm .LoadLibrariesFromDir (dir ); len ( errs ) > 0 {
169+ statuses = append ( statuses , errs ... )
167170 }
168171 }
169- return nil
172+ return statuses
170173}
171174
172175func (lm * LibrariesManager ) getUserLibrariesDir () * paths.Path {
@@ -180,21 +183,25 @@ func (lm *LibrariesManager) getUserLibrariesDir() *paths.Path {
180183
181184// LoadLibrariesFromDir loads all libraries in the given directory. Returns
182185// nil if the directory doesn't exists.
183- func (lm * LibrariesManager ) LoadLibrariesFromDir (librariesDir * LibrariesDir ) error {
186+ func (lm * LibrariesManager ) LoadLibrariesFromDir (librariesDir * LibrariesDir ) []* status.Status {
187+ statuses := []* status.Status {}
184188 subDirs , err := librariesDir .Path .ReadDir ()
185189 if os .IsNotExist (err ) {
186- return nil
190+ return statuses
187191 }
188192 if err != nil {
189- return fmt .Errorf ("reading dir %s: %s" , librariesDir .Path , err )
193+ s := status .Newf (codes .FailedPrecondition , "reading dir %s: %s" , librariesDir .Path , err )
194+ return append (statuses , s )
190195 }
191196 subDirs .FilterDirs ()
192197 subDirs .FilterOutHiddenFiles ()
193198
194199 for _ , subDir := range subDirs {
195200 library , err := libraries .Load (subDir , librariesDir .Location )
196201 if err != nil {
197- return fmt .Errorf ("loading library from %s: %s" , subDir , err )
202+ s := status .Newf (codes .Internal , "loading library from %s: %s" , subDir , err )
203+ statuses = append (statuses , s )
204+ continue
198205 }
199206 library .ContainerPlatform = librariesDir .PlatformRelease
200207 alternatives , ok := lm .Libraries [library .Name ]
@@ -204,7 +211,8 @@ func (lm *LibrariesManager) LoadLibrariesFromDir(librariesDir *LibrariesDir) err
204211 }
205212 alternatives .Add (library )
206213 }
207- return nil
214+
215+ return statuses
208216}
209217
210218// LoadLibraryFromDir loads one single library from the libRootDir.
0 commit comments