-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Fix HACS becomes unresponsive after multiple sidepanel name changes #4694
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Co-authored-by: ludeeus <[email protected]>
Co-authored-by: ludeeus <[email protected]>
…lized Co-authored-by: ludeeus <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR ensures HACS remains functional when platform unloading fails by adding null safety and tightening cleanup logic.
- Add null-safety checks in websocket handlers and platform setup functions
- Only clean up the HACS object on successful unload
- Prevent
NoneType
attribute errors after repeated sidepanel renames
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
File | Description |
---|---|
custom_components/hacs/websocket/repositories.py | Added early returns and error messages when HACS is missing |
custom_components/hacs/update.py | Guarded entity setup against uninitialized HACS |
custom_components/hacs/switch.py | Guarded entity setup against uninitialized HACS |
custom_components/hacs/init.py | Wrapped cleanup logic in if unload_ok |
Comments suppressed due to low confidence (3)
custom_components/hacs/init.py:218
- The cleanup calls (
hacs.set_stage
,hacs.disable_hacs
, andhass.data.pop
) are not indented under theif unload_ok:
block, so they always execute even when unload failed. They should be indented to be inside theif unload_ok:
scope.
if unload_ok:
custom_components/hacs/websocket/repositories.py:159
- Typo in docstring: 'repositoriy' should be 'repository'.
"""Add custom repositoriy."""
custom_components/hacs/websocket/repositories.py:224
- Typo in docstring: 'repositoriy' should be 'repository'.
"""Remove custom repositoriy."""
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implement the review comment, and extend the tests to cover these scenarios as well.
… not initialized Co-authored-by: ludeeus <[email protected]>
Added comprehensive test coverage for websocket repository commands when HACS is not initialized. Created |
The problem is deeper. This resolves only one of the issues. The last one, I think, needs to be done in Home Assistant, and if resolved there, this PR is no longer needed. |
Could you clarify what should be fixed in Home Assistant core? Are you referring to the config entry reload mechanism where |
Not yet, I need to investigate more. |
This PR fixes an issue where HACS becomes completely unresponsive after multiple sidepanel name changes, showing "HACS is not setup" errors and a blank interface.
Problem
When users change the HACS sidepanel name multiple times through the Configuration menu, the integration enters a broken state where:
AttributeError: 'NoneType' object has no attribute 'repositories'
Root Cause
The issue occurs during config entry reloads when:
async_unload_entry()
is called to reload the configurationhass.data.pop(DOMAIN, None)
still removes the global HACS objecthacs.repositories
on aNone
objectAttributeError
exceptions that break the frontendSolution
This PR implements minimal, surgical fixes to handle the race condition:
1. Fixed unload logic (
__init__.py
)Only remove the HACS object from
hass.data
if platform unloading succeeds:2. Added null safety to websocket handlers (
websocket/repositories.py
)All 5 websocket functions now gracefully handle missing HACS objects:
3. Protected platform setup functions (
switch.py
,update.py
)Prevent KeyError when HACS is not available:
Impact
Testing
The fix has been verified to:
None
HACS objects gracefully in all websocket handlersFixes #4436.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.