@@ -192,6 +192,10 @@ func (proj *Project) patternsMatch(patterns *[]*regexp.Regexp, repoName string)
192192 return false
193193}
194194
195+ func (proj * Project ) isRepoIgnored (repoName string ) bool {
196+ return proj .patternsMatch (& proj .reposIgnoredRe , repoName )
197+ }
198+
195199func (proj * Project ) isRepoAllowed (repoName string ) bool {
196200 if (len (proj .reposAllowedRe ) == 0 ) || proj .patternsMatch (& proj .reposAllowedRe , repoName ) {
197201 return ! proj .patternsMatch (& proj .reposIgnoredRe , repoName )
@@ -219,6 +223,10 @@ func (proj *Project) GetPkgRepos() error {
219223 fields , err := pkg .PkgConfig ().GetValStringMapString (k , nil )
220224 util .OneTimeWarningError (err )
221225
226+ if ! proj .isRepoAllowed (repoName ) {
227+ continue
228+ }
229+
222230 r , err := proj .loadRepo (repoName , fields )
223231 if err != nil {
224232 // if `repository.yml` does not exist, it is not an error; we
@@ -437,10 +445,6 @@ func (proj *Project) InfoIf(predicate func(r *repo.Repo) bool,
437445// @return error Error on failure.
438446func (proj * Project ) loadRepo (name string , fields map [string ]string ) (
439447 * repo.Repo , error ) {
440-
441- if ! proj .isRepoAllowed (name ) {
442- return nil , nil
443- }
444448 // First, read the repo description from the supplied fields.
445449 if fields ["type" ] == "" {
446450 return nil ,
@@ -523,6 +527,11 @@ func (proj *Project) loadRepoDeps(download bool) error {
523527 depRepo := proj .repos [dep .Name ]
524528 if depRepo == nil {
525529 var err error
530+
531+ if ! proj .isRepoAllowed (dep .Name ) {
532+ continue
533+ }
534+
526535 depRepo , err = proj .loadRepo (dep .Name , dep .Fields )
527536 if err != nil {
528537 // if `repository.yml` does not exist, it is not an
@@ -720,18 +729,17 @@ func (proj *Project) loadConfig(download bool) error {
720729
721730 reposAllowed , err = yc .GetValStringSlice ("project.repositories.allowed" , nil )
722731 util .OneTimeWarningError (err )
723- proj .reposAllowedRe , err = proj .createRegexpPatterns (reposAllowed )
732+ proj .reposAllowedRe , err = proj .createRegexpPatterns (util . UniqueStrings ( reposAllowed ) )
724733 util .OneTimeWarningError (err )
725734
726735 reposIgnored , err = yc .GetValStringSlice ("project.repositories.ignored" , nil )
727736 util .OneTimeWarningError (err )
728737 reposIgnored = append (reposIgnored , newtutil .NewtIgnore ... )
729- proj .reposIgnoredRe , err = proj .createRegexpPatterns (reposIgnored )
738+ proj .reposIgnoredRe , err = proj .createRegexpPatterns (util . UniqueStrings ( reposIgnored ) )
730739 util .OneTimeWarningError (err )
731740
732- if ! proj .isRepoAllowed ("apache-mynewt-core" ) {
733- return util .NewNewtError ("apache-mynewt-core repository must be allowed. " +
734- "Please add it to the allowed list and/or remove it from the ignored list." )
741+ if proj .isRepoIgnored ("apache-mynewt-core" ) {
742+ return util .NewNewtError ("apache-mynewt-core repository cannot be on ignored list." )
735743 }
736744
737745 // Local repository always included in initialization
@@ -754,6 +762,10 @@ func (proj *Project) loadConfig(download bool) error {
754762 fields , err := yc .GetValStringMapString (k , nil )
755763 util .OneTimeWarningError (err )
756764
765+ if proj .isRepoIgnored (repoName ) {
766+ continue
767+ }
768+
757769 r , err := proj .loadRepo (repoName , fields )
758770 if err != nil {
759771 // if `repository.yml` does not exist, it is not an error; we
0 commit comments