Skip to content

Commit aecedd5

Browse files
Merge pull request #497 from RonnyPfannschmidt/fix-352-ignore-vcs-root
fix #352: add a envvar to ignore scm roots
2 parents 1cb4c5a + 549f462 commit aecedd5

File tree

6 files changed

+30
-2
lines changed

6 files changed

+30
-2
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
v4.2.0
22
======
33

4+
* fix #352: add support for generally ignoring specific vcs roots
45
* fix #471: better error for version bump failing on complex but accepted tag
56
* fix #479: raise indicative error when tags carry non-parsable information
67
* Add `no-guess-dev` which does no next version guessing, just adds `.post1.devN` in

README.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,11 @@ Environment variables
446446
derived, otherwise the current time is used
447447
(https://reproducible-builds.org/docs/source-date-epoch/)
448448

449+
450+
:SETUPTOOLS_SCM_IGNORE_VCS_ROOTS:
451+
when defined, a ``os.pathsep`` separated list
452+
of directory names to ignore for root finding
453+
449454
Extending setuptools_scm
450455
------------------------
451456

src/setuptools_scm/file_finder.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from .utils import trace
23

34

45
def scm_find_files(path, scm_files, scm_dirs):
@@ -53,3 +54,16 @@ def _link_not_in_scm(n):
5354
res.append(os.path.join(path, os.path.relpath(fullfilename, realpath)))
5455
seen.add(realdirpath)
5556
return res
57+
58+
59+
def is_toplevel_acceptable(toplevel):
60+
""
61+
if toplevel is None:
62+
return False
63+
64+
ignored = os.environ.get("SETUPTOOLS_SCM_IGNORE_VCS_ROOTS", "").split(os.pathsep)
65+
ignored = [os.path.normcase(p) for p in ignored]
66+
67+
trace(toplevel, ignored)
68+
69+
return toplevel not in ignored

src/setuptools_scm/file_finder_git.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import tarfile
44
import logging
55
from .file_finder import scm_find_files
6+
from .file_finder import is_toplevel_acceptable
67
from .utils import trace
78

89
log = logging.getLogger(__name__)
@@ -60,7 +61,7 @@ def _git_ls_files_and_dirs(toplevel):
6061

6162
def git_find_files(path=""):
6263
toplevel = _git_toplevel(path)
63-
if not toplevel:
64+
if not is_toplevel_acceptable(toplevel):
6465
return []
6566
fullpath = os.path.abspath(os.path.normpath(path))
6667
if not fullpath.startswith(toplevel):

src/setuptools_scm/file_finder_hg.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import subprocess
33

44
from .file_finder import scm_find_files
5+
from .file_finder import is_toplevel_acceptable
56

67

78
def _hg_toplevel(path):
@@ -41,7 +42,7 @@ def _hg_ls_files_and_dirs(toplevel):
4142

4243
def hg_find_files(path=""):
4344
toplevel = _hg_toplevel(path)
44-
if not toplevel:
45+
if not is_toplevel_acceptable(toplevel):
4546
return []
4647
hg_files, hg_dirs = _hg_ls_files_and_dirs(toplevel)
4748
return scm_find_files(path, hg_files, hg_dirs)

testing/test_file_finder.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ def test_symlink_file_out_of_git(inwd):
126126
assert set(find_files("adir")) == _sep({"adir/filea"})
127127

128128

129+
@pytest.mark.parametrize("path_add", ["{cwd}", "{cwd}" + os.pathsep + "broken"])
130+
def test_ignore_root(inwd, monkeypatch, path_add):
131+
monkeypatch.setenv("SETUPTOOLS_SCM_IGNORE_VCS_ROOTS", path_add.format(cwd=inwd.cwd))
132+
assert find_files() == []
133+
134+
129135
def test_empty_root(inwd):
130136
subdir = inwd.cwd / "cdir" / "subdir"
131137
subdir.mkdir(parents=True)

0 commit comments

Comments
 (0)