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

adjust relative --commit-msg-filename if in subdir #2459

Merged
merged 1 commit into from Jul 23, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions pre_commit/main.py
Expand Up @@ -155,6 +155,10 @@ def _adjust_args_and_chdir(args: argparse.Namespace) -> None:
args.config = os.path.abspath(args.config)
if args.command in {'run', 'try-repo'}:
args.files = [os.path.abspath(filename) for filename in args.files]
if args.commit_msg_filename is not None:
args.commit_msg_filename = os.path.abspath(
args.commit_msg_filename,
)
if args.command == 'try-repo' and os.path.exists(args.repo):
args.repo = os.path.abspath(args.repo)

Expand All @@ -164,6 +168,10 @@ def _adjust_args_and_chdir(args: argparse.Namespace) -> None:
args.config = os.path.relpath(args.config)
if args.command in {'run', 'try-repo'}:
args.files = [os.path.relpath(filename) for filename in args.files]
if args.commit_msg_filename is not None:
args.commit_msg_filename = os.path.relpath(
args.commit_msg_filename,
)
if args.command == 'try-repo' and os.path.exists(args.repo):
args.repo = os.path.relpath(args.repo)

Expand Down
55 changes: 33 additions & 22 deletions tests/main_test.py
Expand Up @@ -17,6 +17,8 @@
def _args(**kwargs):
kwargs.setdefault('command', 'help')
kwargs.setdefault('config', C.CONFIG_FILE)
if kwargs['command'] in {'run', 'try-repo'}:
kwargs.setdefault('commit_msg_filename', None)
return argparse.Namespace(**kwargs)


Expand All @@ -35,13 +37,24 @@ def test_adjust_args_and_chdir_noop(in_git_dir):

def test_adjust_args_and_chdir_relative_things(in_git_dir):
in_git_dir.join('foo/cfg.yaml').ensure()
in_git_dir.join('foo').chdir()

args = _args(command='run', files=['f1', 'f2'], config='cfg.yaml')
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert args.config == os.path.join('foo', 'cfg.yaml')
assert args.files == [os.path.join('foo', 'f1'), os.path.join('foo', 'f2')]
with in_git_dir.join('foo').as_cwd():
args = _args(command='run', files=['f1', 'f2'], config='cfg.yaml')
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert args.config == os.path.join('foo', 'cfg.yaml')
assert args.files == [
os.path.join('foo', 'f1'),
os.path.join('foo', 'f2'),
]


def test_adjust_args_and_chdir_relative_commit_msg(in_git_dir):
in_git_dir.join('foo/cfg.yaml').ensure()
with in_git_dir.join('foo').as_cwd():
args = _args(command='run', files=[], commit_msg_filename='t.txt')
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert args.commit_msg_filename == os.path.join('foo', 't.txt')


@pytest.mark.skipif(os.name != 'nt', reason='windows feature')
Expand All @@ -56,24 +69,22 @@ def test_install_on_subst(in_git_dir, store): # pragma: posix no cover


def test_adjust_args_and_chdir_non_relative_config(in_git_dir):
in_git_dir.join('foo').ensure_dir().chdir()

args = _args()
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert args.config == C.CONFIG_FILE
with in_git_dir.join('foo').ensure_dir().as_cwd():
args = _args()
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert args.config == C.CONFIG_FILE


def test_adjust_args_try_repo_repo_relative(in_git_dir):
in_git_dir.join('foo').ensure_dir().chdir()

args = _args(command='try-repo', repo='../foo', files=[])
assert args.repo is not None
assert os.path.exists(args.repo)
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert os.path.exists(args.repo)
assert args.repo == 'foo'
with in_git_dir.join('foo').ensure_dir().as_cwd():
args = _args(command='try-repo', repo='../foo', files=[])
assert args.repo is not None
assert os.path.exists(args.repo)
main._adjust_args_and_chdir(args)
assert os.getcwd() == in_git_dir
assert os.path.exists(args.repo)
assert args.repo == 'foo'


FNS = (
Expand Down