Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update rules with required phrases automatically #3924

Open
wants to merge 82 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
aa9374c
Add script for adding required phrases automatically
AyanSinhaMahapatra Feb 15, 2023
72f290f
Add required phrases automatically for mit rules
AyanSinhaMahapatra Sep 2, 2024
bd14127
Add required phrases at bsd-new rules automatically
AyanSinhaMahapatra Sep 12, 2024
20a7860
Add required phrases automatically for gpl-2.0
AyanSinhaMahapatra Sep 16, 2024
0a44594
Add required phrases for gpl-2.0-only rules automatically
AyanSinhaMahapatra Sep 16, 2024
435255b
Skip creating required phrase rules for generic licenses
AyanSinhaMahapatra Sep 16, 2024
12eaccf
Add required phrases for genreic license rules automtaically
AyanSinhaMahapatra Sep 17, 2024
ece8c33
Add required phrases to gpl-1.0-plus rules automatically
AyanSinhaMahapatra Sep 17, 2024
be94a84
Add required phrases automatically on gpl/lgpl rules
AyanSinhaMahapatra Sep 17, 2024
584b554
Add more required phrases automatically in permissive rules
AyanSinhaMahapatra Sep 18, 2024
c778ce0
Add required phrases automatically to gpl-3.0 rules
AyanSinhaMahapatra Sep 18, 2024
f5e9593
Add required phrases for lgpl rules automatically
AyanSinhaMahapatra Sep 18, 2024
63c23f0
Add required phrases for agpl rules automatically
AyanSinhaMahapatra Sep 18, 2024
40ced0c
Add required phrases to bsd rules automatically
AyanSinhaMahapatra Sep 18, 2024
518116d
Add required phrases in lgpl rules automatically
AyanSinhaMahapatra Sep 18, 2024
3583ac6
Add required phrases automatically for cc rules
AyanSinhaMahapatra Sep 18, 2024
1994095
Improve license detection rules
pombredanne Oct 7, 2024
4d1b8ac
Improve required phrases in paths
pombredanne Oct 7, 2024
ef5101e
Improve required phrases in paths
pombredanne Oct 7, 2024
8e615bb
Improve required phrases in URLs
pombredanne Oct 7, 2024
6831e90
Correct rule syntax
pombredanne Oct 7, 2024
e05ca6f
Move back required-phrase related code
pombredanne Oct 7, 2024
94cffc9
Use correct syntax for rules
pombredanne Oct 7, 2024
62643cb
Apache Software Foundation is not required phrase
pombredanne Oct 7, 2024
7150b82
Remove duplicate imports
pombredanne Oct 7, 2024
83eadec
Improve license models
pombredanne Oct 7, 2024
41be5e2
Apply minor cosmetic refactoring
pombredanne Oct 7, 2024
512de1e
Move tests to test_required_phrase.py
pombredanne Oct 7, 2024
d611f9b
Add misc comments to Token class variants
pombredanne Oct 7, 2024
7d5199a
Refine is_required_phrase license rules
pombredanne Oct 8, 2024
05f7981
Ensure license index is buildable with extras
pombredanne Oct 8, 2024
451fffb
Refactor required phrase spans collection
pombredanne Oct 8, 2024
86d69b6
Refine is_required_phrase AGPL rules
pombredanne Oct 8, 2024
4a49447
Refine is_required_phrase GPL3 rules
pombredanne Oct 8, 2024
7fed520
Refine is_required_phrase GPL rules
pombredanne Oct 8, 2024
4bf01c8
Refine is_required_phrase LGPL rules
pombredanne Oct 8, 2024
a6bbfa7
Refine is_required_phrase Apache rules
pombredanne Oct 8, 2024
9470393
Refine is_required_phrase BSD rules
pombredanne Oct 8, 2024
fd10501
Add new and improved required phrase rules
pombredanne Oct 8, 2024
9cee2cb
Refine rules skipped for required phrase
pombredanne Oct 8, 2024
8e16712
Rename Rule.skip_collecting_required_phrases
pombredanne Oct 8, 2024
1bcf3fc
Update required phrase generation
pombredanne Oct 8, 2024
c99d26a
Make rules valid
pombredanne Oct 8, 2024
28e2ef4
Improve required phrase in rules
pombredanne Oct 8, 2024
3ad7302
Update test results
pombredanne Oct 8, 2024
c275355
Correct rule ignorables
pombredanne Oct 9, 2024
1d1a99c
Set relevance for is_required_phrase rules
pombredanne Oct 9, 2024
4e598bf
Fix duplicate license rules
pombredanne Oct 9, 2024
1d503f4
Adjust rules from required phrase tests
pombredanne Oct 9, 2024
d0b33f8
Improve Apache and commons clause rules
pombredanne Oct 9, 2024
543d47c
Improve imagemagick rules with required phrases
pombredanne Oct 9, 2024
359fa84
Improve rule selectivity
pombredanne Oct 9, 2024
3c0858e
Do not add required phrase to license text
pombredanne Oct 9, 2024
b64794c
Improve license test results
pombredanne Oct 9, 2024
848dab1
Consider license clues in gibberrish filter
pombredanne Oct 11, 2024
4cfaa8a
Use correct dry_run argument name in tests
pombredanne Oct 11, 2024
2607e0d
Update license test expectation
pombredanne Oct 11, 2024
243ba18
Consider clues in false positive filter
pombredanne Oct 11, 2024
10e0181
Fix comment content
pombredanne Oct 11, 2024
f6d7fe6
Add required phrase to MIT rule
pombredanne Oct 11, 2024
2fd0dd7
Improve license test results
pombredanne Oct 11, 2024
f6b7196
Improve license rules and license tests
pombredanne Oct 12, 2024
1802857
Rename new rules to resolve merge conflicts
pombredanne Oct 12, 2024
68c92a2
Merge latest develop
pombredanne Oct 12, 2024
4b41c62
Improve rule ignorables and requried phrases
pombredanne Oct 12, 2024
34d8b4e
Adapt license test expectations
pombredanne Oct 12, 2024
5659d1c
Do not debug trace by default
pombredanne Oct 12, 2024
f4c0c6b
Improve license detection results
pombredanne Oct 12, 2024
fc46065
Refine license detection rules
pombredanne Oct 12, 2024
cb271b8
Improve license detection results
pombredanne Oct 12, 2024
4f15de1
Add new license rule for LGPL
pombredanne Oct 12, 2024
28e871f
Improve GPL detection
pombredanne Oct 13, 2024
46135a4
Improve license detection tests
pombredanne Oct 13, 2024
5635edf
Add new GPL rules
pombredanne Oct 13, 2024
28e1acb
Improve MPL tri-license detection
pombredanne Oct 13, 2024
584e3d6
Add new DCO licenses
pombredanne Oct 13, 2024
160e95b
Add new license detection rules
pombredanne Oct 13, 2024
e5bff98
Improve license detection tests
pombredanne Oct 13, 2024
6eff903
Relax required phrase filtering
pombredanne Oct 13, 2024
e3fc9c9
Correct license test expectation
pombredanne Oct 14, 2024
94a4d35
Correct license rule expression
pombredanne Oct 14, 2024
4718fed
Update expected license test result
pombredanne Oct 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ More (advanced) rules options:
be present in the result license detections. These just have the license text and a
`is_false_positive` flag set to True.

