Consolidate sync actions in route handlers#240
Conversation
There was a problem hiding this comment.
Pull request overview
This PR consolidates duplicated logic in GitHub route handlers by extracting common sync, delete, and pipeline context operations into shared helper functions. The RepoConfig class is also updated to compute fullname automatically.
Changes:
- Extracted
_sync_refs,_delete_ref,_get_dest_context,_get_pr_target_ref, and_get_pr_pipeline_contextas shared helpers to eliminate duplicated code across push and pull request event handlers. - Simplified
sync_prsignature by removing thesrc_repo_privateparameter (now derived from thepull_requestdict directly). - Changed
RepoConfig.fullnameto be auto-computed fromdest_organddest_nameinstead of being passed as a separate parameter.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
src/hubcast/web/github/routes.py |
Route handlers refactored to use new helper functions, removing significant code duplication |
src/hubcast/repos/config.py |
RepoConfig.fullname now auto-computed from dest_org/dest_name |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Hubcast config settings for repos should only be fetched from the default branch of the base repository. Previously, we were getting the config from the head repo, which would lead to potential confusion for users submitting PRs via forks. This ensures that there is one source of settings for each repository. I pulled this out of llnl#240 to make for a faster review.
Hubcast config settings for repos should only be fetched from the default branch of the base repository. Previously, we were getting the config from the head repo, which would lead to potential confusion for users submitting PRs via forks. This ensures that there is one source of settings for each repository. I pulled this out of #240 to make for a faster review.
9e8e2e5 to
c9ac693
Compare
There was a lot of duplicated code/logic in the route handlers, especially for the sync/delete ref actions. I was a bit aggressive with the consolidation, so let me know if you'd like to keep something expanded.
c9ac693 to
a26cc77
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| async def _get_dest_context(repo_fullname, gh, gl, gl_user): | ||
| """Returns common destination repo details needed for sync/delete operations.""" | ||
| repo_config = await get_repo_config(gh, repo_fullname, refresh=True) |
There was a problem hiding this comment.
In the sync_pr flow, get_repo_config is called twice: once here (without refresh) for the draft check, and again inside _sync_refs → _get_dest_context (with refresh=True). Consider passing the already-fetched repo_config into _sync_refs to avoid the redundant network call, or at minimum make the refresh parameter in _get_dest_context configurable rather than always True.
| async def _get_dest_context(repo_fullname, gh, gl, gl_user): | |
| """Returns common destination repo details needed for sync/delete operations.""" | |
| repo_config = await get_repo_config(gh, repo_fullname, refresh=True) | |
| async def _get_dest_context(repo_fullname, gh, gl, gl_user, *, refresh: bool = True, repo_config=None): | |
| """Returns common destination repo details needed for sync/delete operations.""" | |
| if repo_config is None or refresh: | |
| repo_config = await get_repo_config(gh, repo_fullname, refresh=refresh) |
There was a lot of duplicated code/logic in the route handlers, especially for the sync/delete ref actions. I was a bit aggressive with the consolidation, so let me know if you'd like to keep something expanded.
NOTE:
refresh=Truewhen callingget_repo_config?