Skip to content

stestr run doesn't handle an empty .stestr dir #266

@mtreinish

Description

@mtreinish

Issue description

When you run stestr run and there is an empty .stestr/ directory in the run dir this raises an unhandled exception. This is because stestr run only checks for that the repository path exists not that it's a valid repository. For example:

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 54, in open

    stream = open(os.path.join(base, 'format'), 'rt')

FileNotFoundError: [Errno 2] No such file or directory: '/home/travis/build/mtreinish/aqua/.stestr/format'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 348, in run_command

    repo = util.get_repo_open(repo_type, repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/util.py", line 47, in get_repo_open

    return repo_module.RepositoryFactory().open(repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 57, in open

    raise repository.RepositoryNotFound(url)

stestr.repository.abstract.RepositoryNotFound: No repository found in /home/travis/build/mtreinish/aqua. Create one by running "stestr init".

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/cliff/app.py", line 401, in run_subcommand

    result = cmd.run(parsed_args)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/cliff/command.py", line 185, in run

    return_code = self.take_action(parsed_args) or 0

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 235, in take_action

    all_attachments=all_attachments)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 357, in run_command

    repo = util.get_repo_initialise(repo_type, repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/util.py", line 68, in get_repo_initialise

    return repo_module.RepositoryFactory().initialise(repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 43, in initialise

    os.mkdir(base)

FileExistsError: [Errno 17] File exists: '/home/travis/build/mtreinish/aqua/.stestr'

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 54, in open

    stream = open(os.path.join(base, 'format'), 'rt')

FileNotFoundError: [Errno 2] No such file or directory: '/home/travis/build/mtreinish/aqua/.stestr/format'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 348, in run_command

    repo = util.get_repo_open(repo_type, repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/util.py", line 47, in get_repo_open

    return repo_module.RepositoryFactory().open(repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 57, in open

stestr.repository.abstract.RepositoryNotFound: No repository found in /home/travis/build/mtreinish/aqua. Create one by running "stestr init".

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "/home/travis/virtualenv/python3.6.7/bin/stestr", line 10, in <module>

    sys.exit(main())

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/cli.py", line 118, in main

    return cli.run(argv)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/cliff/app.py", line 281, in run

    result = self.run_subcommand(remainder)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/cliff/app.py", line 401, in run_subcommand

    result = cmd.run(parsed_args)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/cliff/command.py", line 185, in run

    return_code = self.take_action(parsed_args) or 0

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 235, in take_action

    all_attachments=all_attachments)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/commands/run.py", line 357, in run_command

    repo = util.get_repo_initialise(repo_type, repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/util.py", line 68, in get_repo_initialise

    return repo_module.RepositoryFactory().initialise(repo_url)

  File "/home/travis/virtualenv/python3.6.7/lib/python3.6/site-packages/stestr/repository/file.py", line 43, in initialise

    os.mkdir(base)

FileExistsError: [Errno 17] File exists: '/home/travis/build/mtreinish/aqua/.stestr'

Expected behavior and actual behavior

The expected behavior is debatable, but we either should return an error like stestr init does if a .stestr dir exists or try to initialize a new repo in the directory if it's empty.

Steps to reproduce the problem

rm -rf .stestr && mkdir .stestr && stestr run

Specifications like the version of the project, operating system, or hardware

System information

stestr version (stestr --version): 2.5.0 (and master)

Python release (python --version): any

pip packages (pip freeze): N/A

Additional information

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions