Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,10 @@ def scm_config():
.hg = setuptools_scm.hg:parse
.git = setuptools_scm.git:parse

# those are left here for backward compatibility in the 1.x series
.hg_archival.txt = setuptools_scm.hg:parse_archival
PKG-INFO = setuptools_scm.hacks:parse_pkginfo

[setuptools_scm.parse_scm_fallback]
.hg_archival.txt = setuptools_scm.hg:parse_archival
PKG-INFO = setuptools_scm.hacks:parse_pkginfo
pip-egg-info = setuptools_scm.hacks:parse_pip_egg_info

[setuptools_scm.files_command]
.hg = setuptools_scm.hg:FILES_COMMAND
Expand Down
3 changes: 2 additions & 1 deletion setuptools_scm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ def _do_parse(root, parse):
root, 'setuptools_scm.parse_scm_fallback')
else:
# include fallbacks after dropping them from the main entrypoint
version = version_from_scm(root)
version = version_from_scm(root) or _version_from_entrypoint(
root, 'setuptools_scm.parse_scm_fallback')

if version:
return version
Expand Down
11 changes: 11 additions & 0 deletions setuptools_scm/hacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,14 @@ def parse_pkginfo(root):
version = data.get('Version')
if version != 'UNKNOWN':
return meta(version)


def parse_pip_egg_info(root):
pipdir = os.path.join(root, 'pip-egg-info')
if not os.path.isdir(pipdir):
return
items = os.listdir(pipdir)
trace('pip-egg-info', pipdir, items)
if not items:
return
return parse_pkginfo(os.path.join(pipdir, items[0]))
4 changes: 3 additions & 1 deletion setuptools_scm/integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ def version_keyword(dist, keyword, value):
value = {}
if getattr(value, '__call__', None):
value = value()
if os.path.exists('PKG-INFO'):
# this piece of code is a hack to counter the mistake in root finding
ep = find_matching_entrypoint('.', 'setuptools_scm.parse_scm_fallback')
if ep is not None:
value.pop('root', None)
dist.metadata.version = get_version(**value)

Expand Down
1 change: 1 addition & 0 deletions setuptools_scm/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def callable_or_entrypoint(group, callable_or_name):
trace('ep', (group, callable_or_name))
if isinstance(callable_or_name, str):
for ep in iter_entry_points(group, callable_or_name):
trace("ep found:", ep.name)
return ep.load()
else:
return callable_or_name
Expand Down
8 changes: 8 additions & 0 deletions testing/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ def version(self):
return version


@pytest.yield_fixture(autouse=True)
def debug_mode():
from setuptools_scm import utils
utils.DEBUG = True
yield
utils.DEBUG = False


@pytest.fixture
def wd(tmpdir):
return Wd(tmpdir.ensure('wd', dir=True))
21 changes: 20 additions & 1 deletion testing/test_regressions.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import sys

import pytest
from setuptools_scm import get_version
from setuptools_scm.git import parse
from setuptools_scm.utils import do_ex, do

import pytest


def test_pkginfo_noscmroot(tmpdir, monkeypatch):
"""if we are indeed a sdist, the root does not apply"""
Expand All @@ -29,6 +31,23 @@ def test_pkginfo_noscmroot(tmpdir, monkeypatch):
assert res == '1.0'


def test_pip_egg_info(tmpdir, monkeypatch):
"""if we are indeed a sdist, the root does not apply"""

# we should get the version from pkg-info if git is broken
p = tmpdir.ensure('sub/package', dir=1)
tmpdir.mkdir('.git')
p.join('setup.py').write(
'from setuptools import setup;'
'setup(use_scm_version={"root": ".."})')

with pytest.raises(LookupError):
get_version(root=p.strpath)

p.ensure('pip-egg-info/random.egg-info/PKG-INFO').write('Version: 1.0')
assert get_version(root=p.strpath) == '1.0'


def test_use_scm_version_callable(tmpdir, monkeypatch):
"""use of callable as use_scm_version argument"""
monkeypatch.delenv("SETUPTOOLS_SCM_DEBUG")
Expand Down