Inconsistent state for Repository#branch_count and Repository#branch_names
<!--IssueSummary start--> <details> <summary> Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards. </summary> - [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=18506) </details> <!--IssueSummary end--> @northrup moved a project from `gitlab-cog/gitlab` to `gitlab-cog/gitlab-admin` and found that the repository appeared empty on the Web UI. When we looked at the state of the project cache, we saw this: ``` irb(main):057:0> proj.repository.branch_count => 0 irb(main):058:0> proj.repository.branch_names => ["master", "pc-try-without-tty", "refactor-runners", "refactor-runners-info", "templates-for-gitlab", "test"] ``` This is clearly an inconsistent state. Because `branch_count` is 0, `Repository#has_visible_content?` returned `false` and showed an empty repo. Pushing to a new branch fixed the issue. How did this happen? My guess is that when the project was moved, the cache was flushed. However, before the move was done, something checked `Repository#has_visible_content?`, and since the repository was no longer there, the value got incorrectly set to 0. It seems to me we may want to do something as the following: 1. Don't cache the `branch_count` if it is 0; or if there is an error with Rugged, don't cache at all 2. Check if the `branch_count` and `branch_names.count` is consistent. If it is not, flag an error and expire something. @DouweM @yorickpeterse Thoughts?
issue