Fix slow tag checking and tree lookups for non-PR registries #457
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
TagBot was experiencing severe performance issues:
_commit_sha_of_tag()was called per-version, resolving every annotated tag via an API call (e.g., 625 API calls for 625 versions)_commit_sha_of_tree(), which iterates O(branches × commits) via API callsSolution
Dict lookup for tag existence: Check
version_tag in tags_cache(O(1)) instead of calling_commit_sha_of_tag()which resolves annotated tagsTree→commit cache: Build a cache using
git log --all --format=%H %Tonce, then do O(1) lookups instead of iterating through commits via APIPerformance Impact
git log+ O(1) lookupsChanges
_commit_sha_of_tag()_build_tree_to_commit_cache()usinggit log --all --format=%H %T_commit_sha_of_tree()implementation with cache-based O(1) lookup