summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2020-11-30 00:27:58 +0100
committerGitHub <noreply@github.com>2020-11-30 00:27:58 +0100
commitaecedd5ac260a739dabf17936ba46026d815eba8 (patch)
treeca3afdbe851be4644dbb3428ba6a398f84a3477d
parent1cb4c5a43fc39a5098491d03dd5520121250e56d (diff)
parent549f462a8ddf56d920dbad63636a5fcea53980c1 (diff)
downloadsetuptools-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.rst1
-rw-r--r--README.rst5
-rw-r--r--src/setuptools_scm/file_finder.py14
-rw-r--r--src/setuptools_scm/file_finder_git.py3
-rw-r--r--src/setuptools_scm/file_finder_hg.py3
-rw-r--r--testing/test_file_finder.py6
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
diff --git a/README.rst b/README.rst
index a318332..d4b2453 100644
--- a/README.rst
+++ b/README.rst
@@ -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)