- you can specify key phrases by surrounding one or more words between the `{{`
- you can specify required phrases by surrounding one or more words between the `{{`
and `}}` tags. Key phrases are words that **must** be matched/present in order
for a RULE to be considered a match.

Expand Down
20 changes: 2 additions & 18 deletions etc/scripts/licenses/buildrules.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from licensedcode import models
from licensedcode import match_hash
from licensedcode import frontmatter
from licensedcode.models import get_rule_id_for_text
from license_expression import Licensing

"""
Expand Down Expand Up @@ -130,23 +131,6 @@ def load_data(location="00-new-licenses.txt"):
return rules


def rule_exists(text):
"""
Return the matched rule identifier if the text is an existing rule matched
exactly, False otherwise.
"""
idx = cache.get_index()

matches = idx.match(query_string=text)
if not matches:
return False
if len(matches) > 1:
return False
match = matches[0]
if match.matcher == match_hash.MATCH_HASH and match.score() == 100:
return match.rule.identifier


def all_rule_by_tokens():
"""
Return a mapping of {tuples of tokens: rule id}, with one item for each
Expand Down Expand Up @@ -347,7 +331,7 @@ def cli(licenses_file, dump_to_file_on_errors=False):

text = rule.text

existing_rule = rule_exists(text)
existing_rule = get_rule_id_for_text(text)
skinny_text = " ".join(text[:80].split()).replace("{", " ").replace("}", " ")

