From 0b285ba02aaa286559176ea81eeabceae2e983cb Mon Sep 17 00:00:00 2001 From: James Hilliard Date: Fri, 26 Jul 2024 11:17:00 -0600 Subject: [PATCH] Prevent matching bogus parent git directories If our current directory is not tracked by git we should assume that the project does not use git as the vcs as any match will be a false positive. --- flit/vcs/__init__.py | 14 +++++++++++++- tests/test_sdist.py | 4 +++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/flit/vcs/__init__.py b/flit/vcs/__init__.py index a3e92b39..f86a731f 100644 --- a/flit/vcs/__init__.py +++ b/flit/vcs/__init__.py @@ -1,12 +1,24 @@ +import subprocess from pathlib import Path from . import hg from . import git +def git_validate_ignore(directory: Path) -> bool: + check_ignore = subprocess.run( + ['git', 'check-ignore', '.'], + cwd=str(directory), + stderr=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + ).returncode + if check_ignore == 0: + return False + return True + def identify_vcs(directory: Path): directory = directory.resolve() for p in [directory] + list(directory.parents): - if (p / '.git').is_dir(): + if (p / '.git').is_dir() and git_validate_ignore(directory): return git if (p / '.hg').is_dir(): return hg diff --git a/tests/test_sdist.py b/tests/test_sdist.py index 0ddcb82d..ed72cc21 100644 --- a/tests/test_sdist.py +++ b/tests/test_sdist.py @@ -1,6 +1,7 @@ import ast from os.path import join as pjoin from pathlib import Path +from unittest.mock import patch import pytest from shutil import which, copy, copytree import sys @@ -81,7 +82,8 @@ def test_get_files_list_git(copy_sample): builder = sdist.SdistBuilder.from_ini_path(td / 'pyproject.toml') with MockCommand('git', LIST_FILES_GIT): - files = builder.select_files() + with patch('flit.vcs.git_validate_ignore', return_value=True): + files = builder.select_files() assert set(files) == { 'foo', pjoin('dir1', 'bar'), pjoin('dir1', 'subdir', 'qux'),