diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2020-11-30 00:27:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-30 00:27:58 +0100 |
commit | aecedd5ac260a739dabf17936ba46026d815eba8 (patch) | |
tree | ca3afdbe851be4644dbb3428ba6a398f84a3477d | |
parent | 1cb4c5a43fc39a5098491d03dd5520121250e56d (diff) | |
parent | 549f462a8ddf56d920dbad63636a5fcea53980c1 (diff) | |
download | setuptools-scm-aecedd5ac260a739dabf17936ba46026d815eba8.tar.gz |
Merge pull request #497 from RonnyPfannschmidt/fix-352-ignore-vcs-root
fix #352: add a envvar to ignore scm roots
-rw-r--r-- | CHANGELOG.rst | 1 | ||||
-rw-r--r-- | README.rst | 5 | ||||
-rw-r--r-- | src/setuptools_scm/file_finder.py | 14 | ||||
-rw-r--r-- | src/setuptools_scm/file_finder_git.py | 3 | ||||
-rw-r--r-- | src/setuptools_scm/file_finder_hg.py | 3 | ||||
-rw-r--r-- | testing/test_file_finder.py | 6 |
6 files changed, 30 insertions, 2 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c376a55..34f923e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,7 @@ v4.2.0 ====== +* fix #352: add support for generally ignoring specific vcs roots * fix #471: better error for version bump failing on complex but accepted tag * fix #479: raise indicative error when tags carry non-parsable information * Add `no-guess-dev` which does no next version guessing, just adds `.post1.devN` in @@ -446,6 +446,11 @@ Environment variables derived, otherwise the current time is used (https://reproducible-builds.org/docs/source-date-epoch/) + +:SETUPTOOLS_SCM_IGNORE_VCS_ROOTS: + when defined, a ``os.pathsep`` separated list + of directory names to ignore for root finding + Extending setuptools_scm ------------------------ diff --git a/src/setuptools_scm/file_finder.py b/src/setuptools_scm/file_finder.py index 77ec146..5b85117 100644 --- a/src/setuptools_scm/file_finder.py +++ b/src/setuptools_scm/file_finder.py @@ -1,4 +1,5 @@ import os +from .utils import trace def scm_find_files(path, scm_files, scm_dirs): @@ -53,3 +54,16 @@ def scm_find_files(path, scm_files, scm_dirs): res.append(os.path.join(path, os.path.relpath(fullfilename, realpath))) seen.add(realdirpath) return res + + +def is_toplevel_acceptable(toplevel): + "" + if toplevel is None: + return False + + ignored = os.environ.get("SETUPTOOLS_SCM_IGNORE_VCS_ROOTS", "").split(os.pathsep) + ignored = [os.path.normcase(p) for p in ignored] + + trace(toplevel, ignored) + + return toplevel not in ignored diff --git a/src/setuptools_scm/file_finder_git.py b/src/setuptools_scm/file_finder_git.py index 9aa6245..1d3e69b 100644 --- a/src/setuptools_scm/file_finder_git.py +++ b/src/setuptools_scm/file_finder_git.py @@ -3,6 +3,7 @@ import subprocess import tarfile import logging from .file_finder import scm_find_files +from .file_finder import is_toplevel_acceptable from .utils import trace log = logging.getLogger(__name__) @@ -60,7 +61,7 @@ def _git_ls_files_and_dirs(toplevel): def git_find_files(path=""): toplevel = _git_toplevel(path) - if not toplevel: + if not is_toplevel_acceptable(toplevel): return [] fullpath = os.path.abspath(os.path.normpath(path)) if not fullpath.startswith(toplevel): diff --git a/src/setuptools_scm/file_finder_hg.py b/src/setuptools_scm/file_finder_hg.py index 2aa1e16..816560d 100644 --- a/src/setuptools_scm/file_finder_hg.py +++ b/src/setuptools_scm/file_finder_hg.py @@ -2,6 +2,7 @@ import os import subprocess from .file_finder import scm_find_files +from .file_finder import is_toplevel_acceptable def _hg_toplevel(path): @@ -41,7 +42,7 @@ def _hg_ls_files_and_dirs(toplevel): def hg_find_files(path=""): toplevel = _hg_toplevel(path) - if not toplevel: + if not is_toplevel_acceptable(toplevel): return [] hg_files, hg_dirs = _hg_ls_files_and_dirs(toplevel) return scm_find_files(path, hg_files, hg_dirs) diff --git a/testing/test_file_finder.py b/testing/test_file_finder.py index 463d3d4..55b9cea 100644 --- a/testing/test_file_finder.py +++ b/testing/test_file_finder.py @@ -126,6 +126,12 @@ def test_symlink_file_out_of_git(inwd): assert set(find_files("adir")) == _sep({"adir/filea"}) +@pytest.mark.parametrize("path_add", ["{cwd}", "{cwd}" + os.pathsep + "broken"]) +def test_ignore_root(inwd, monkeypatch, path_add): + monkeypatch.setenv("SETUPTOOLS_SCM_IGNORE_VCS_ROOTS", path_add.format(cwd=inwd.cwd)) + assert find_files() == [] + + def test_empty_root(inwd): subdir = inwd.cwd / "cdir" / "subdir" subdir.mkdir(parents=True) |