snapcraft help fails on many commands
Metadata
Current evaluation
Fixed a crash in snapcraft help caused by missing help text for certain arguments, triggering an IndexError in craft_cli. Resolved in PR #5178 and released in snapcraft 8.5.1.
Suggested action: —
No scores available.
Issue body
### Bug Description
On some commands such as promote, validate, revisions... you get error output when trying to do `snapcraft help <command>` or `snapcraft <command> -h`
### To Reproduce
run `snapcraft help <command>` with one of the above mentioned commands, and possibly others.
### Environment
Ubuntu, snapcraft 8.5.0
### snapcraft.yaml
```yaml
n/a
```
### Relevant log output
```shell
Internal error while loading snapcraft: IndexError('list index out of range')
Full execution log: '/home/plars/.local/state/snapcraft/log/snapcraft-20241206-152815.612091.log'
Traceback (most recent call last):
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/application.py", line 502, in _get_dispatcher
global_args = dispatcher.pre_parse_args(sys.argv[1:], app_config)
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 476, in pre_parse_args
help_text = self._get_requested_help(cmd_args, app_config)
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/dispatcher.py", line 358, in _get_requested_help
return self._help_builder.get_command_help(command, command_options, output_format)
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/helptexts.py", line 468, in get_command_help
textblocks = builder(command, usage, parameters, options, other_command_names)
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/helptexts.py", line 337, in _build_plain_command_help
positional_args_lines.extend(_build_item_plain(title, text, max_title_len))
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/helptexts.py", line 71, in _build_item_plain
first = f" {title:>{title_space}s}: {wrapped_lines[0]}"
IndexError: list index out of range
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/application.py", line 663, in run
return_code = self._run_inner()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/snapcraft/application.py", line 202, in _run_inner
return_code = super()._run_inner()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/application.py", line 610, in _run_inner
dispatcher = self._get_dispatcher()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/snapcraft/application.py", line 431, in _get_dispatcher
return super()._get_dispatcher()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/application.py", line 525, in _get_dispatcher
if self.services.config.get("debug"):
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/service_factory.py", line 125, in __getattr__
instance.setup()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/config.py", line 163, in setup
super().setup()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/base.py", line 45, in setup
emit.debug(f"Setting up {self.__class__.__name__}")
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/messages.py", line 417, in func
raise RuntimeError("Emitter is stopped already")
RuntimeError: Emitter is stopped already
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/snap/snapcraft/13008/bin/snapcraft", line 8, in <module>
sys.exit(main())
File "/snap/snapcraft/13008/lib/python3.10/site-packages/snapcraft/application.py", line 482, in main
return app.run()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/application.py", line 693, in run
if self.services.config.get("debug"):
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/service_factory.py", line 125, in __getattr__
instance.setup()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/config.py", line 163, in setup
super().setup()
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_application/services/base.py", line 45, in setup
emit.debug(f"Setting up {self.__class__.__name__}")
File "/snap/snapcraft/13008/lib/python3.10/site-packages/craft_cli/messages.py", line 417, in func
raise RuntimeError("Emitter is stopped already")
RuntimeError: Emitter is stopped already
```
### Additional context
_No response_
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b | — | — | Fixed a crash in snapcraft help caused by missing help text for certain arguments, triggering an IndexError in craft_cli. Resolved in PR #5178 and released in snapcraft 8.5.1. | |
| qwen/qwen3.6-35b-a3b | — | — | Fixed in PR #5178 and released in snapcraft 8.5.1. The help command crashed with an IndexError on arguments lacking help text. Adding the missing descriptions resolved the crash. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Fixed a crash in snapcraft help caused by missing help text for certain arguments, triggering an IndexError. Resolved in PR #5178 and released in snapcraft 8.5.1. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Fixed in PR #5178 and released in snapcraft 8.5.1. The help command crashed with an IndexError on commands like promote and validate due to missing argument descriptions. The fix adds the required help text to resolve the crash. |
Update history
No update history recorded yet.
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1698116 snapcraft help claims to have help for topics, but doesn't | snapcraft (launchpad) | closed | Closed. The CLI error message for snapcraft help without arguments was updated to list available topics, resolving the discovery confusion. | |
| #1510954 Help crashes if specified plugin does not exist | snapcraft (launchpad) | closed | Fixed an UnboundLocalError crash when running snapcraft help with a non-existent plugin. Resolved by properly handling missing module references in help.py. | |
| #1845 cli: implement help <command> | snapcraft | merged | Implemented snapcraft help <command> CLI functionality. Merged after passing CI checks and receiving reviewer approval. Closes issue #1699. | |
| #13 Help crashes if specified plugin does not exist | snapcraft | closed | Fixed an UnboundLocalError crash in snapcraft help when requesting help for a non-existent plugin. The maintainer confirmed the traceback is resolved and closed the issue. |