existing_msg = (
Expand Down
2 changes: 2 additions & 0 deletions etc/scripts/licenses/report_license_rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@
"is_license_reference",
"is_license_intro",
"is_license_clue",
"is_required_phrase",
"skip_for_required_phrase_generation",
"is_deprecated",
"has_unknown",
"only_known_words",
Expand Down
3 changes: 3 additions & 0 deletions respective.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
This software is (C) by the respective authors, and licensed under the GPL
License.

1 change: 1 addition & 0 deletions setup-mini.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ console_scripts =
scancode-reindex-licenses = licensedcode.reindex:reindex_licenses
scancode-license-data = licensedcode.license_db:dump_scancode_license_data
regen-package-docs = packagedcode.regen_package_docs:regen_package_docs
add-required-phrases = licensedcode.required_phrases:add_required_phrases

# These are configurations for ScanCode plugins as setuptools entry points.
# Each plugin entry hast this form:
Expand Down
2 changes: 2 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ console_scripts =
scancode-reindex-licenses = licensedcode.reindex:reindex_licenses
scancode-license-data = licensedcode.license_db:dump_scancode_license_data
regen-package-docs = packagedcode.regen_package_docs:regen_package_docs
add-required-phrases = licensedcode.required_phrases:add_required_phrases
gen-new-required-phrases-rules = licensedcode.required_phrases:gen_required_phrases_rules

# These are configurations for ScanCode plugins as setuptools entry points.
# Each plugin entry hast this form:
Expand Down
24 changes: 16 additions & 8 deletions src/licensedcode/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import os
import pickle

from shutil import rmtree

from commoncode.fileutils import create_dir
Expand Down Expand Up @@ -185,10 +186,7 @@ def load_or_build(
additional_license_plugins=plugin_directories,
)

# save the cache as pickle new tree checksum
with open(cache_file, 'wb') as fn:
pickle.dump(license_cache, fn, protocol=PICKLE_PROTOCOL)

license_cache.dump(cache_file)
return license_cache

except lockfile.LockTimeout:
Expand All @@ -201,6 +199,13 @@ def has_additional_licenses(self):
if cache.additional_license_directory or cache.additional_license_plugins:
return True

def dump(self, cache_file):
"""
Dump this license cache on disk at ``cache_file``.
"""
with open(cache_file, 'wb') as fn:
pickle.dump(self, fn, protocol=PICKLE_PROTOCOL)


def build_index(
licenses_db=None,
Expand Down Expand Up @@ -235,9 +240,12 @@ def build_index(
if not licenses_db:
# combine the licenses in these additional directories with the licenses in the original DB
additional_license_dirs = get_license_dirs(additional_dirs=additional_directories)
combined_license_directories = [licenses_data_dir] + additional_license_dirs
# generate a single combined license db with all licenses
licenses_db = load_licenses_from_multiple_dirs(license_dirs=combined_license_directories)
licenses_db = load_licenses_from_multiple_dirs(
builtin_license_data_dir=licenses_data_dir,
additional_license_data_dirs=additional_license_dirs,
with_deprecated=False,
)

# if we have additional directories, extract the rules from them
additional_rule_dirs = get_rule_dirs(additional_dirs=additional_directories)
Expand Down Expand Up @@ -393,7 +401,7 @@ def get_cache(
Return a LicenseCache either rebuilt, cached or loaded from disk.

If ``index_all_languages`` is True, include texts in all languages when
building the license index. Otherwise, only include the English license \
building the license index. Otherwise, only include the English license
texts and rules (the default)
"""
return populate_cache(
Expand Down Expand Up @@ -531,7 +539,7 @@ def validate_spdx_license_keys(license_expression, licensing):
if not type(key) == str:
msg = f"Invalid license key: {key} of type {type(key)}, license key should be a string"
messages.append(msg)

lic = license_db.get(key, None)
if not lic:
licenses = load_licenses(with_deprecated=True)
Expand Down
39 changes: 39 additions & 0 deletions src/licensedcode/data/licenses/dco-1.0.LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
key: dco-1.0
short_name: DCO 1.0
name: Developer Certificate of Origin 1.0
category: CLA
owner: Linux Foundation
homepage_url: https://developercertificate.org/
spdx_license_key: LicenseRef-scancode-dco-1.0
text_urls:
- https://developercertificate.org/
other_urls:
- https://github.com/nexB/scancode-toolkit/issues/3038#issuecomment-1317511139
minimum_coverage: 90
---

Developer's Certificate of Origin 1.0

By making a contribution to this project, I certify that:

1. The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file LICENSE; or

2. The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file LICENSE; or

3. The contribution was provided directly to me by some other
person who certified (1), (2) or (3) and I have not modified
it.

4. I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent
51 changes: 51 additions & 0 deletions src/licensedcode/data/licenses/samba-dco-1.0.LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
key: samba-dco-1.0
short_name: Samba Developer's Declaration, Version 1.0
name: Samba Developer's Declaration, Version 1.0
category: CLA
owner: Samba
homepage_url: https://github.com/samba-team/samba/blob/master/README.contributing
spdx_license_key: LicenseRef-scancode-samba-dco-1.0
text_urls:
- https://github.com/samba-team/samba/blob/master/README.contributing
minimum_coverage: 80
ignorable_urls:
- http://www.gnu.org/licenses/gpl-3.0.html
- http://www.gnu.org/licenses/lgpl-3.0.html
---

Samba Developer's Declaration, Version 1.0

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
have the right to submit it under the appropriate
version of the GNU General Public License; or

(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the GNU General Public License, in the
appropriate version; or

(c) The contribution was provided directly to me by some other
person who certified (a) or (b) and I have not modified
it.

(d) I understand and agree that this project and the
contribution are public and that a record of the
contribution (including all metadata and personal
information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed
consistent with the Samba Team's policies and the
requirements of the GNU GPL where they are relevant.

(e) I am granting this work to this project under the terms of both
the GNU General Public License and the GNU Lesser General Public
License as published by the Free Software Foundation; either version
3 of these Licenses, or (at the option of the project) any later
version.

http://www.gnu.org/licenses/gpl-3.0.html
http://www.gnu.org/licenses/lgpl-3.0.html
2 changes: 1 addition & 1 deletion src/licensedcode/data/rules/agpl-3.0-plus_100.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ ignorable_urls:
---

Licensing
This project is free and open-source software and is distributed under the terms of the GNU Affero General Public License v3 or any later version. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at https://www.gnu.org/licenses/agpl-3.0.md. By submitting a contribution to this project you agree and acknowledge that your contribution may be used under the terms of the GNU Affero General Public License v3 or any later version and you are authorized to submit the contribution on behalf of the copyright holder. No part of this project, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file.
This project is free and open-source software and is distributed under the terms of the {{GNU Affero General Public License}} v3 or any later version. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at https://www.gnu.org/licenses/agpl-3.0.md. By submitting a contribution to this project you agree and acknowledge that your contribution may be used under the terms of the {{GNU Affero General Public License}} v3 or any later version and you are authorized to submit the contribution on behalf of the copyright holder. No part of this project, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file.
2 changes: 1 addition & 1 deletion src/licensedcode/data/rules/agpl-3.0-plus_106.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ is_license_notice: yes
relevance: 100
---

This program is licensed under the GNU Affero General Public License.
This program is licensed under the {{GNU Affero General Public License}}.
2 changes: 1 addition & 1 deletion src/licensedcode/data/rules/agpl-3.0-plus_107.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ is_license_notice: yes
relevance: 100
---

program is licensed under the GNU Affero General Public License.
program is licensed under the {{GNU Affero General Public License}}.
6 changes: 3 additions & 3 deletions src/licensedcode/data/rules/agpl-3.0-plus_108.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ referenced_filenames:

License
is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
it under the terms of the {{GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
(at your option) any later version}}.

is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
{{GNU Affero General Public License}} for more details.

Read the LICENSE.txt file for more details.
6 changes: 3 additions & 3 deletions src/licensedcode/data/rules/agpl-3.0-plus_109.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ referenced_filenames:
---

is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
it under the terms of the {{GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
(at your option) any later version}}.

is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
{{GNU Affero General Public License}} for more details.

Read the LICENSE.txt file for more details.
6 changes: 3 additions & 3 deletions src/licensedcode/data/rules/agpl-3.0-plus_11.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ ignorable_urls:
- http://www.gnu.org/licenses
---

is free software: you can redistribute it and/or modify it under the terms of the {{GNU Affero General Public License}} as published by the Free Software Foundation, {{either version 3 of the License, or (at your option) any later version.}}
is free software: you can redistribute it and/or modify it under the terms of the {{GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version}}.

is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the {{GNU Affero General Public License}} for more details.

You should have received a copy of the GNU Affero General Public License along with . If not, see http://www.gnu.org/licenses/.
You should have received a copy of the {{GNU Affero General Public License}} along with . If not, see http://www.gnu.org/licenses/.
6 changes: 3 additions & 3 deletions src/licensedcode/data/rules/agpl-3.0-plus_110.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ relevance: 100

License
is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
it under the terms of the {{GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
(at your option) any later version}}.

is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
{{GNU Affero General Public License}} for more details.
6 changes: 3 additions & 3 deletions src/licensedcode/data/rules/agpl-3.0-plus_111.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ relevance: 100
---

is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
it under the terms of the {{GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
(at your option) any later version}}.

is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
{{GNU Affero General Public License}} for more details.
10 changes: 5 additions & 5 deletions src/licensedcode/data/rules/agpl-3.0-plus_112.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ ignorable_urls:
- http://www.gnu.org/licenses/
---

License: AGPL-3.0
{{License: AGPL-3.0}}
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
it under the terms of the {{GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
License, or (at your option) any later version}}.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
{{GNU Affero General Public License}} for more details.
.
You should have received a copy of the GNU Affero General Public License
You should have received a copy of the {{GNU Affero General Public License}}
along with this program. If not, see <http://www.gnu.org/licenses/>.
4 changes: 2 additions & 2 deletions src/licensedcode/data/rules/agpl-3.0-plus_113.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ relevance: 100
---

is free software; you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by the
# under the terms of the {{GNU Affero General Public License as published by the
# Free Software Foundation; either version 3 of the License, or (at your
# option) any later version.
# option) any later version}}.
2 changes: 1 addition & 1 deletion src/licensedcode/data/rules/agpl-3.0-plus_114.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ is_license_notice: yes
relevance: 100
---

released under AGPL-3.0+ and is free software
released under {{AGPL-3.0+}} and is free software
2 changes: 1 addition & 1 deletion src/licensedcode/data/rules/agpl-3.0-plus_116.RULE
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ ignorable_urls:
- http://www.gnu.org/licenses/agpl
---

License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{{License AGPL-3.0 or later}} (http://www.gnu.org/licenses/agpl).
Loading
Loading