summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/cmd/license.py35
-rw-r--r--lib/spack/spack/test/cmd/license.py11
2 files changed, 36 insertions, 10 deletions
diff --git a/lib/spack/spack/cmd/license.py b/lib/spack/spack/cmd/license.py
index a554a7180b..48950ce3c0 100644
--- a/lib/spack/spack/cmd/license.py
+++ b/lib/spack/spack/cmd/license.py
@@ -41,6 +41,9 @@ licensed_files = [
r'^lib/spack/llnl/.*\.py$',
r'^lib/spack/env/cc$',
+ # special case this test data file, which has a license header
+ r'^lib/spack/spack/test/data/style/broken.dummy',
+
# rst files in documentation
r'^lib/spack/docs/(?!command_index|spack|llnl).*\.rst$',
r'^lib/spack/docs/.*\.py$',
@@ -62,7 +65,7 @@ licensed_files = [
r'^.github/actions/.*\.py$',
# all packages
- r'^var/spack/repos/.*/package.py$'
+ r'^var/spack/repos/.*/package.py$',
]
#: licensed files that can have LGPL language in them
@@ -101,7 +104,18 @@ def list_files(args):
# bool(value) evaluates to True
OLD_LICENSE, SPDX_MISMATCH, GENERAL_MISMATCH = range(1, 4)
-strict_date = r'Copyright 2013-2021'
+#: Latest year that copyright applies. UPDATE THIS when bumping copyright.
+latest_year = 2021
+strict_date = r'Copyright 2013-%s' % latest_year
+
+#: regexes for valid license lines at tops of files
+license_line_regexes = [
+ r'Copyright 2013-(%d|%d) Lawrence Livermore National Security, LLC and other' % (
+ latest_year - 1, latest_year # allow a little leeway: current or last year
+ ),
+ r'Spack Project Developers\. See the top-level COPYRIGHT file for details.',
+ r'SPDX-License-Identifier: \(Apache-2\.0 OR MIT\)'
+]
class LicenseError(object):
@@ -127,19 +141,14 @@ class LicenseError(object):
def _check_license(lines, path):
- license_lines = [
- r'Copyright 2013-(?:202[01]) Lawrence Livermore National Security, LLC and other', # noqa: E501
- r'Spack Project Developers\. See the top-level COPYRIGHT file for details.', # noqa: E501
- r'SPDX-License-Identifier: \(Apache-2\.0 OR MIT\)'
- ]
found = []
for line in lines:
line = re.sub(r'^[\s#\%\.]*', '', line)
line = line.rstrip()
- for i, license_line in enumerate(license_lines):
- if re.match(license_line, line):
+ for i, line_regex in enumerate(license_line_regexes):
+ if re.match(line_regex, line):
# The first line of the license contains the copyright date.
# We allow it to be out of date but print a warning if it is
# out of date.
@@ -148,7 +157,7 @@ def _check_license(lines, path):
tty.debug('{0}: copyright date mismatch'.format(path))
found.append(i)
- if len(found) == len(license_lines) and found == list(sorted(found)):
+ if len(found) == len(license_line_regexes) and found == list(sorted(found)):
return
def old_license(line, path):
@@ -210,6 +219,12 @@ def update_copyright_year(args):
os.path.join(args.root, filename)
)
+ # also update MIT license file at root. Don't use llns_and_other; it uses
+ # a shortened version of that for better github detection.
+ mit_date = strict_date.replace("Copyright", "Copyright (c)")
+ mit_file = os.path.join(args.root, "LICENSE-MIT")
+ fs.filter_file(r"Copyright \(c\) \d{4}-\d{4}", mit_date, mit_file)
+
def setup_parser(subparser):
subparser.add_argument(
diff --git a/lib/spack/spack/test/cmd/license.py b/lib/spack/spack/test/cmd/license.py
index 77207bbe6c..9788105d37 100644
--- a/lib/spack/spack/test/cmd/license.py
+++ b/lib/spack/spack/test/cmd/license.py
@@ -85,6 +85,14 @@ def test_update_copyright_year(tmpdir):
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
""" % year)
+ # add an old MIT license at top level
+ mit_file = os.path.join(spack.paths.prefix, "LICENSE-MIT")
+ test_mit_file = str(tmpdir.join("LICENSE-MIT"))
+ with open(mit_file) as real:
+ with open(test_mit_file, "w") as dummy:
+ old_copyright = re.sub(r"\d{4}-\d{4}", "2018-2019", real.read())
+ dummy.write(old_copyright)
+
license('--root', str(tmpdir), 'update-copyright-year')
for year in years:
@@ -92,3 +100,6 @@ def test_update_copyright_year(tmpdir):
first_line = outdated.open().read().split("\n")[0]
assert str(year) not in first_line
assert spack.cmd.license.strict_date in first_line
+
+ mit_date = spack.cmd.license.strict_date.replace("Copyright", "Copyright (c)")
+ assert mit_date in open(test_mit_file).read()