Skip to content

Commit 827d76f

Browse files
authored
Merge pull request #159 from sommersoft/fix_librarian_perm_check
Fix CircuitPythonLibrarians Permissions Validator
2 parents 49eadcd + 27ad125 commit 827d76f

File tree

1 file changed

+37
-13
lines changed

1 file changed

+37
-13
lines changed

adabot/lib/circuitpython_library_validators.py

+37-13
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)