fix(cli): validate --repo filter on gitt issues list (#1061) - #1118
Closed
RUNECTZ33 wants to merge 1 commit into
Closed
fix(cli): validate --repo filter on gitt issues list (#1061)#1118RUNECTZ33 wants to merge 1 commit into
gitt issues list (#1061)#1118RUNECTZ33 wants to merge 1 commit into
Conversation
The `--repo <owner/name>` filter added in entrius#910 compares raw user input directly against `repository_full_name`, so: - malformed inputs like `ownerrepo` or `owner//repo` are silently accepted and quietly match nothing (no error to the user); - whitespace-padded valid inputs like `' entrius/gittensor '` fail to match real entries because the comparison string still contains the surrounding spaces. Fix by reusing the existing `validate_repository(verify_exists=False)` helper before any contract read, normalizing `repo_filter` to a clean `owner/repo` string and surfacing `click.BadParameter` through the existing `handle_exception` path so JSON consumers get a structured `bad_parameter` error and human callers exit non-zero. This is the same validator already used by `gitt issues register/cancel` mutating commands, so the read-side `--repo` filter now matches the documented contract enforced everywhere else. ## Tests - Malformed filters (`ownerrepo`, `owner//repo`, `owner/`, `/repo`, `owner repo`) rejected with structured `bad_parameter` error in JSON mode and non-zero exit in human mode, before any contract read. - Whitespace-padded valid filter `' owner/repo '` correctly matches the contract entry and returns the issue. - Mixed-case filter `OWNER/REPO` still matches (preserves existing case-insensitive behavior). - Valid non-matching filter returns empty list rather than all issues. Closes entrius#1061
Collaborator
|
the issue was close as not completed, we are not pursuing it |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1061. Reopened from PR #1113 — that one targeted `main` instead of `test` and was closed (CONTRIBUTING.md says branches should target `test`). This is the same diff, rebased onto current upstream/test (`9b620da`), tests adjusted for the test-branch's network-header-in-JSON-mode behavior.
Problem
`--repo <owner/name>` on `gitt issues list` (added in #910) compares raw user input directly against `repository_full_name`:
```python
issues = [
i for i in issues
if i.get('repository_full_name', '').lower() == repo_filter.lower()
]
```
So:
Fix
Reuse the existing `validate_repository(verify_exists=False)` helper before any contract read. It already:
Surface that exception through the existing `handle_exception` path so JSON consumers get a structured `bad_parameter` error and human callers exit non-zero — same shape used by `--id` validation a few lines above.
The same validator is already used by mutating commands (`gitt issues register/cancel` in `mutations.py`), so the read-side `--repo` filter now matches the documented contract enforced everywhere else in the CLI.
Tests added
6 new tests in `tests/cli/test_issues_list_json.py`:
Tests use a small `_parse_json_payload(output)` helper that slices from the first `{` so they're robust whether `print_network_header` writes to stdout in JSON mode (current test branch) or not.
All 19 tests in the file pass; `read_issues_from_contract` is asserted not-called for invalid input so we never burn a contract read on bad parameters.
Diff size