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'),