Skip to content
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

completion: fix broken completion generation for zsh #9797

Merged
merged 1 commit into from
Aug 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dvc/commands/commit.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ def add_parser(subparsers, parent_parser):
action="store_true",
default=False,
help=(
"Commit data even if hash values for dependencies or",
"outputs did not change.",
"Commit data even if hash values for dependencies or "
"outputs did not change."
),
)
commit_parser.add_argument(
Expand Down
5 changes: 4 additions & 1 deletion dvc/commands/completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
logger = logging.getLogger(__name__)


SUPPORTED_SHELLS = ["bash", "zsh"]


class CmdCompletion(CmdBaseNoRepo):
def run(self):
import shtab
Expand All @@ -35,6 +38,6 @@ def add_parser(subparsers, parent_parser):
"--shell",
help="Shell syntax for completions.",
default="bash",
choices=["bash", "zsh"],
choices=SUPPORTED_SHELLS,
)
completion_parser.set_defaults(func=CmdCompletion)
17 changes: 17 additions & 0 deletions tests/unit/command/test_completion.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import logging

import pytest

from dvc.cli import main
from dvc.commands.completion import SUPPORTED_SHELLS


@pytest.mark.parametrize("shell", SUPPORTED_SHELLS)
def test_completion(caplog, capsys, shell):
with caplog.at_level(logging.INFO):
assert main(["completion", "-s", shell]) == 0
assert not caplog.text

out, err = capsys.readouterr()
assert not err
assert out
48 changes: 48 additions & 0 deletions tests/unit/command/test_help.py
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import logging
from argparse import SUPPRESS, ArgumentParser
from typing import Tuple

import pytest
import shtab

from dvc.cli import main
from dvc.cli.parser import get_main_parser


def command_tuples():
root: Tuple[str, ...] = ()
commands = [root]

def recurse_parser(parser: ArgumentParser, parents: Tuple[str, ...] = root) -> None:
for positional in parser._get_positional_actions():
if positional.help != SUPPRESS and isinstance(positional.choices, dict):
public_cmds = shtab.get_public_subcommands(positional)
for subcmd, subparser in positional.choices.items():
cmd = (*parents, subcmd)
if subcmd in public_cmds:
commands.append(cmd)
recurse_parser(subparser, cmd)

main_parser = get_main_parser()
recurse_parser(main_parser)
return sorted(commands)


def pytest_generate_tests(metafunc):
def ids(values):
if values:
return "-".join(values)
return "dvc"

metafunc.parametrize("command_tuples", command_tuples(), ids=ids)


def test_help(caplog, capsys, command_tuples):
with caplog.at_level(logging.INFO), pytest.raises(SystemExit) as e:
main([*command_tuples, "--help"])
assert e.value.code == 0
assert not caplog.text

out, err = capsys.readouterr()
assert not err
assert out