Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
spack_tuda
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Inghirami, Gabriele
spack_tuda
Commits
97d66b63
Unverified
Commit
97d66b63
authored
5 months ago
by
Harmen Stoppels
Committed by
GitHub
5 months ago
Browse files
Options
Downloads
Patches
Plain Diff
Fix tests modifying package.py files (#49093)
parent
92e18076
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
lib/spack/spack/cmd/checksum.py
+32
-38
32 additions, 38 deletions
lib/spack/spack/cmd/checksum.py
lib/spack/spack/test/cmd/checksum.py
+63
-9
63 additions, 9 deletions
lib/spack/spack/test/cmd/checksum.py
lib/spack/spack/test/repo.py
+14
-5
14 additions, 5 deletions
lib/spack/spack/test/repo.py
with
109 additions
and
52 deletions
lib/spack/spack/cmd/checksum.py
+
32
−
38
View file @
97d66b63
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
import
re
import
re
import
sys
import
sys
from
typing
import
Dict
,
Optional
from
typing
import
Dict
,
Optional
,
Tuple
import
llnl.string
import
llnl.string
import
llnl.util.lang
import
llnl.util.lang
...
@@ -181,7 +181,11 @@ def checksum(parser, args):
...
@@ -181,7 +181,11 @@ def checksum(parser, args):
print
()
print
()
if
args
.
add_to_package
:
if
args
.
add_to_package
:
add_versions_to_package
(
pkg
,
version_lines
,
args
.
batch
)
path
=
spack
.
repo
.
PATH
.
filename_for_package_name
(
pkg
.
name
)
num_versions_added
=
add_versions_to_pkg
(
path
,
version_lines
)
tty
.
msg
(
f
"
Added
{
num_versions_added
}
new versions to
{
pkg
.
name
}
in
{
path
}
"
)
if
not
args
.
batch
and
sys
.
stdin
.
isatty
():
editor
(
path
)
def
print_checksum_status
(
pkg
:
PackageBase
,
version_hashes
:
dict
):
def
print_checksum_status
(
pkg
:
PackageBase
,
version_hashes
:
dict
):
...
@@ -227,20 +231,9 @@ def print_checksum_status(pkg: PackageBase, version_hashes: dict):
...
@@ -227,20 +231,9 @@ def print_checksum_status(pkg: PackageBase, version_hashes: dict):
tty
.
die
(
"
Invalid checksums found.
"
)
tty
.
die
(
"
Invalid checksums found.
"
)
def
add_versions_to_package
(
pkg
:
PackageBase
,
version_lines
:
str
,
is_batch
:
bool
):
def
_update_version_statements
(
package_src
:
str
,
version_lines
:
str
)
->
Tuple
[
int
,
str
]:
"""
"""
Returns a tuple of number of versions added and the package
'
s modified contents.
"""
Add checksumed versions to a package
'
s instructions and open a user
'
s
editor so they may double check the work of the function.
Args:
pkg (spack.package_base.PackageBase): A package class for a given package in Spack.
version_lines (str): A string of rendered version lines.
"""
# Get filename and path for package
filename
=
spack
.
repo
.
PATH
.
filename_for_package_name
(
pkg
.
name
)
num_versions_added
=
0
num_versions_added
=
0
version_statement_re
=
re
.
compile
(
r
"
([\t ]+version\([^\)]*\))
"
)
version_statement_re
=
re
.
compile
(
r
"
([\t ]+version\([^\)]*\))
"
)
version_re
=
re
.
compile
(
r
'
[\t ]+version\(\s*
"
([^
"
]+)
"
[^\)]*\)
'
)
version_re
=
re
.
compile
(
r
'
[\t ]+version\(\s*
"
([^
"
]+)
"
[^\)]*\)
'
)
...
@@ -252,9 +245,7 @@ def add_versions_to_package(pkg: PackageBase, version_lines: str, is_batch: bool
...
@@ -252,9 +245,7 @@ def add_versions_to_package(pkg: PackageBase, version_lines: str, is_batch: bool
if
match
:
if
match
:
new_versions
.
append
((
Version
(
match
.
group
(
1
)),
ver_line
))
new_versions
.
append
((
Version
(
match
.
group
(
1
)),
ver_line
))
with
open
(
filename
,
"
r+
"
,
encoding
=
"
utf-8
"
)
as
f
:
split_contents
=
version_statement_re
.
split
(
package_src
)
contents
=
f
.
read
()
split_contents
=
version_statement_re
.
split
(
contents
)
for
i
,
subsection
in
enumerate
(
split_contents
):
for
i
,
subsection
in
enumerate
(
split_contents
):
# If there are no more versions to add we should exit
# If there are no more versions to add we should exit
...
@@ -273,12 +264,15 @@ def add_versions_to_package(pkg: PackageBase, version_lines: str, is_batch: bool
...
@@ -273,12 +264,15 @@ def add_versions_to_package(pkg: PackageBase, version_lines: str, is_batch: bool
elif
parsed_version
==
new_versions
[
0
][
0
]:
elif
parsed_version
==
new_versions
[
0
][
0
]:
new_versions
.
pop
(
0
)
new_versions
.
pop
(
0
)
# Seek back to the start of the file so we can rewrite the file contents.
return
num_versions_added
,
""
.
join
(
split_contents
)
f
.
seek
(
0
)
f
.
writelines
(
""
.
join
(
split_contents
))
tty
.
msg
(
f
"
Added
{
num_versions_added
}
new versions to
{
pkg
.
name
}
"
)
tty
.
msg
(
f
"
Open
{
filename
}
to review the additions.
"
)
if
sys
.
stdout
.
isatty
()
and
not
is_batch
:
def
add_versions_to_pkg
(
path
:
str
,
version_lines
:
str
)
->
int
:
editor
(
filename
)
"""
Add new versions to a package.py file. Returns the number of versions added.
"""
with
open
(
path
,
"
r
"
,
encoding
=
"
utf-8
"
)
as
f
:
package_src
=
f
.
read
()
num_versions_added
,
package_src
=
_update_version_statements
(
package_src
,
version_lines
)
if
num_versions_added
>
0
:
with
open
(
path
,
"
w
"
,
encoding
=
"
utf-8
"
)
as
f
:
f
.
write
(
package_src
)
return
num_versions_added
This diff is collapsed.
Click to expand it.
lib/spack/spack/test/cmd/checksum.py
+
63
−
9
View file @
97d66b63
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import
argparse
import
argparse
import
pathlib
import
pytest
import
pytest
...
@@ -37,6 +38,10 @@ def get_checksums_for_versions(url_by_version, package_name, **kwargs):
...
@@ -37,6 +38,10 @@ def get_checksums_for_versions(url_by_version, package_name, **kwargs):
def
url_exists
(
url
,
curl
=
None
):
def
url_exists
(
url
,
curl
=
None
):
return
True
return
True
def
add_versions_to_pkg
(
pkg
,
version_lines
,
open_in_editor
):
raise
AssertionError
(
"
Should not be called
"
)
monkeypatch
.
setattr
(
spack
.
cmd
.
checksum
,
"
add_versions_to_pkg
"
,
add_versions_to_pkg
)
monkeypatch
.
setattr
(
monkeypatch
.
setattr
(
spack
.
package_base
.
PackageBase
,
"
fetch_remote_versions
"
,
fetch_remote_versions
spack
.
package_base
.
PackageBase
,
"
fetch_remote_versions
"
,
fetch_remote_versions
)
)
...
@@ -88,7 +93,6 @@ def test_checksum_args(arguments, expected):
...
@@ -88,7 +93,6 @@ def test_checksum_args(arguments, expected):
([
"
--batch
"
,
"
preferred-test
"
],
"
version of preferred-test
"
),
([
"
--batch
"
,
"
preferred-test
"
],
"
version of preferred-test
"
),
([
"
--latest
"
,
"
preferred-test
"
],
"
Found 1 version
"
),
([
"
--latest
"
,
"
preferred-test
"
],
"
Found 1 version
"
),
([
"
--preferred
"
,
"
preferred-test
"
],
"
Found 1 version
"
),
([
"
--preferred
"
,
"
preferred-test
"
],
"
Found 1 version
"
),
([
"
--add-to-package
"
,
"
preferred-test
"
],
"
Added 0 new versions to
"
),
([
"
--verify
"
,
"
preferred-test
"
],
"
Verified 1 of 1
"
),
([
"
--verify
"
,
"
preferred-test
"
],
"
Verified 1 of 1
"
),
([
"
--verify
"
,
"
zlib
"
,
"
1.2.13
"
],
"
1.2.13 [-] No previous checksum
"
),
([
"
--verify
"
,
"
zlib
"
,
"
1.2.13
"
],
"
1.2.13 [-] No previous checksum
"
),
],
],
...
@@ -271,34 +275,35 @@ def test_checksum_interactive_unrecognized_command():
...
@@ -271,34 +275,35 @@ def test_checksum_interactive_unrecognized_command():
assert
interactive_version_filter
(
v
.
copy
(),
input
=
input
)
==
v
assert
interactive_version_filter
(
v
.
copy
(),
input
=
input
)
==
v
def
test_checksum_versions
(
mock_packages
,
can_fetch_versions
):
def
test_checksum_versions
(
mock_packages
,
can_fetch_versions
,
monkeypatch
):
pkg_cls
=
spack
.
repo
.
PATH
.
get_pkg_class
(
"
zlib
"
)
pkg_cls
=
spack
.
repo
.
PATH
.
get_pkg_class
(
"
zlib
"
)
versions
=
[
str
(
v
)
for
v
in
pkg_cls
.
versions
]
versions
=
[
str
(
v
)
for
v
in
pkg_cls
.
versions
]
output
=
spack_checksum
(
"
zlib
"
,
*
versions
)
output
=
spack_checksum
(
"
zlib
"
,
*
versions
)
assert
"
Found 3 versions
"
in
output
assert
"
Found 3 versions
"
in
output
assert
"
version(
"
in
output
assert
"
version(
"
in
output
output
=
spack_checksum
(
"
--add-to-package
"
,
"
zlib
"
,
*
versions
)
assert
"
Found 3 versions
"
in
output
assert
"
Added 0 new versions to
"
in
output
def
test_checksum_missing_version
(
mock_packages
,
cannot_fetch_versions
):
def
test_checksum_missing_version
(
mock_packages
,
cannot_fetch_versions
,
monkeypatch
):
def
add_versions_to_pkg
(
pkg
,
version_lines
,
open_in_editor
):
raise
AssertionError
(
"
Should not be called
"
)
monkeypatch
.
setattr
(
spack
.
cmd
.
checksum
,
"
add_versions_to_pkg
"
,
add_versions_to_pkg
)
output
=
spack_checksum
(
"
preferred-test
"
,
"
99.99.99
"
,
fail_on_error
=
False
)
output
=
spack_checksum
(
"
preferred-test
"
,
"
99.99.99
"
,
fail_on_error
=
False
)
assert
"
Could not find any remote versions
"
in
output
assert
"
Could not find any remote versions
"
in
output
output
=
spack_checksum
(
"
--add-to-package
"
,
"
preferred-test
"
,
"
99.99.99
"
,
fail_on_error
=
False
)
output
=
spack_checksum
(
"
--add-to-package
"
,
"
preferred-test
"
,
"
99.99.99
"
,
fail_on_error
=
False
)
assert
"
Could not find any remote versions
"
in
output
assert
"
Could not find any remote versions
"
in
output
assert
"
Added 1 new versions to
"
not
in
output
def
test_checksum_deprecated_version
(
mock_packages
,
can_fetch_versions
):
def
test_checksum_deprecated_version
(
mock_packages
,
can_fetch_versions
):
def
add_versions_to_pkg
(
pkg
,
version_lines
,
open_in_editor
):
raise
AssertionError
(
"
Should not be called
"
)
output
=
spack_checksum
(
"
deprecated-versions
"
,
"
1.1.0
"
,
fail_on_error
=
False
)
output
=
spack_checksum
(
"
deprecated-versions
"
,
"
1.1.0
"
,
fail_on_error
=
False
)
assert
"
Version 1.1.0 is deprecated
"
in
output
assert
"
Version 1.1.0 is deprecated
"
in
output
output
=
spack_checksum
(
output
=
spack_checksum
(
"
--add-to-package
"
,
"
deprecated-versions
"
,
"
1.1.0
"
,
fail_on_error
=
False
"
--add-to-package
"
,
"
deprecated-versions
"
,
"
1.1.0
"
,
fail_on_error
=
False
)
)
assert
"
Version 1.1.0 is deprecated
"
in
output
assert
"
Version 1.1.0 is deprecated
"
in
output
# TODO alecbcs: broken assertion.
# assert "Added 0 new versions to" not in output
def
test_checksum_url
(
mock_packages
,
config
):
def
test_checksum_url
(
mock_packages
,
config
):
...
@@ -337,3 +342,52 @@ def test_checksum_manual_download_fails(mock_packages, monkeypatch):
...
@@ -337,3 +342,52 @@ def test_checksum_manual_download_fails(mock_packages, monkeypatch):
monkeypatch
.
setattr
(
spack
.
package_base
.
PackageBase
,
"
download_instr
"
,
error
)
monkeypatch
.
setattr
(
spack
.
package_base
.
PackageBase
,
"
download_instr
"
,
error
)
with
pytest
.
raises
(
ManualDownloadRequiredError
,
match
=
error
):
with
pytest
.
raises
(
ManualDownloadRequiredError
,
match
=
error
):
spack_checksum
(
name
,
*
versions
)
spack_checksum
(
name
,
*
versions
)
def
test_upate_package_contents
(
tmp_path
:
pathlib
.
Path
):
"""
Test that the package.py file is updated with the new versions.
"""
pkg_path
=
tmp_path
/
"
package.py
"
pkg_path
.
write_text
(
"""
\
from spack.package import *
class Zlib(Package):
homepage =
"
http://zlib.net
"
url =
"
http://zlib.net/fossils/zlib-1.2.11.tar.gz
"
version(
"
1.2.11
"
, sha256=
"
c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
"
)
version(
"
1.2.8
"
, sha256=
"
36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d
"
)
version(
"
1.2.3
"
, sha256=
"
1795c7d067a43174113fdf03447532f373e1c6c57c08d61d9e4e9be5e244b05e
"
)
variant(
"
pic
"
, default=True, description=
"
test
"
)
def install(self, spec, prefix):
make(
"
install
"
)
"""
)
version_lines
=
"""
\
version(
"
1.2.13
"
, sha256=
"
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
"
)
version(
"
1.2.5
"
, sha256=
"
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
"
)
version(
"
1.2.3
"
, sha256=
"
1795c7d067a43174113fdf03447532f373e1c6c57c08d61d9e4e9be5e244b05e
"
)
"""
# two new versions are added
assert
spack
.
cmd
.
checksum
.
add_versions_to_pkg
(
str
(
pkg_path
),
version_lines
)
==
2
assert
(
pkg_path
.
read_text
()
==
"""
\
from spack.package import *
class Zlib(Package):
homepage =
"
http://zlib.net
"
url =
"
http://zlib.net/fossils/zlib-1.2.11.tar.gz
"
version(
"
1.2.13
"
, sha256=
"
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
"
) # FIXME
version(
"
1.2.11
"
, sha256=
"
c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
"
)
version(
"
1.2.8
"
, sha256=
"
36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d
"
)
version(
"
1.2.5
"
, sha256=
"
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
"
) # FIXME
version(
"
1.2.3
"
, sha256=
"
1795c7d067a43174113fdf03447532f373e1c6c57c08d61d9e4e9be5e244b05e
"
)
variant(
"
pic
"
, default=True, description=
"
test
"
)
def install(self, spec, prefix):
make(
"
install
"
)
"""
)
This diff is collapsed.
Click to expand it.
lib/spack/spack/test/repo.py
+
14
−
5
View file @
97d66b63
...
@@ -65,12 +65,21 @@ def test_repo_unknown_pkg(mutable_mock_repo):
...
@@ -65,12 +65,21 @@ def test_repo_unknown_pkg(mutable_mock_repo):
mutable_mock_repo
.
get_pkg_class
(
"
builtin.mock.nonexistentpackage
"
)
mutable_mock_repo
.
get_pkg_class
(
"
builtin.mock.nonexistentpackage
"
)
@pytest.mark.not_on_windows
(
"
mtime granularity issues on windows
"
)
def
test_repo_last_mtime
(
mock_packages
):
def
test_repo_last_mtime
(
mock_packages
):
latest_mtime
=
max
(
mtime_with_package_py
=
[
os
.
path
.
getmtime
(
p
.
module
.
__file__
)
for
p
in
spack
.
repo
.
PATH
.
all_package_classes
()
(
os
.
path
.
getmtime
(
p
.
module
.
__file__
),
p
.
module
.
__file__
)
for
p
in
spack
.
repo
.
PATH
.
all_package_classes
()
]
repo_mtime
=
spack
.
repo
.
PATH
.
last_mtime
()
max_mtime
,
max_file
=
max
(
mtime_with_package_py
)
if
max_mtime
>
repo_mtime
:
modified_after
=
"
\n
"
.
join
(
f
"
{
path
}
(
{
mtime
}
)
"
for
mtime
,
path
in
mtime_with_package_py
if
mtime
>
repo_mtime
)
)
assert
spack
.
repo
.
PATH
.
last_mtime
()
==
latest_mtime
assert
(
max_mtime
<=
repo_mtime
),
f
"
the following files were modified while running tests:
\n
{
modified_after
}
"
assert
max_mtime
==
repo_mtime
,
f
"
last_mtime incorrect for
{
max_file
}
"
def
test_repo_invisibles
(
mutable_mock_repo
,
extra_repo
):
def
test_repo_invisibles
(
mutable_mock_repo
,
extra_repo
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment