Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
setuptools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
setuptools
Commits
ef457b2e
Commit
ef457b2e
authored
Jan 16, 2021
by
Jason R. Coombs
Committed by
GitHub
Jan 16, 2021
1
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2533 from pypa/fix/2529
Fix/2529
parents
d2b1f7eb
ed07f8b1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
38 deletions
+57
-38
changelog.d/2529.change.rst
changelog.d/2529.change.rst
+1
-0
setuptools/command/egg_info.py
setuptools/command/egg_info.py
+6
-4
setuptools/tests/test_egg_info.py
setuptools/tests/test_egg_info.py
+50
-34
No files found.
changelog.d/2529.change.rst
0 → 100644
View file @
ef457b2e
Fixed an issue where version tags may be added multiple times
setuptools/command/egg_info.py
View file @
ef457b2e
...
...
@@ -130,10 +130,12 @@ class InfoCommon:
egg_info may be called more than once for a distribution,
in which case the version string already contains all tags.
"""
return (
version if self.vtags and version.endswith(self.vtags)
else version + self.vtags
)
# Remove the tags if they exist. The tags maybe have been normalized
# (e.g. turning .dev into .dev0) so we can'
t
just
compare
strings
base_version
=
parse_version
(
version
).
base_version
# Add the tags
return
base_version
+
self
.
vtags
def
tags
(
self
):
version
=
''
...
...
setuptools/tests/test_egg_info.py
View file @
ef457b2e
...
...
@@ -6,6 +6,7 @@ import re
import
stat
import
time
from
setuptools.build_meta
import
prepare_metadata_for_build_wheel
from
setuptools.command.egg_info
import
(
egg_info
,
manifest_maker
,
EggInfoDeprecationWarning
,
get_pkg_info_revision
,
)
...
...
@@ -19,6 +20,26 @@ from .textwrap import DALS
from
.
import
contexts
def
_run_egg_info_command
(
tmpdir_cwd
,
env
,
cmd
=
None
,
output
=
None
):
environ
=
os
.
environ
.
copy
().
update
(
HOME
=
env
.
paths
[
'home'
],
)
if
cmd
is
None
:
cmd
=
[
'egg_info'
,
]
code
,
data
=
environment
.
run_setup_py
(
cmd
=
cmd
,
pypath
=
os
.
pathsep
.
join
([
env
.
paths
[
'lib'
],
str
(
tmpdir_cwd
)]),
data_stream
=
1
,
env
=
environ
,
)
assert
not
code
,
data
if
output
:
assert
output
in
data
class
Environment
(
str
):
pass
...
...
@@ -132,7 +153,7 @@ class TestEggInfo:
def
test_expected_files_produced
(
self
,
tmpdir_cwd
,
env
):
self
.
_create_project
()
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
actual
=
os
.
listdir
(
'foo.egg-info'
)
expected
=
[
...
...
@@ -166,7 +187,7 @@ class TestEggInfo:
# currently configured to use a subprocess, the actual traceback
# object is lost and we need to parse it from stderr
with
pytest
.
raises
(
AssertionError
)
as
exc
:
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
# Hopefully this is not too fragile: the only argument to the
# assertion error should be a traceback, ending with:
...
...
@@ -180,13 +201,13 @@ class TestEggInfo:
"""Ensure timestamps are updated when the command is re-run."""
self
.
_create_project
()
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
timestamp_a
=
os
.
path
.
getmtime
(
'foo.egg-info'
)
# arbitrary sleep just to handle *really* fast systems
time
.
sleep
(.
001
)
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
timestamp_b
=
os
.
path
.
getmtime
(
'foo.egg-info'
)
assert
timestamp_a
!=
timestamp_b
...
...
@@ -201,7 +222,7 @@ class TestEggInfo:
'usage.rst'
:
"Run 'hi'"
,
}
})
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
egg_info_dir
=
os
.
path
.
join
(
'.'
,
'foo.egg-info'
)
sources_txt
=
os
.
path
.
join
(
egg_info_dir
,
'SOURCES.txt'
)
with
open
(
sources_txt
)
as
f
:
...
...
@@ -441,7 +462,7 @@ class TestEggInfo:
self
,
tmpdir_cwd
,
env
,
requires
,
use_setup_cfg
,
expected_requires
,
install_cmd_kwargs
):
self
.
_setup_script_with_requires
(
requires
,
use_setup_cfg
)
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
,
**
install_cmd_kwargs
)
_run_egg_info_command
(
tmpdir_cwd
,
env
,
**
install_cmd_kwargs
)
egg_info_dir
=
os
.
path
.
join
(
'.'
,
'foo.egg-info'
)
requires_txt
=
os
.
path
.
join
(
egg_info_dir
,
'requires.txt'
)
if
os
.
path
.
exists
(
requires_txt
):
...
...
@@ -461,14 +482,14 @@ class TestEggInfo:
req
=
'install_requires={"fake-factory==0.5.2", "pytz"}'
self
.
_setup_script_with_requires
(
req
)
with
pytest
.
raises
(
AssertionError
):
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
def
test_extras_require_with_invalid_marker
(
self
,
tmpdir_cwd
,
env
):
tmpl
=
'extras_require={{":{marker}": ["barbazquux"]}},'
req
=
tmpl
.
format
(
marker
=
self
.
invalid_marker
)
self
.
_setup_script_with_requires
(
req
)
with
pytest
.
raises
(
AssertionError
):
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
assert
glob
.
glob
(
os
.
path
.
join
(
env
.
paths
[
'lib'
],
'barbazquux*'
))
==
[]
def
test_extras_require_with_invalid_marker_in_req
(
self
,
tmpdir_cwd
,
env
):
...
...
@@ -476,7 +497,7 @@ class TestEggInfo:
req
=
tmpl
.
format
(
marker
=
self
.
invalid_marker
)
self
.
_setup_script_with_requires
(
req
)
with
pytest
.
raises
(
AssertionError
):
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
_run_egg_info_command
(
tmpdir_cwd
,
env
)
assert
glob
.
glob
(
os
.
path
.
join
(
env
.
paths
[
'lib'
],
'barbazquux*'
))
==
[]
def
test_provides_extra
(
self
,
tmpdir_cwd
,
env
):
...
...
@@ -865,26 +886,22 @@ class TestEggInfo:
sources
=
f
.
read
().
split
(
'
\
n
'
)
assert
'setup.py'
in
sources
def
_run_egg_info_command
(
self
,
tmpdir_cwd
,
env
,
cmd
=
None
,
output
=
None
):
environ
=
os
.
environ
.
copy
().
update
(
HOME
=
env
.
paths
[
'home'
],
)
if
cmd
is
None
:
cmd
=
[
'egg_info'
,
]
code
,
data
=
environment
.
run_setup_py
(
cmd
=
cmd
,
pypath
=
os
.
pathsep
.
join
([
env
.
paths
[
'lib'
],
str
(
tmpdir_cwd
)]),
data_stream
=
1
,
env
=
environ
,
)
assert
not
code
,
data
if
output
:
assert
output
in
data
def
test_egg_info_tag_only_once
(
self
,
tmpdir_cwd
,
env
):
@
pytest
.
mark
.
parametrize
(
(
'make_metadata_path'
,
'run_command'
),
[
(
lambda
env
:
os
.
path
.
join
(
'.'
,
'foo.egg-info'
,
'PKG-INFO'
),
lambda
tmpdir_cwd
,
env
:
_run_egg_info_command
(
tmpdir_cwd
,
env
)
),
(
lambda
env
:
os
.
path
.
join
(
env
,
'foo.dist-info'
,
'METADATA'
),
lambda
tmpdir_cwd
,
env
:
prepare_metadata_for_build_wheel
(
env
)
)
]
)
def
test_egg_info_tag_only_once
(
self
,
tmpdir_cwd
,
env
,
make_metadata_path
,
run_command
):
self
.
_create_project
()
build_files
({
'setup.cfg'
:
DALS
(
"""
...
...
@@ -894,11 +911,10 @@ class TestEggInfo:
tag_svn_revision = 0
"""
),
})
self
.
_run_egg_info_command
(
tmpdir_cwd
,
env
)
egg_info_dir
=
os
.
path
.
join
(
'.'
,
'foo.egg-info'
)
with
open
(
os
.
path
.
join
(
egg_info_dir
,
'PKG-INFO'
))
as
pkginfo_file
:
pkg_info_lines
=
pkginfo_file
.
read
().
split
(
'
\
n
'
)
assert
'Version: 0.0.0.dev0'
in
pkg_info_lines
run_command
(
tmpdir_cwd
,
env
)
with
open
(
make_metadata_path
(
env
))
as
metadata_file
:
metadata_lines
=
metadata_file
.
read
().
split
(
'
\
n
'
)
assert
'Version: 0.0.0.dev0'
in
metadata_lines
def
test_get_pkg_info_revision_deprecated
(
self
):
pytest
.
warns
(
EggInfoDeprecationWarning
,
get_pkg_info_revision
)
Jérome Perrin
@jerome
mentioned in commit
51562785
·
Feb 17, 2021
mentioned in commit
51562785
mentioned in commit 5156278555fa20234db59f81097bee8cd7b5aaf4
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment