@@ -184,25 +184,49 @@ def validate_repo_state(self, repo):
184184 if not (repo ["owner" ]["login" ] == "adafruit" and
185185 repo ["name" ].startswith ("Adafruit_CircuitPython" )):
186186 return []
187- full_repo = github .get ("/repos/" + repo ["full_name" ])
188- if not full_repo .ok :
189- return [ERROR_UNABLE_PULL_REPO_DETAILS ]
190- full_repo = full_repo .json ()
187+
188+ search_keys = {
189+ "has_wiki" ,
190+ "license" ,
191+ "permissions" ,
192+ "allow_squash_merge" ,
193+ "allow_rebase_merge" ,
194+ }
195+
196+ repo_fields = repo .copy ()
197+
198+ repo_fields_keys = set (repo_fields .keys ())
199+ repo_missing_some_keys = search_keys .difference (repo_fields_keys )
200+
201+ if repo_missing_some_keys :
202+ # only call the API if the passed in `repo` doesn't have what
203+ # we need.
204+ response = github .get ("/repos/" + repo ["full_name" ])
205+ if not response .ok :
206+ return [ERROR_UNABLE_PULL_REPO_DETAILS ]
207+ repo_fields = response .json ()
208+
191209 errors = []
192- if repo ["has_wiki" ]:
210+
211+ if repo_fields .get ("has_wiki" ):
193212 errors .append (ERROR_WIKI_DISABLED )
194- if not repo .get ("license" ) and not repo ["name" ] in BUNDLE_IGNORE_LIST :
195- errors .append (ERROR_MISSING_LICENSE )
196- if not repo .get ("permissions" , {}).get ("push" ):
213+
214+ if (not repo_fields .get ("license" ) and
215+ not repo ["name" ] in BUNDLE_IGNORE_LIST ):
216+ errors .append (ERROR_MISSING_LICENSE )
217+
218+ if not repo_fields .get ("permissions" , {}).get ("push" ):
197219 errors .append (ERROR_MISSING_LIBRARIANS )
198- if (not common_funcs .is_repo_in_bundle (full_repo ["clone_url" ], self .bundle_submodules )
199- and not repo ["name" ] in BUNDLE_IGNORE_LIST ):
220+
221+ repo_in_bundle = common_funcs .is_repo_in_bundle (repo_fields ["clone_url" ],
222+ self .bundle_submodules )
223+ if not repo_in_bundle and not repo ["name" ] in BUNDLE_IGNORE_LIST :
200224 # Don't assume the bundle will bundle itself and possibly
201225 # other repos.
202226 errors .append (ERROR_NOT_IN_BUNDLE )
203- if ( "allow_squash_merge" not in full_repo
204- or full_repo [ "allow_squash_merge" ]
205- or full_repo [ "allow_rebase_merge" ] ):
227+
228+ if ( repo_fields . get ( "allow_squash_merge" ) or
229+ repo_fields . get ( "allow_rebase_merge" ) ):
206230 errors .append (ERROR_ONLY_ALLOW_MERGES )
207231 return errors
208232
0 commit comments