diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9b17cb97a70..477590a071f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -46,7 +46,6 @@ License detection: matches in a larger license detecion. This remove a larger number of false positive or ambiguous license detections. - - The data structure of the JSON output has changed for licenses. We now return match details once for each matched license expression rather than once for each license in a matched expression. There is a new top-level @@ -54,6 +53,15 @@ License detection: detected license only once. This data can contain the reference license text as an option. +- We can now detect licenses using custom license texts and license rules. + These can be provided as a one off in a directory or packaged as a plugin + for consistent reuse and deployment. + +- There is a new "scancode-reindex-licenses" command that replace the + "scancode --reindex-licenses" command line option which has been + removed. This new command supports simpler reindexing using custom + license texts and license rules contributed by plugins or stored in an + additional directory. v31.2.1 - 2022-10-05 ---------------------------------- diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a2962b9a720..c1d2fe47c5e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -33,6 +33,7 @@ jobs: --ignore=tests/licensedcode/test_detection_datadriven2.py \ --ignore=tests/licensedcode/test_detection_datadriven3.py \ --ignore=tests/licensedcode/test_detection_datadriven4.py \ + --ignore=tests/licensedcode/test_additional_license.py \ tests/licensedcode license_datadriven1_2: | @@ -78,6 +79,18 @@ jobs: venv/bin/pytest -n 3 -vvs --test-suite=all \ tests/licensedcode/test_zzzz_cache.py + # this test runs in isolation because it modifies the actual + # license index with additional licenses provided by a plugin + # and we use the special --test-suite=plugins marker for these + # tests + additional_license_combined: | + venv/bin/pip install tests/licensedcode/data/additional_licenses/additional_plugin_1/ + venv/bin/pip install tests/licensedcode/data/additional_licenses/additional_plugin_2/ + venv/bin/scancode-reindex-licenses \ + --additional-directory tests/licensedcode/data/additional_licenses/additional_dir/ + venv/bin/pytest -vvs --test-suite=plugins \ + tests/licensedcode/test_additional_license.py + - template: etc/ci/azure-posix.yml parameters: job_name: ubuntu18_cpython diff --git a/conftest.py b/conftest.py index 211c130e1e8..f52964cf0b5 100644 --- a/conftest.py +++ b/conftest.py @@ -38,6 +38,7 @@ ################################################################################ SLOW_TEST = 'scanslow' VALIDATION_TEST = 'scanvalidate' +PLUGINS_TEST = 'scanplugins' def pytest_configure(config): @@ -53,8 +54,14 @@ def pytest_configure(config): ': Mark a ScanCode test as a validation test, super slow, long running test.', ) + config.addinivalue_line( + 'markers', + PLUGINS_TEST + + ': Mark a ScanCode test as a special CI test to tests installing additional plugins.', + ) + -TEST_SUITES = 'standard', 'all', 'validate' +TEST_SUITES = ('standard', 'all', 'validate', 'plugins',) def pytest_addoption(parser): @@ -72,9 +79,11 @@ def pytest_addoption(parser): help='Select which test suite to run: ' '"standard" runs the standard test suite designed to run reasonably fast. ' '"all" runs "standard" and "slow" (long running) tests. ' - '"validate" runs all the tests. ' + '"validate" runs all the tests, except the "plugins" tests. ' + '"plugins" runs special plugins tests. Needs extra setup, and is used only in the CI. ' 'Use the @pytest.mark.scanslow marker to mark a test as "slow" test. ' 'Use the @pytest.mark.scanvalidate marker to mark a test as a "validate" test.' + 'Use the @pytest.mark.scanplugins marker to mark a test as a "plugins" test.' ) ################################################################################ @@ -87,6 +96,7 @@ def pytest_collection_modifyitems(config, items): test_suite = config.getvalue('test_suite') run_everything = test_suite == 'validate' run_slow_test = test_suite in ('all', 'validate') + run_only_plugins = test_suite == 'plugins' tests_to_run = [] tests_to_skip = [] @@ -94,6 +104,11 @@ def pytest_collection_modifyitems(config, items): for item in items: is_validate = bool(item.get_closest_marker(VALIDATION_TEST)) is_slow = bool(item.get_closest_marker(SLOW_TEST)) + is_plugins = bool(item.get_closest_marker(PLUGINS_TEST)) + + if is_plugins and not run_only_plugins: + tests_to_skip.append(item) + continue if is_validate and not run_everything: tests_to_skip.append(item) diff --git a/docs/source/cli-reference/core-options.rst b/docs/source/cli-reference/core-options.rst index a9650b97811..55e4501a1cc 100644 --- a/docs/source/cli-reference/core-options.rst +++ b/docs/source/cli-reference/core-options.rst @@ -69,22 +69,6 @@ Comparing Progress Message Options ---- -``--reindex-licenses`` Option ------------------------------ - - ScanCode maintains a license index to search for and detect licenses. When Scancode is - configured for the first time, a license index is built and used in every scan thereafter. - - This ``--reindex-licenses`` option rebuilds the license index. Running a scan with this option - displays the following message to the terminal in addition to what it normally shows:: - - Checking and rebuilding the license index... - - .. - [ToDo] Research and Write Better - ----- - ``--from-json`` Option ---------------------- diff --git a/docs/source/cli-reference/index.rst b/docs/source/cli-reference/index.rst index c38f3df5433..c8b22e4151c 100644 --- a/docs/source/cli-reference/index.rst +++ b/docs/source/cli-reference/index.rst @@ -8,6 +8,7 @@ help-text-options list-options simple-examples + other-commands basic-options core-options output-format diff --git a/docs/source/cli-reference/list-options.rst b/docs/source/cli-reference/list-options.rst index f8e7f695400..e1bcf1cf9e2 100644 --- a/docs/source/cli-reference/list-options.rst +++ b/docs/source/cli-reference/list-options.rst @@ -30,6 +30,10 @@ available in the command line. ---- +.. include:: /rst_snippets/scancode-reindex-licenses.rst + +---- + .. include:: /rst_snippets/core_options.rst ---- diff --git a/docs/source/cli-reference/other-commands.rst b/docs/source/cli-reference/other-commands.rst new file mode 100644 index 00000000000..e2753ef2a5b --- /dev/null +++ b/docs/source/cli-reference/other-commands.rst @@ -0,0 +1,102 @@ +Other available CLIs +==================== + +.. _other_cli: + +---- + +.. include:: /rst_snippets/scancode-reindex-licenses.rst + +---- + +.. include:: /rst_snippets/extract.rst + +---- + +``scancode-reindex-licenses`` command +------------------------------------- + +ScanCode maintains a license index to search for and detect licenses. When Scancode is +configured for the first time, a license index is built and used in every scan thereafter. + +This ``scancode-reindex-licenses`` command rebuilds the license index. Running this command +displays the following message to the terminal:: + + Checking and rebuilding the license index... + +This has several CLI options as follows: + +``--additional-directory`` Option: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``--additional-directory`` option allows the user to include additional directories +of licenses to use in license detection. + +This command only needs to be run once for each set of additional directories, in all subsequent +runs of Scancode with the same directories all the licenses in the directories will be cached +and used in License detection. But reindexing removes these directories, if they aren't +reintroduced as additional directories. + +The directory structure should look something like this:: + + additional_license_directory/ + ├── licenses/ + │ ├── example-installed-1.LICENSE + │ └── example-installed-1.yaml + ├── rules/ + │ ├── example-installed-1.RULE + │ └── example-installed-1.yaml + +Here is an example of reindexing the license cache using the ``--additional-directory PATH`` option +with a single directory:: + + scancode-reindex-licenses --additional-directory tests/licensedcode/data/additional_licenses/additional_dir/ + +You can also include multiple directories like so:: + + scancode-reindex-licenses --additional-directory /home/user/external_licenses/external1 --additional-directory /home/user/external_licenses/external2 + +If you want to continue running scans with ``/home/user/external_licenses/external1`` and +``/home/user/external_licenses/external2``, you can simply run scans after the command above +reindexing with those directories and they will be included. :: + + scancode -l --license-text --json-pp output.json samples + +However, if you wanted to run a scan with a new set of directories, such as +``home/user/external_licenses/external1`` and ``home/user/external_licenses/external3``, you would +need to reindex the license index with those directories as parameters:: + + scancode --additional-directory /home/user/external_licenses/external1 --additional-directory /home/user/external_licenses/external3 + +.. include:: /rst_snippets/note_snippets/additional_directory_is_temp.rst + + +.. note:: + + You can also install external licenses through a plugin for + better reproducibility and distribution of those license/rules + for use in conjunction with scancode-toolkit licenses. + See :ref:`install_new_license_plugin` + + +``--only-builtin`` Option: +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Rebuild the license index excluding any additional license directory or additional +license plugins which were added previously, i.e. with only builtin scancode license and rules. + +This is applicable when there are additional license plugins installed already and you want to +reindex the licenses without these licenses from the additional plugins. + +.. note:: + + Running the ``--only-builtin`` command won't get rid of the installed license plugins, it + would just reindex without the licenses from these plugins for once. Another reindex afterwards + without this option would bring back the licenses from the plugins again in the index. + + +``--all-languages`` Option: +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Rebuild the license index including texts all languages (and not only +English) and exit. This is an EXPERIMENTAL option. diff --git a/docs/source/cli-reference/output-format.rst b/docs/source/cli-reference/output-format.rst index 6941ee3a97f..f52b192c7d8 100644 --- a/docs/source/cli-reference/output-format.rst +++ b/docs/source/cli-reference/output-format.rst @@ -183,7 +183,7 @@ following options. "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", "reference_url": "https://enterprise.dejacode.com/urn/urn:dje:license:mit-old-style", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { diff --git a/docs/source/cli-reference/synopsis.rst b/docs/source/cli-reference/synopsis.rst index 0d029ebbbbf..2c8d6d7ff61 100644 --- a/docs/source/cli-reference/synopsis.rst +++ b/docs/source/cli-reference/synopsis.rst @@ -234,7 +234,7 @@ A sample JSON output for an individual file will look like:: "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", "reference_url": "https://enterprise.dejacode.com/urn/urn:dje:license:mit-old-style", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { diff --git a/docs/source/how-to-guides/index.rst b/docs/source/how-to-guides/index.rst index 957445a3219..ef2604190c9 100644 --- a/docs/source/how-to-guides/index.rst +++ b/docs/source/how-to-guides/index.rst @@ -8,3 +8,4 @@ add_new_license add_new_license_detection_rule + install_new_license_plugin diff --git a/docs/source/how-to-guides/install_new_license_plugin.rst b/docs/source/how-to-guides/install_new_license_plugin.rst new file mode 100644 index 00000000000..28092e3e883 --- /dev/null +++ b/docs/source/how-to-guides/install_new_license_plugin.rst @@ -0,0 +1,188 @@ +.. _install_external_licenses: + +How to Install External Licenses to Use in License Detection +============================================================ + +Users can install external licenses and rules in the form of: + +1. reusable plugins +2. license directories + +These licenses and rules are then used in license detection. + +.. _install_new_license_plugin: + +How to install a plugin containing external licenses and/or rules +----------------------------------------------------------------- + +To create a plugin with external licenses or rules, we must create a Python package +containing the license and/or rule files. Python packages can have many different +file structures. You can find an example package in: + +``tests/licensedcode/data/additional_licenses/additional_plugin_1``. + +This is the basic structure of the example plugin:: + + licenses_to_install1/ + ├── src/ + │ └── licenses_to_install1/ + │ ├── licenses/ + │ │ ├── example-installed-1.LICENSE + │ │ └── example-installed-1.yaml + | ├── rules/ + │ │ ├── example-installed-1.RULE + │ │ └── example-installed-1.yaml + │ └── __init__.py + ├── apache-2.0.LICENSE + ├── MANIFEST.in + ├── setup.cfg + └── setup.py + +Entry points definition in ``setup.py`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +First, in ``setup.py``, you must provide an entry point called ``scancode_location_provider``. +This allows ScanCode Toolkit to discover the plugin and use it in license detection. +Here is the definition of ``entry_points`` in ``setup.py``:: + + entry_points={ + 'scancode_location_provider': [ + 'licenses_to_install1 = licenses_to_install1:LicensesToInstall1Paths', + ], + }, + +The ``scancode_location_provider`` entry point maps to a list with information about the plugin. +The variable ``licenses_to_install1`` is the name of the entry point. All entry point names +**must** start with the prefix ``licenses``, or else ScanCode Toolkit will not use them in +license detection. + +Directory structure +^^^^^^^^^^^^^^^^^^^ + +``licenses_to_install1`` is set to ``licenses_to_install1:LicensesToInstall1Paths``. +Note that in ``src``, we have another directory called ``licenses_to_install1`` and in +``licenses_to_install1/__init__.py``, we define the class ``LicensesToInstall1Paths``. +These two values make up the entry point definition. + +``LicensesToInstall1Paths`` is a subclass of ``LocationProviderPlugin`` and +implements the method ``get_locations()``. The class you define in ``__init__.py`` +must also subclass ``LocationProviderPlugin`` and implement this method. + +Finally, the same directory containing the class definition must also contain the +licenses and/or rules. Licenses must be contained in a directory called ``licenses`` and rules +must be contained in a directory called ``rules``. + +See :ref:`add_new_license_for_det` and :ref:`add_new_license_det_rule` to understand +the structure of license and rule files, respectively. + +After creating this plugin, you can upload it to PyPI so that others can use it, or you can +leave it as a local directory. + +Installing and using the plugin +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To use the plugin in license detection, all you need to do is: + +1. Configure the scancode-toolkit virtualenv and activate. +2. Install the package with `pip` like the following: + ``pip install tests/licensedcode/data/additional_licenses/additional_plugin_2/`` +3. Reindex licenses using `scancode-reindex-licenses`. + +.. include:: /rst_snippets/note_snippets/license_plugin_needs_reindex.rst + +Once it is installed, the contained licenses and rules will automatically be used in +license detection assuming the plugin follows the correct directory structure conventions. + +Writing tests for new installed licenses +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Look at ``tests/licensedcode/data/example_external_licenses/licenses_to_install1`` to see +an example of a plugin with tests. The tests are contained in the ``tests`` directory:: + + licenses_to_install1/ + ├── src/ + │ └── licenses_to_install1/ + │ ├── licenses/ + │ │ ├── example-installed-1.LICENSE + │ │ └── example-installed-1.yaml + │ ├── rules/ + │ │ ├── example-installed-1.RULE + │ │ └── example-installed-1.yaml + │ └── __init__.py/ + ├── tests/ + │ ├── data/ + │ │ ├── example-installed-1.txt + │ │ └── example-installed-1.txt.yml + │ └── test_detection_datadriven.py + ├── gpl-1.0.LICENSE + ├── MANIFEST.in + ├── setup.cfg + └── setup.py + +To write your own tests, first make sure ``setup.py`` includes ``scancode-toolkit`` +as a dependency:: + + ... + install_requires=[ + 'scancode-toolkit', + ], + ... + +Then you can define a test class and call the ``build_tests`` method defined in +``licensedcode_test_utils``, passing in the test directory and the test class as parameters:: + + TEST_DIR = abspath(join(dirname(__file__), 'data')) + + + class TestLicenseDataDriven1(unittest.TestCase): + pass + + + licensedcode_test_utils.build_tests( + TEST_DIR, + clazz=TestLicenseDataDriven1, regen=scancode_config.REGEN_TEST_FIXTURES) + +The ``tests/data`` directory contains a pair of files for each license: +a license text file and a YAML file specifying the expected license expressions from the test. + +Finally, install the plugin and run the test: + +``pytest -vvs tests/test_detection_datadriven.py``. + +.. include:: /rst_snippets/note_snippets/license_plugin_delete.rst + +---- + +.. _add_new_license_directory: + +How to add external licenses and/or rules from a directory +---------------------------------------------------------- + +This is the basic structure of the example license directory:: + + additional_license_directory/ + ├── licenses/ + │ ├── example-installed-1.LICENSE + │ └── example-installed-1.yaml + ├── rules/ + │ ├── example-installed-1.RULE + │ └── example-installed-1.yaml + +Adding the licenses to the index +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To add the licenses in the directory to the index, all you need to do is: + +1. Configure the scancode-toolkit virtualenv and activate. +2. Run ``scancode-reindex-licenses`` with: + + ``--additional-directory tests/licensedcode/data/additional_licenses/additional_dir/`` + +.. include:: /rst_snippets/note_snippets/additional_directory_is_temp.rst + + +Once the licenses/rules are in the index, they will automatically be used in license detection. + +---- + +.. include:: /rst_snippets/scancode-reindex-licenses.rst diff --git a/docs/source/rst_snippets/core_options.rst b/docs/source/rst_snippets/core_options.rst index 8845f37316d..734b0ad1cd4 100644 --- a/docs/source/rst_snippets/core_options.rst +++ b/docs/source/rst_snippets/core_options.rst @@ -11,9 +11,6 @@ All "Core" Scan Options --timeout FLOAT Stop scanning a file if scanning takes longer than a timeout in seconds. [Default: 120] ---reindex-licenses Force a check and possible reindexing of the - cached license index. - --from-json Load codebase from an existing JSON scan --max-in-memory INTEGER Maximum number of files and directories scan @@ -28,5 +25,3 @@ All "Core" Scan Options including and below the starting point. INTEGER must be positive or zero for no limit. [Default: 0] - -.. include:: /rst_snippets/note_snippets/core_indep.rst diff --git a/docs/source/rst_snippets/note_snippets/additional_directory_is_temp.rst b/docs/source/rst_snippets/note_snippets/additional_directory_is_temp.rst new file mode 100644 index 00000000000..507eccb5821 --- /dev/null +++ b/docs/source/rst_snippets/note_snippets/additional_directory_is_temp.rst @@ -0,0 +1,6 @@ +.. note:: + + Adding licenses/rules from an additional directory is not permanent. + Another reindexing without the additional directory option would + just use the builtin scancode licenses and rules, and will not have + these additonal licenses/rules anymore. diff --git a/docs/source/rst_snippets/note_snippets/core_indep.rst b/docs/source/rst_snippets/note_snippets/core_indep.rst deleted file mode 100644 index d38d2f9e698..00000000000 --- a/docs/source/rst_snippets/note_snippets/core_indep.rst +++ /dev/null @@ -1,3 +0,0 @@ -.. note:: - - All the Core Options are independent options, i.e. They don't depend on other options. diff --git a/docs/source/rst_snippets/note_snippets/license_plugin_delete.rst b/docs/source/rst_snippets/note_snippets/license_plugin_delete.rst new file mode 100644 index 00000000000..d0328499753 --- /dev/null +++ b/docs/source/rst_snippets/note_snippets/license_plugin_delete.rst @@ -0,0 +1,7 @@ +.. note:: + + Once you install a external license plugin, you have to reconfigure + scancode-toolkit (or use pip uninstall) to uninstall the plugin to + completely remove it. Otherwise using the --only-builtin option only + regenerates the index without the installed plugins, but another Reindex + would have the licenses/rules from the installed plugins. diff --git a/docs/source/rst_snippets/note_snippets/license_plugin_needs_reindex.rst b/docs/source/rst_snippets/note_snippets/license_plugin_needs_reindex.rst new file mode 100644 index 00000000000..51b46b8cbb1 --- /dev/null +++ b/docs/source/rst_snippets/note_snippets/license_plugin_needs_reindex.rst @@ -0,0 +1,5 @@ +.. note:: + + Installing the plugin will not add the licenses/rules to the + index automatically, they will be indexed only after running + `scancode-reindex-licenses`. diff --git a/docs/source/rst_snippets/scancode-reindex-licenses.rst b/docs/source/rst_snippets/scancode-reindex-licenses.rst new file mode 100644 index 00000000000..d6aae4bec98 --- /dev/null +++ b/docs/source/rst_snippets/scancode-reindex-licenses.rst @@ -0,0 +1,21 @@ +``scancode-reindex-licenses`` Usage +----------------------------------- + +Usage: ``scancode-reindex-licenses [OPTIONS]`` + +Reindex scancode licenses and exit + +Options +------- + + --all-languages [EXPERIMENTAL] Rebuild the license index + including texts all languages (and not only + English) and exit. + --only-builtin Rebuild the license index excluding any + additional license directory or additional + license plugins which were added previously, i.e. + with only builtin scancode license and rules. + --additional-directory DIR Include this directory with additional custom + licenses and license rules in the license + detection index. + -h, --help Shows the options and explanations. diff --git a/setup-mini.cfg b/setup-mini.cfg index 410e7cb6868..6c3b95156d9 100644 --- a/setup-mini.cfg +++ b/setup-mini.cfg @@ -146,6 +146,7 @@ packages = [options.entry_points] console_scripts = scancode = scancode.cli:scancode + scancode-reindex-licenses = licensedcode.reindex:reindex_licenses # These are configurations for ScanCode plugins as setuptools entry points. # Each plugin entry hast this form: diff --git a/setup.cfg b/setup.cfg index 057c3da657b..6129fe74235 100644 --- a/setup.cfg +++ b/setup.cfg @@ -146,6 +146,7 @@ packages = [options.entry_points] console_scripts = scancode = scancode.cli:scancode + scancode-reindex-licenses = licensedcode.reindex:reindex_licenses # These are configurations for ScanCode plugins as setuptools entry points. # Each plugin entry hast this form: diff --git a/src/licensedcode/additional_license_location_provider.py b/src/licensedcode/additional_license_location_provider.py new file mode 100644 index 00000000000..778958cbdd3 --- /dev/null +++ b/src/licensedcode/additional_license_location_provider.py @@ -0,0 +1,161 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/plugincode for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. + +import logging +import os +import sys + +from pluggy import PluginManager as PluggyPluginManager + +from plugincode import HookimplMarker +from plugincode import HookspecMarker + +""" +Support for plugins that provide one or more paths keys typically OS-specific +paths to bundled pre-built binaries provided as Python packages. +Plugin can either be enabled for very specific environment/platform markers (OS, +arch, etc) in their built wheels .... Or be smart about OS/ARCH/etc and provide +a path based on running some code. +""" + +logger = logging.getLogger(__name__) + +# uncomment to enable logging locally +# logging.basicConfig(stream=sys.stdout) +# logger.setLevel(logging.DEBUG) + + +def logger_debug(*args): + return logger.debug(" ".join(isinstance(a, str) and a or repr(a) for a in args)) + + +project_name = __name__ +entrypoint = "scancode_additional_license_location_provider" + +location_provider_spec = HookspecMarker(project_name=project_name) +location_provider_impl = HookimplMarker(project_name=project_name) + + +@location_provider_spec +class AdditionalLicenseLocationProviderPlugin(object): + """ + Base plugin class for plugins that provide path locations for one or more + keys such as the path location to a native binary executable or related + system files. + A plugin is configured as it own package with proper environemnt markers + """ + + # name string under which this plugin is registered. + # This is set automatically when a plugin class is loaded in its manager. + # Subclasses must not set this. + name = None + + def get_locations(self): + """ + Return a mapping of {key: location} where location is an absolute path + to a file or directory referenced by a known key. The location should + exist on a given platorm/OS where this plgin can be installed. + """ + raise NotImplementedError + + +class AdditionalLicensePluginManager(object): + """ + A PluginManager class for simple, non-scanning related plugins. + """ + + def __init__(self, project_name, entrypoint, plugin_base_class): + """ + Initialize this plugin manager for the fully qualified Python module + name `module_qname` with plugins loaded from the setuptools `entrypoint` + that must subclass `plugin_base_class`. + """ + self.manager = PluggyPluginManager(project_name=project_name) + self.entrypoint = entrypoint + self.plugin_base_class = plugin_base_class + self.manager.add_hookspecs(sys.modules[project_name]) + + # set to True once this manager is initialized by running its setup() + self.initialized = False + + # mapping of {plugin.name: plugin_class} for all the loaded plugins of + # this manager + self.plugin_classes = dict() + + def setup(self): + """ + Load and validate available plugins for this PluginManager from its + assigned `entrypoint`. Raise an Exception if a plugin is not valid such + that when it does not subcclass the manager `plugin_base_class`. + Must be called once to initialize the plugins if this manager. + Return a list of all plugin classes for this manager. + """ + if self.initialized: + return self.plugin_classes.values() + + entrypoint = self.entrypoint + self.manager.load_setuptools_entrypoints(entrypoint) + + plugin_classes = [] + for name, plugin_class in self.manager.list_name_plugin(): + if not issubclass(plugin_class, self.plugin_base_class): + plugin_base_class = self.plugin_base_class + raise Exception( + "Invalid plugin: %(name)r: %(plugin_class)r " + "must extend %(plugin_base_class)r." % locals() + ) + + plugin_class.name = name + plugin_classes.append(plugin_class) + + self.plugin_classes = dict([(cls.name, cls) for cls in plugin_classes]) + self.initialized = True + return self.plugin_classes.values() + + +additional_license_location_provider_plugins = AdditionalLicensePluginManager( + project_name=project_name, entrypoint=entrypoint, plugin_base_class=AdditionalLicenseLocationProviderPlugin +) + + +class ProvidedLocationError(Exception): + pass + + +def get_location(location_key, _cached_locations={}): + """ + Return the location for a `location_key` if available from plugins or None. + """ + if not _cached_locations: + additional_license_location_provider_plugins.setup() + + unknown_locations = {} + + for k, plugin_class in additional_license_location_provider_plugins.plugin_classes.items(): + pc = plugin_class() + provided_locs = pc.get_locations() or {} + for loc_key, location in provided_locs.items(): + if not os.path.exists(location): + unknown_locations[loc_key] = location + + if loc_key in _cached_locations: + existing = _cached_locations[loc_key] + msg = ( + "Duplicate location key provided: {loc_key}: " + "new: {location}, existing:{existing}" + ) + msg = msg.format(**locals()) + raise ProvidedLocationError(msg) + + _cached_locations[loc_key] = location + + if unknown_locations: + msg = "Non-existing locations provided:\n:" + msg += "\n".join("key:{}, loc: {}".format(k, l) for k, l in unknown_locations.items()) + raise ProvidedLocationError(msg) + + return _cached_locations.get(location_key) diff --git a/src/licensedcode/cache.py b/src/licensedcode/cache.py index cb3c788be6a..4757152bf2d 100644 --- a/src/licensedcode/cache.py +++ b/src/licensedcode/cache.py @@ -6,8 +6,10 @@ # See https://github.com/nexB/scancode-toolkit for support or download. # See https://aboutcode.org for more information about nexB OSS projects. # + import os import pickle +from shutil import rmtree import attr @@ -47,9 +49,12 @@ class LicenseCache: licensing = attribute(help='Licensing object') spdx_symbols = attribute(help='mapping of LicenseSymbol objects by SPDX key') unknown_spdx_symbol = attribute(help='LicenseSymbol object') + additional_license_directory = attribute(help='Path to an additional license directory used in the license detection') + additional_license_plugins = attribute(help='Path to additional license plugins used in the license detection') @staticmethod def load_or_build( + only_builtin=False, licensedcode_cache_dir=licensedcode_cache_dir, scancode_cache_dir=scancode_cache_dir, force=False, @@ -58,6 +63,7 @@ def load_or_build( timeout=LICENSE_INDEX_LOCK_TIMEOUT, licenses_data_dir=None, rules_data_dir=None, + additional_directory=None, ): """ Load or build and save and return a LicenseCache object. @@ -66,13 +72,20 @@ def load_or_build( On the side, we load cached or build license db, SPDX symbols and other license-related data structures. - - If the cache exists, it is returned unless corrupted or ``force`` is True. - - If the cache does not exist, a new index is built and cached. + - If the cache exists, it is returned unless corrupted. + - If ``force`` is True, or if the cache does not exist a new index is built + and cached. - 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) + - ``additional_directory`` is an optional additional directory + that contain additional licenses and rules in a /licenses and a /rules + directories using the same format that we use for licenses and rules. """ idx_cache_dir = os.path.join(licensedcode_cache_dir, LICENSE_INDEX_DIR) + if only_builtin: + rmtree(idx_cache_dir) + create_dir(idx_cache_dir) cache_file = os.path.join(idx_cache_dir, LICENSE_INDEX_FILENAME) @@ -81,6 +94,8 @@ def load_or_build( # bypass build if cache exists if has_cache and not force: try: + # save the list of additional directories included in the cache, or None if the cache does not + # include any additional directories return load_cache_file(cache_file) except Exception as e: # work around some rare Windows quirks @@ -91,7 +106,10 @@ def load_or_build( from licensedcode.models import licenses_data_dir as ldd from licensedcode.models import rules_data_dir as rdd - from licensedcode.models import load_licenses + from licensedcode.models import load_licenses_from_multiple_dirs + from licensedcode.models import get_license_dirs + from licensedcode.models import validate_additional_license_data + from licensedcode.models import get_paths_to_installed_licenses_and_rules from scancode import lockfile licenses_data_dir = licenses_data_dir or ldd @@ -106,13 +124,38 @@ def load_or_build( # Here, the cache is either stale or non-existing: we need to # rebuild all cached data (e.g. mostly the index) and cache it - licenses_db = load_licenses(licenses_data_dir=licenses_data_dir) + additional_directories = [] + if only_builtin: + additional_directory = None + plugin_directories = [] + else: + plugin_directories = get_paths_to_installed_licenses_and_rules() + if plugin_directories: + additional_directories.extend(plugin_directories) + + # include installed licenses + if additional_directory: + # additional_directories is originally a tuple + additional_directories.append(additional_directory) + + additional_license_dirs = get_license_dirs(additional_dirs=additional_directories) + validate_additional_license_data( + additional_directories=additional_license_dirs, + scancode_license_dir=licenses_data_dir + ) + licenses_db = load_licenses_from_multiple_dirs( + additional_license_data_dirs=additional_license_dirs, + builtin_license_data_dir=licenses_data_dir, + ) + # create a single merged index containing license data from licenses_data_dir + # and data from additional directories index = build_index( licenses_db=licenses_db, licenses_data_dir=licenses_data_dir, rules_data_dir=rules_data_dir, index_all_languages=index_all_languages, + additional_directories=plugin_directories, ) spdx_symbols = build_spdx_symbols(licenses_db=licenses_db) @@ -125,6 +168,8 @@ def load_or_build( licensing=licensing, spdx_symbols=spdx_symbols, unknown_spdx_symbol=unknown_spdx_symbol, + additional_license_directory=additional_directory, + additional_license_plugins=plugin_directories, ) # save the cache as pickle new tree checksum @@ -143,27 +188,47 @@ def build_index( licenses_data_dir=None, rules_data_dir=None, index_all_languages=False, + additional_directories=None, ): """ Return an index built from rules and licenses directories If ``index_all_languages`` is True, include texts and rules in all languages. Otherwise, only include the English license texts and rules (the default) + If ``additional_directories`` is not None, we will include licenses and rules + from these additional directories in the returned index. """ from licensedcode.index import LicenseIndex - from licensedcode.models import get_rules + from licensedcode.models import get_license_dirs + from licensedcode.models import get_rule_dirs + from licensedcode.models import get_rules_from_multiple_dirs from licensedcode.models import get_all_spdx_key_tokens from licensedcode.models import get_license_tokens from licensedcode.models import licenses_data_dir as ldd from licensedcode.models import rules_data_dir as rdd - from licensedcode.models import load_licenses + from licensedcode.models import load_licenses_from_multiple_dirs + from licensedcode.models import validate_ignorable_clues from licensedcode.legalese import common_license_words licenses_data_dir = licenses_data_dir or ldd rules_data_dir = rules_data_dir or rdd - licenses_db = licenses_db or load_licenses(licenses_data_dir=licenses_data_dir) - rules = get_rules(licenses_db=licenses_db, rules_data_dir=rules_data_dir) + 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) + + # if we have additional directories, extract the rules from them + additional_rule_dirs = get_rule_dirs(additional_dirs=additional_directories) + validate_ignorable_clues(rule_directories=additional_rule_dirs, is_builtin=False) + # then combine the rules in these additional directories with the rules in the original rules directory + rules = get_rules_from_multiple_dirs( + licenses_db=licenses_db, + additional_rules_data_dirs=additional_rule_dirs, + builtin_rule_data_dir=rules_data_dir, + ) legalese = common_license_words spdx_tokens = set(get_all_spdx_key_tokens(licenses_db)) @@ -299,7 +364,12 @@ def build_unknown_spdx_symbol(licenses_db=None): return LicenseSymbolLike(licenses_db['unknown-spdx']) -def get_cache(force=False, index_all_languages=False): +def get_cache( + only_builtin=False, + force=False, + index_all_languages=False, + additional_directory=None +): """ Return a LicenseCache either rebuilt, cached or loaded from disk. @@ -307,25 +377,37 @@ def get_cache(force=False, index_all_languages=False): building the license index. Otherwise, only include the English license \ texts and rules (the default) """ - populate_cache(force=force, index_all_languages=index_all_languages) - global _LICENSE_CACHE - return _LICENSE_CACHE + return populate_cache( + only_builtin=only_builtin, + force=force, + index_all_languages=index_all_languages, + additional_directory=additional_directory, + ) -def populate_cache(force=False, index_all_languages=False): +def populate_cache( + only_builtin=False, + force=False, + index_all_languages=False, + additional_directory=None +): """ - Load or build and cache a LicenseCache. Return None. + Return, load or build and cache a LicenseCache. """ global _LICENSE_CACHE + if force or not _LICENSE_CACHE: _LICENSE_CACHE = LicenseCache.load_or_build( + only_builtin=only_builtin, licensedcode_cache_dir=licensedcode_cache_dir, scancode_cache_dir=scancode_cache_dir, force=force, index_all_languages=index_all_languages, # used for testing only timeout=LICENSE_INDEX_LOCK_TIMEOUT, + additional_directory=additional_directory, ) + return _LICENSE_CACHE def load_cache_file(cache_file): @@ -346,11 +428,21 @@ def load_cache_file(cache_file): raise Exception(msg) from e -def get_index(force=False, index_all_languages=False): +def get_index( + only_builtin=False, + force=False, + index_all_languages=False, + additional_directory=None +): """ Return and eventually build and cache a LicenseIndex. """ - return get_cache(force=force, index_all_languages=index_all_languages).index + return get_cache( + only_builtin=only_builtin, + force=force, + index_all_languages=index_all_languages, + additional_directory=additional_directory + ).index get_cached_index = get_index diff --git a/src/licensedcode/models.py b/src/licensedcode/models.py index 0b29103b169..0b6ca63407d 100644 --- a/src/licensedcode/models.py +++ b/src/licensedcode/models.py @@ -22,6 +22,7 @@ from os.path import exists from os.path import join from time import time +from pathlib import Path import attr import saneyaml @@ -186,6 +187,13 @@ class License: help='Free text notes.') ) + is_builtin = attr.ib( + default=True, + repr=False, + metadata=dict( + help='Flag set to True if this is a builtin standard license.') + ) + # TODO: add the license key(s) this exception applies to is_exception = attr.ib( default=False, @@ -346,12 +354,12 @@ class License: ) @classmethod - def from_dir(cls, key, licenses_data_dir=licenses_data_dir): + def from_dir(cls, key, licenses_data_dir=licenses_data_dir, is_builtin=True): """ Return a new License object for a license ``key`` and load its attribute from a data file stored in ``licenses_data_dir``. """ - lic = cls(key=key) + lic = cls(key=key, is_builtin=is_builtin) data_file = lic.data_file(licenses_data_dir=licenses_data_dir) if exists(data_file): text_file = lic.text_file(licenses_data_dir=licenses_data_dir) @@ -684,6 +692,7 @@ def load_licenses( licenses_data_dir=licenses_data_dir, with_deprecated=False, check_dangling=True, + is_builtin=True, ): """ Return a mapping of {key: License} loaded from license data and text files @@ -711,9 +720,16 @@ def load_licenses( key = file_base_name(data_file) try: - lic = License.from_dir(key=key, licenses_data_dir=licenses_data_dir) + lic = License.from_dir( + key=key, + licenses_data_dir=licenses_data_dir, + is_builtin=is_builtin, + ) except Exception as e: - raise Exception(f'Failed to load license: {key} from: file://{licenses_data_dir}/{key}.yml with error: {e}') from e + raise Exception( + f'Failed to load license: {key} from: ' + f'file://{licenses_data_dir}/{key}.yml with error: {e}' + ) from e if check_dangling: used_files.add(data_file) @@ -751,6 +767,7 @@ def get_rules( licenses_data_dir=licenses_data_dir, rules_data_dir=rules_data_dir, validate=False, + is_builtin=True, ): """ Yield Rule objects loaded from a ``licenses_db`` and license files found in @@ -763,6 +780,7 @@ def get_rules( rules = list(load_rules( rules_data_dir=rules_data_dir, + is_builtin=is_builtin, )) if validate: @@ -772,6 +790,176 @@ def get_rules( return chain(licenses_as_rules, rules) +def get_license_dirs(additional_dirs): + """ + Return a list of all subdirectories containing license files within the + input list of additional directories. These directories do not have to be absolute paths. + """ + return [f"{str(Path(path).absolute())}/licenses" for path in additional_dirs] + + +def get_rule_dirs(additional_dirs): + """ + Return a list of all subdirectories containing rule files within the + input list of additional directories. These directories do not have to be absolute paths. + """ + return [f"{str(Path(path).absolute())}/rules" for path in additional_dirs] + + +def get_paths_to_installed_licenses_and_rules(): + """ + Return a list of paths to externally packaged licenses or rules that the user has + installed. Gets a list of all of these licenses (installed as plugins) and + then gets the plugins containing licenses by checking that their names start + with a common prefix. + """ + from importlib_metadata import entry_points + from licensedcode.additional_license_location_provider import get_location + installed_plugins = entry_points(group='scancode_additional_license_location_provider') + paths = [] + for plugin in installed_plugins: + # get path to directory of licenses and/or rules + paths.append(get_location(plugin.name)) + return paths + + +def load_licenses_from_multiple_dirs( + builtin_license_data_dir, + additional_license_data_dirs, + with_deprecated=False, +): + """ + Return a mapping of {key: License} combining a list of + ``additional_license_data_dirs`` containing additional licenses with the + builtin ``builtin_license_data_dir`` licenses into the same mapping. + """ + #raise Exception(builtin_license_data_dir) + combined_licenses = load_licenses( + licenses_data_dir=builtin_license_data_dir, + with_deprecated=with_deprecated, + is_builtin=True, + ) + for license_dir in additional_license_data_dirs: + additional_licenses = load_licenses( + licenses_data_dir=license_dir, + with_deprecated=with_deprecated, + is_builtin=False, + ) + + # validate that additional licenses keys do not exist as builtin + duplicate_keys = set(combined_licenses).intersection(set(additional_licenses)) + if duplicate_keys: + dupes = ', '.join(sorted(duplicate_keys)) + message = f'Duplicate licenses found when loading additional licenses from: {license_dir}: {dupes}' + raise ValueError(message) + + combined_licenses.update(additional_licenses) + + return combined_licenses + + +def get_rules_from_multiple_dirs( + licenses_db, + builtin_rule_data_dir, + additional_rules_data_dirs, +): + """ + Yield Rule(s) built from: + - A ``license_db`` mapping of {key: License} + - The ``builtin_rule_data_dir`` of builtin license rules + - The list of ``additional_rules_data_dirs`` containing additional rules. + """ + # first load all builtin + combined_rules = list(get_rules( + licenses_db=licenses_db, + rules_data_dir=builtin_rule_data_dir, + )) + + # load additional rules + for rules_dir in additional_rules_data_dirs or []: + combined_rules.extend(load_rules( + rules_data_dir=rules_dir, + is_builtin=False, + )) + + validate_rules(rules=combined_rules, licenses_by_key=licenses_db) + + return combined_rules + + +class InvalidLicense(Exception): + pass + + +def validate_additional_license_data(additional_directories, scancode_license_dir): + """ + Raises an exception if there are any invalid licenses in the directories of + additional licenses. + """ + licenses = load_licenses_from_multiple_dirs( + additional_license_data_dirs=additional_directories, + builtin_license_data_dir=scancode_license_dir + ) + errors, _, _ = License.validate( + licenses, + verbose=False, + ) + if errors: + message = ['Errors while validating licenses:'] + for key, msgs in errors.items(): + message.append('') + message.append(f'License: {key}') + for msg in msgs: + message.append(f' {msg!r}') + raise InvalidLicense('\n'.join(message)) + + +def _ignorable_clue_error(rule, rules_dir): + """ + Return a pair of the result of validating a rule's ignorable clues and expected ignorable clues + if there is an error. Otherwise, returns None. + """ + result = get_ignorables(rule.text_file(rules_data_dir=rules_dir)) + expected = get_normalized_ignorables(rule) + if result != expected: + data_file = rule.data_file(rules_data_dir=rules_dir) + text_file = rule.text_file(rules_data_dir=rules_dir) + if not data_file: + data_file = text_file.replace('.LICENSE', '.yml') + + result['files'] = [ + f'file://{data_file}', + f'file://{text_file}', + ] + return result, expected + + +def validate_ignorable_clues(rule_directories, is_builtin): + """ + Raises an exception if any ignorable clues declared in a Rule are improperly detected + in the rule text file. + """ + messages = ['Errors while validating ignorable rules:'] + error_present = False + for rules_dir in rule_directories: + r = list(load_rules( + rules_data_dir=rules_dir, + is_builtin=is_builtin, + )) + for rule in r: + if _ignorable_clue_error(rule, rules_dir): + error_present = True + result, expected = _ignorable_clue_error(rule, rules_dir) + messages.append('') + messages.append(f'{rule!r}') + messages.append('Result:') + messages.append(result) + messages.append('Expected:') + messages.append(expected) + if error_present: + raise InvalidRule('\n'.join(messages)) + + class InvalidRule(Exception): pass @@ -848,6 +1036,7 @@ def build_rule_from_license(license_obj): has_stored_minimum_coverage=bool(minimum_coverage), minimum_coverage=minimum_coverage, + is_builtin=license_obj.is_builtin, is_from_license=True, is_license_text=True, @@ -900,7 +1089,7 @@ def get_license_tokens(): yield 'licensed' -def load_rules(rules_data_dir=rules_data_dir, with_checks=True): +def load_rules(rules_data_dir=rules_data_dir, with_checks=True, is_builtin=True): """ Return an iterable of rules loaded from rule files in ``rules_data_dir``. Optionally check for consistency if ``with_checks`` is True. @@ -924,7 +1113,11 @@ def load_rules(rules_data_dir=rules_data_dir, with_checks=True): text_file = join(rules_data_dir, f'{base_name}.RULE') try: - yield Rule.from_files(data_file=data_file, text_file=text_file) + yield Rule.from_files( + data_file=data_file, + text_file=text_file, + is_builtin=is_builtin, + ) except Exception as re: if with_checks: model_errors.append(str(re)) @@ -1029,6 +1222,13 @@ class BasicRule: 'string.') ) + is_builtin = attr.ib( + default=True, + repr=False, + metadata=dict( + help='Flag set to True if this is a builtin standard rule.') + ) + # The is_license_xxx flags below are nn indication of what this rule # importance is (e.g. how important is its text when detected as a licensing # clue) as one of several "is_license_xxx" flags. These flags are mutually @@ -1717,12 +1917,12 @@ def __attrs_post_init__(self, *args, **kwargs): self.setup() @classmethod - def from_files(cls, data_file, text_file): + def from_files(cls, data_file, text_file, is_builtin=True): """ Return a new Rule object loaded from a data file stored at ``data_file`` and a companion ``text_file``. """ - rule = Rule() + rule = Rule(is_builtin=is_builtin) rule.load_data(data_file=data_file, text_file=text_file) return rule @@ -1919,10 +2119,10 @@ def write(location, byte_string): data_file = self.data_file(rules_data_dir=rules_data_dir) as_yaml = saneyaml.dump(self.to_dict(), indent=4, encoding='utf-8') - write(location=data_file, byte_string=as_yaml) + write(data_file, as_yaml) text_file = self.text_file(rules_data_dir=rules_data_dir) - write(location=text_file, byte_string=self.text.encode('utf-8')) + write(text_file, self.text.encode('utf-8')) def load(self, data_file, text_file, with_checks=True): """ diff --git a/src/licensedcode/plugin_license.py b/src/licensedcode/plugin_license.py index 8658ffbc356..cffc987a9f5 100644 --- a/src/licensedcode/plugin_license.py +++ b/src/licensedcode/plugin_license.py @@ -7,11 +7,12 @@ # See https://aboutcode.org for more information about nexB OSS projects. # +import logging +import os import posixpath from functools import partial import attr -from commoncode.cliutils import MISC_GROUP from commoncode.cliutils import PluggableCommandLineOption from commoncode.cliutils import SCAN_OPTIONS_GROUP from commoncode.cliutils import SCAN_GROUP @@ -21,61 +22,22 @@ from scancode.api import SCANCODE_LICENSEDB_URL -TRACE = False +TRACE = os.environ.get('SCANCODE_DEBUG_LICENSE_PLUGIN', False) -def logger_debug(*args): pass +def logger_debug(*args): + pass +logger = logging.getLogger(__name__) + if TRACE: - use_print = True - if use_print: - prn = print - else: - import logging - import sys - logger = logging.getLogger(__name__) - # logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) - logging.basicConfig(stream=sys.stdout) - logger.setLevel(logging.DEBUG) - prn = logger.debug + import sys + logging.basicConfig(stream=sys.stdout) + logger.setLevel(logging.DEBUG) def logger_debug(*args): - return prn(' '.join(isinstance(a, str) and a or repr(a) for a in args)) - - -def reindex_licenses(ctx, param, value): - """ - Rebuild and cache the license index - """ - if not value or ctx.resilient_parsing: - return - - # TODO: check for temp file configuration and use that for the cache!!! - from licensedcode.cache import get_index - import click - click.echo('Rebuilding the license index...') - get_index(force=True) - click.echo('Done.') - ctx.exit(0) - - -def reindex_licenses_all_languages(ctx, param, value): - """ - EXPERIMENTAL: Rebuild and cache the license index including all languages - and not only English. - """ - if not value or ctx.resilient_parsing: - return - - # TODO: check for temp file configuration and use that for the cache!!! - from licensedcode.cache import get_index - import click - click.echo('Rebuilding the license index for all languages...') - get_index(force=True, index_all_languages=True) - click.echo('Done.') - ctx.exit(0) - + return logger.debug(' '.join(isinstance(a, str) and a or repr(a) for a in args)) @scan_impl class LicenseScanner(ScanPlugin): @@ -138,24 +100,6 @@ class LicenseScanner(ScanPlugin): 'references such as "See license in file COPYING".', help_group=SCAN_OPTIONS_GROUP, ), - - PluggableCommandLineOption( - ('--reindex-licenses',), - is_flag=True, is_eager=True, - callback=reindex_licenses, - help='Rebuild the license index and exit.', - help_group=MISC_GROUP, - ), - - PluggableCommandLineOption( - ('--reindex-licenses-for-all-languages',), - is_flag=True, is_eager=True, - callback=reindex_licenses_all_languages, - help='[EXPERIMENTAL] Rebuild the license index including texts all ' - 'languages (and not only English) and exit.', - help_group=MISC_GROUP, - ) - ] def is_enabled(self, license, **kwargs): # NOQA @@ -195,25 +139,69 @@ def process_codebase(self, codebase, unknown_licenses, **kwargs): This is an EXPERIMENTAL feature for now. """ - if unknown_licenses: - if codebase.has_single_resource: - return + from licensedcode import cache + cche = cache.get_cache() + cle = codebase.get_or_create_current_header() + licenses = cache.get_licenses_db() + has_additional_licenses = False + + if cche.additional_license_directory: + cle.extra_data['additional_license_directory'] = cche.additional_license_directory + has_additional_licenses = True + if cche.additional_license_plugins: + cle.extra_data['additional_license_plugins'] = cche.additional_license_plugins + has_additional_licenses = True + + if TRACE and has_additional_licenses: + logger_debug( + f'add_referenced_filenames_license_matches: additional_licenses', + f'has_additional_licenses: {has_additional_licenses}\n', + f'additional_license_directory: {cche.additional_license_directory}\n', + f'additional_license_plugins : {cche.additional_license_plugins}' + ) + + if codebase.has_single_resource and not codebase.root.is_file: + return + + modified = False + for resource in codebase.walk(topdown=False): + # follow license references to other files + if TRACE: + license_expressions_before = list(resource.license_expressions) + + if unknown_licenses: + modified = add_referenced_filenames_license_matches(resource, codebase) - for resource in codebase.walk(topdown=False): - # follow license references to other files - if TRACE: - license_expressions_before = list(resource.license_expressions) + if has_additional_licenses and resource.is_file and resource.licenses: + add_builtin_license_flag(resource, licenses) + + if TRACE and modified: + license_expressions_after = list(resource.license_expressions) + logger_debug( + f'add_referenced_filenames_license_matches: Modfied:', + f'{resource.path} with license_expressions:\n' + f'before: {license_expressions_before}\n' + f'after : {license_expressions_after}' + ) - modified = add_referenced_filenames_license_matches(resource, codebase) - if TRACE and modified: - license_expressions_after = list(resource.license_expressions) - logger_debug( - f'add_referenced_filenames_license_matches: Modfied:', - f'{resource.path} with license_expressions:\n' - f'before: {license_expressions_before}\n' - f'after : {license_expressions_after}' - ) +def add_builtin_license_flag(resource, licenses): + """ + Add a `is_builtin` flag to each license rule data mapping if there are + additional licenses present in the cache, either through an additional + license directory or additional license plugins. + """ + for match in resource.licenses: + add_builtin_value(license_match=match, licenses=licenses) + + +def add_builtin_value(license_match, licenses): + license_key = license_match['key'] + lic = licenses.get(license_key) + if lic.is_builtin: + license_match['matched_rule']['is_builtin'] = True + else: + license_match['matched_rule']['is_builtin'] = False def add_referenced_filenames_license_matches(resource, codebase): diff --git a/src/licensedcode/reindex.py b/src/licensedcode/reindex.py new file mode 100644 index 00000000000..8e3ab85385d --- /dev/null +++ b/src/licensedcode/reindex.py @@ -0,0 +1,64 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + +import click + +from commoncode.cliutils import PluggableCommandLineOption + + +@click.command(name='scancode-reindex-licenses') +@click.option( + '--all-languages', + is_flag=True, + help='[EXPERIMENTAL] Rebuild the license index including texts all ' + 'languages (and not only English) and exit.', + cls=PluggableCommandLineOption, +) +@click.option( + '--only-builtin', + is_flag=True, + help='Rebuild the license index excluding any additional ' + 'license directory or additional license plugins which ' + 'were added previously, i.e. with only builtin scancode ' + 'license and rules.', + conflicting_options=['additional_directory'], + cls=PluggableCommandLineOption, +) +@click.option( + '--additional-directory', + type=click.Path(exists=True, readable=True, file_okay=False, resolve_path=True, path_type=str), + metavar='DIR', + help='Include this directory with additional custom licenses and license rules ' + 'in the license detection index.', + conflicting_options=['only_builtin'], + cls=PluggableCommandLineOption, +) +@click.help_option('-h', '--help') +def reindex_licenses( + only_builtin, + all_languages, + additional_directory, + *args, + **kwargs, +): + """Reindex scancode licenses and exit""" + + from licensedcode.cache import get_index + click.echo('Rebuilding the license index...') + get_index( + only_builtin=only_builtin, + force=True, + index_all_languages=bool(all_languages), + additional_directory=additional_directory + ) + click.echo('Done.') + + +if __name__ == '__main__': + reindex_licenses() diff --git a/tests/licensedcode/licensedcode_test_utils.py b/src/licensedcode_test_utils.py similarity index 100% rename from tests/licensedcode/licensedcode_test_utils.py rename to src/licensedcode_test_utils.py diff --git a/src/scancode/api.py b/src/scancode/api.py index 1f3333c6a4b..04f7e4c049e 100644 --- a/src/scancode/api.py +++ b/src/scancode/api.py @@ -250,11 +250,16 @@ def _licenses_data_from_match( result['is_unknown'] = lic.is_unknown result['owner'] = lic.owner result['homepage_url'] = lic.homepage_url - result['text_url'] = lic.text_urls[0] if lic.text_urls else '' - result['reference_url'] = license_url_template.format(lic.key) - result['scancode_text_url'] = SCANCODE_LICENSE_TEXT_URL.format(lic.key) - result['scancode_data_url'] = SCANCODE_LICENSE_DATA_URL.format(lic.key) - + result['text_url'] = lic.text_urls[0] if lic.text_urls else None + # if the license is not builtin these should all be empty + if lic.is_builtin: + result['reference_url'] = license_url_template.format(lic.key) + result['scancode_text_url'] = SCANCODE_LICENSE_TEXT_URL.format(lic.key) + result['scancode_data_url'] = SCANCODE_LICENSE_DATA_URL.format(lic.key) + else: + result['reference_url'] = None + result['scancode_text_url'] = None + result['scancode_data_url'] = None spdx_key = lic.spdx_license_key result['spdx_license_key'] = spdx_key @@ -266,7 +271,7 @@ def _licenses_data_from_match( spdx_key = lic.spdx_license_key.rstrip('+') spdx_url = SPDX_LICENSE_URL.format(spdx_key) else: - spdx_url = '' + spdx_url = None result['spdx_url'] = spdx_url result['start_line'] = match.start_line result['end_line'] = match.end_line @@ -286,7 +291,6 @@ def _licenses_data_from_match( matched_rule['matched_length'] = match.len() matched_rule['match_coverage'] = match.coverage() matched_rule['rule_relevance'] = match.rule.relevance - # FIXME: for sanity this should always be included????? if include_text: result['matched_text'] = matched_text return detected_licenses diff --git a/src/scancode/cli.py b/src/scancode/cli.py index 9b4cb0a78b2..80e2bc369d7 100644 --- a/src/scancode/cli.py +++ b/src/scancode/cli.py @@ -861,6 +861,7 @@ def echo_func(*_args, **_kwargs): cle.options = pretty_params or {} # useful for debugging cle.extra_data['system_environment'] = system_environment = {} + system_environment['operating_system'] = commoncode.system.current_os system_environment['cpu_architecture'] = commoncode.system.current_arch system_environment['platform'] = platform.platform() diff --git a/tests/cluecode/test_plugin_filter_clues.py b/tests/cluecode/test_plugin_filter_clues.py index 4b1370579c5..7e882b7f185 100644 --- a/tests/cluecode/test_plugin_filter_clues.py +++ b/tests/cluecode/test_plugin_filter_clues.py @@ -60,7 +60,6 @@ def test_scan_plugin_filter_clues_does_not_filter_incorrectly(): # Regression on types tracked in https://github.com/nexB/typecode/issues/21 -@pytest.mark.xfail# def test_scan_plugin_filter_clues_for_license(): # this test fies is a copy of pcre.LICENSE that contains # several emails, authors, urls diff --git a/tests/formattedcode/data/csv/flatten_scan/full.json b/tests/formattedcode/data/csv/flatten_scan/full.json index 778da14a7c8..e95267786fb 100644 --- a/tests/formattedcode/data/csv/flatten_scan/full.json +++ b/tests/formattedcode/data/csv/flatten_scan/full.json @@ -258,11 +258,11 @@ "short_name": "JBoss EULA", "category": "Proprietary Free", "owner": "JBoss Community", - "homepage_url": "", + "homepage_url": null, "text_url": "http://repository.jboss.org/licenses/jbossorg-eula.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/jboss-eula", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 108, "matched_rule": { @@ -1296,10 +1296,10 @@ "category": "Public Domain", "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1649, "end_line": 1649, "matched_rule": { @@ -1322,10 +1322,10 @@ "category": "Public Domain", "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1692, "end_line": 1692, "matched_rule": { @@ -1478,10 +1478,10 @@ "category": "Permissive", "owner": "OpenSSL", "homepage_url": "http://openssl.org/source/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule": { @@ -1555,10 +1555,10 @@ "category": "Permissive", "owner": "OpenSSL", "homepage_url": "http://openssl.org/source/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule": { @@ -2562,11 +2562,11 @@ "short_name": "Ada linking exception to GPL 2.0 or later", "category": "Copyleft Limited", "owner": "Dmitriy Anisimkov", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 20, "end_line": 25, "matched_rule": { @@ -3268,11 +3268,11 @@ "short_name": "CMR License", "category": "Permissive", "owner": "CMR - Christian Michelsen Research AS", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/cmr-no", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { diff --git a/tests/formattedcode/data/csv/flatten_scan/full.json-expected b/tests/formattedcode/data/csv/flatten_scan/full.json-expected index 4af3c497547..e29837e4a0b 100644 --- a/tests/formattedcode/data/csv/flatten_scan/full.json-expected +++ b/tests/formattedcode/data/csv/flatten_scan/full.json-expected @@ -206,11 +206,11 @@ "license__short_name": "JBoss EULA", "license__category": "Proprietary Free", "license__owner": "JBoss Community", - "license__homepage_url": "", + "license__homepage_url": null, "license__text_url": "http://repository.jboss.org/licenses/jbossorg-eula.txt", "license__reference_url": "https://scancode-licensedb.aboutcode.org/jboss-eula", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 3, "end_line": 108, "matched_rule__identifier": "jboss-eula.LICENSE", @@ -1090,10 +1090,10 @@ "license__category": "Public Domain", "license__owner": "Unspecified", "license__homepage_url": "http://www.linfo.org/publicdomain.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 1649, "end_line": 1649, "matched_rule__identifier": "public-domain.LICENSE", @@ -1113,10 +1113,10 @@ "license__category": "Public Domain", "license__owner": "Unspecified", "license__homepage_url": "http://www.linfo.org/publicdomain.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 1692, "end_line": 1692, "matched_rule__identifier": "public-domain.LICENSE", @@ -1244,10 +1244,10 @@ "license__category": "Permissive", "license__owner": "OpenSSL", "license__homepage_url": "http://openssl.org/source/license.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule__identifier": "openssl_8.RULE", @@ -1309,10 +1309,10 @@ "license__category": "Permissive", "license__owner": "OpenSSL", "license__homepage_url": "http://openssl.org/source/license.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule__identifier": "openssl_8.RULE", @@ -2131,11 +2131,11 @@ "license__short_name": "Ada linking exception to GPL 2.0 or later", "license__category": "Copyleft Limited", "license__owner": "Dmitriy Anisimkov", - "license__homepage_url": "", - "license__text_url": "", + "license__homepage_url": null, + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 20, "end_line": 25, "matched_rule__identifier": "ada-linking-exception.LICENSE", @@ -2718,11 +2718,11 @@ "license__short_name": "CMR License", "license__category": "Permissive", "license__owner": "CMR - Christian Michelsen Research AS", - "license__homepage_url": "", - "license__text_url": "", + "license__homepage_url": null, + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/cmr-no", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule__identifier": "cmr-no.LICENSE", diff --git a/tests/formattedcode/data/csv/flatten_scan/minimal.json b/tests/formattedcode/data/csv/flatten_scan/minimal.json index 1344c78a88a..f4c59c16fa3 100644 --- a/tests/formattedcode/data/csv/flatten_scan/minimal.json +++ b/tests/formattedcode/data/csv/flatten_scan/minimal.json @@ -33,10 +33,10 @@ "category": "Permissive", "owner": "OpenSSL", "homepage_url": "http://openssl.org/source/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule": { @@ -78,10 +78,10 @@ "category": "Permissive", "owner": "OpenSSL", "homepage_url": "http://openssl.org/source/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule": { diff --git a/tests/formattedcode/data/csv/flatten_scan/minimal.json-expected b/tests/formattedcode/data/csv/flatten_scan/minimal.json-expected index 8e764283078..414a34f3ab7 100644 --- a/tests/formattedcode/data/csv/flatten_scan/minimal.json-expected +++ b/tests/formattedcode/data/csv/flatten_scan/minimal.json-expected @@ -22,10 +22,10 @@ "license__category": "Permissive", "license__owner": "OpenSSL", "license__homepage_url": "http://openssl.org/source/license.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule__identifier": "openssl_8.RULE", @@ -57,10 +57,10 @@ "license__category": "Permissive", "license__owner": "OpenSSL", "license__homepage_url": "http://openssl.org/source/license.html", - "license__text_url": "", + "license__text_url": null, "license__reference_url": "https://scancode-licensedb.aboutcode.org/openssl", "license__spdx_license_key": "", - "license__spdx_url": "", + "license__spdx_url": null, "start_line": 4, "end_line": 7, "matched_rule__identifier": "openssl_8.RULE", diff --git a/tests/formattedcode/data/csv/non-standard/identified.json b/tests/formattedcode/data/csv/non-standard/identified.json index 3dd9c531e03..6ddbed00dc9 100644 --- a/tests/formattedcode/data/csv/non-standard/identified.json +++ b/tests/formattedcode/data/csv/non-standard/identified.json @@ -69,7 +69,7 @@ "license_choices_expression": null, "license_choices": [], "reference_notes": "", - "homepage_url": "", + "homepage_url": null, "notice_text": "", "components": [ { diff --git a/tests/formattedcode/data/reuse/vb.json b/tests/formattedcode/data/reuse/vb.json index 46a656dfbf4..64f4efd2f6b 100644 --- a/tests/formattedcode/data/reuse/vb.json +++ b/tests/formattedcode/data/reuse/vb.json @@ -541,11 +541,11 @@ "is_exception": false, "is_unknown": false, "owner": "JBoss Community", - "homepage_url": "", + "homepage_url": null, "text_url": "http://repository.jboss.org/licenses/jbossorg-eula.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/jboss-eula", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 108, "matched_rule": { @@ -1557,10 +1557,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1649, "end_line": 1649, "matched_rule": { @@ -1585,10 +1585,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1692, "end_line": 1692, "matched_rule": { @@ -2270,11 +2270,11 @@ "is_exception": true, "is_unknown": false, "owner": "Dmitriy Anisimkov", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 25, "matched_rule": { @@ -2986,11 +2986,11 @@ "is_exception": false, "is_unknown": false, "owner": "CMR - Christian Michelsen Research AS", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/cmr-no", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.LICENSE b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.LICENSE new file mode 100644 index 00000000000..8fe2a4b5ad1 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.LICENSE @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.yml b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.yml new file mode 100644 index 00000000000..0977bcdb733 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example1.yml @@ -0,0 +1,6 @@ +key: example1 +short_name: Example External License 1 +name: Example External License 1 +category: Permissive +owner: NexB +spdx_license_key: scancode-example1 diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.LICENSE b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.LICENSE new file mode 100644 index 00000000000..4abca0c149f --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.LICENSE @@ -0,0 +1,7 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, +sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi +ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit +in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia +deserunt mollit anim id est laborum. diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.yml b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.yml new file mode 100644 index 00000000000..962caeb2f91 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/licenses/example2.yml @@ -0,0 +1,6 @@ +key: example2 +short_name: Example External License 2 +name: Example External License 2 +category: Permissive +owner: NexB +spdx_license_key: scancode-example2 diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.RULE b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.RULE new file mode 100644 index 00000000000..ef512c3e024 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.RULE @@ -0,0 +1,2 @@ +The quick brown fox jumps over the lazy dog. +The quick brown fox jumps over the lazy dog. \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.yml b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.yml new file mode 100644 index 00000000000..96535e6c24b --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example1_1.yml @@ -0,0 +1,2 @@ +license_expression: example1 +is_license_text: yes \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.RULE b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.RULE new file mode 100644 index 00000000000..c27a1f5e008 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.RULE @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit diff --git a/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.yml b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.yml new file mode 100644 index 00000000000..0a6aebb4284 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_dir/rules/example2.yml @@ -0,0 +1,2 @@ +license_expression: example2 +is_license_text: yes \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_license_combined_test.expected.json b/tests/licensedcode/data/additional_licenses/additional_license_combined_test.expected.json new file mode 100644 index 00000000000..040f1b17102 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_combined_test.expected.json @@ -0,0 +1,214 @@ +{ + "files": [ + { + "path": "additional_license_combined_test.txt", + "type": "file", + "licenses": [ + { + "key": "example-installed-1", + "score": 100.0, + "name": "Example Installed License 1", + "short_name": "Example Installed License 1", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example-installed1", + "spdx_url": "https://spdx.org/licenses/scancode-example-installed1", + "start_line": 1, + "end_line": 1, + "matched_rule": { + "identifier": "example-installed-1.LICENSE", + "license_expression": "example-installed-1", + "licenses": [ + "example-installed-1" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 11, + "matched_length": 11, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + }, + { + "key": "example-installed-2", + "score": 100.0, + "name": "Example Installed License 2", + "short_name": "Example Installed License 2", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "LicenseRef-scancode-example-installed2", + "spdx_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/example-installed-2.LICENSE", + "start_line": 3, + "end_line": 3, + "matched_rule": { + "identifier": "example-installed-2.LICENSE", + "license_expression": "example-installed-2", + "licenses": [ + "example-installed-2" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 12, + "matched_length": 12, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + }, + { + "key": "example1", + "score": 100.0, + "name": "Example External License 1", + "short_name": "Example External License 1", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example1", + "spdx_url": "https://spdx.org/licenses/scancode-example1", + "start_line": 5, + "end_line": 5, + "matched_rule": { + "identifier": "example1.LICENSE", + "license_expression": "example1", + "licenses": [ + "example1" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 9, + "matched_length": 9, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + }, + { + "key": "example2", + "score": 100.0, + "name": "Example External License 2", + "short_name": "Example External License 2", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example2", + "spdx_url": "https://spdx.org/licenses/scancode-example2", + "start_line": 5, + "end_line": 9, + "matched_rule": { + "identifier": "example2.LICENSE", + "license_expression": "example2", + "licenses": [ + "example2" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 69, + "matched_length": 69, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + }, + { + "key": "apache-2.0", + "score": 100.0, + "name": "Apache License 2.0", + "short_name": "Apache 2.0", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "Apache Software Foundation", + "homepage_url": "http://www.apache.org/licenses/", + "text_url": "http://www.apache.org/licenses/LICENSE-2.0", + "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", + "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE", + "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", + "spdx_license_key": "Apache-2.0", + "spdx_url": "https://spdx.org/licenses/Apache-2.0", + "start_line": 12, + "end_line": 12, + "matched_rule": { + "identifier": "apache-2.0_65.RULE", + "license_expression": "apache-2.0", + "licenses": [ + "apache-2.0" + ], + "referenced_filenames": [], + "is_license_text": false, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": true, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 4, + "matched_length": 4, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": true + } + } + ], + "license_expressions": [ + "example-installed-1", + "example-installed-2", + "example1", + "example2", + "apache-2.0" + ], + "percentage_of_license_text": 96.33, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_license_combined_test.txt b/tests/licensedcode/data/additional_licenses/additional_license_combined_test.txt new file mode 100644 index 00000000000..35e4a2e0b66 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_combined_test.txt @@ -0,0 +1,12 @@ +This is a test license that must be installed into ScanCode Toolkit. + +This is a test license EXAMPLE2 that must be installed into ScanCode Toolkit. + +The quick brown fox jumps over the lazy dog. Lorem ipsum dolor sit amet, consectetur adipiscing elit, +sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud +exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit +in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, +sunt in culpa qui officia deserunt mollit anim id est laborum. +This is a test license. + +License: Apache-2.0 diff --git a/tests/licensedcode/data/additional_licenses/additional_license_directory_test.expected.json b/tests/licensedcode/data/additional_licenses/additional_license_directory_test.expected.json new file mode 100644 index 00000000000..2ae9fcfcdf1 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_directory_test.expected.json @@ -0,0 +1,94 @@ +{ + "files": [ + { + "path": "additional_license_directory_test.txt", + "type": "file", + "licenses": [ + { + "key": "example1", + "score": 100.0, + "name": "Example External License 1", + "short_name": "Example External License 1", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example1", + "spdx_url": "https://spdx.org/licenses/scancode-example1", + "start_line": 1, + "end_line": 1, + "matched_rule": { + "identifier": "example1.LICENSE", + "license_expression": "example1", + "licenses": [ + "example1" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 9, + "matched_length": 9, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + }, + { + "key": "example2", + "score": 100.0, + "name": "Example External License 2", + "short_name": "Example External License 2", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example2", + "spdx_url": "https://spdx.org/licenses/scancode-example2", + "start_line": 1, + "end_line": 5, + "matched_rule": { + "identifier": "example2.LICENSE", + "license_expression": "example2", + "licenses": [ + "example2" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "2-aho", + "rule_length": 69, + "matched_length": 69, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + } + ], + "license_expressions": [ + "example1", + "example2" + ], + "percentage_of_license_text": 95.12, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_license_directory_test.txt b/tests/licensedcode/data/additional_licenses/additional_license_directory_test.txt new file mode 100644 index 00000000000..0eacf6b73a6 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_directory_test.txt @@ -0,0 +1,6 @@ +The quick brown fox jumps over the lazy dog. Lorem ipsum dolor sit amet, consectetur adipiscing elit, +sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud +exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit +in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, +sunt in culpa qui officia deserunt mollit anim id est laborum. +This is a test license. diff --git a/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.expected.json b/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.expected.json new file mode 100644 index 00000000000..1f5dbb0524f --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.expected.json @@ -0,0 +1,54 @@ +{ + "files": [ + { + "path": "additional_license_plugin_test.txt", + "type": "file", + "licenses": [ + { + "key": "example-installed-1", + "score": 100.0, + "name": "Example Installed License 1", + "short_name": "Example Installed License 1", + "category": "Permissive", + "is_exception": false, + "is_unknown": false, + "owner": "NexB", + "homepage_url": null, + "text_url": null, + "reference_url": null, + "scancode_text_url": null, + "scancode_data_url": null, + "spdx_license_key": "scancode-example-installed1", + "spdx_url": "https://spdx.org/licenses/scancode-example-installed1", + "start_line": 1, + "end_line": 1, + "matched_rule": { + "identifier": "example-installed-1.LICENSE", + "license_expression": "example-installed-1", + "licenses": [ + "example-installed-1" + ], + "referenced_filenames": [], + "is_license_text": true, + "is_license_notice": false, + "is_license_reference": false, + "is_license_tag": false, + "is_license_intro": false, + "has_unknown": false, + "matcher": "1-hash", + "rule_length": 11, + "matched_length": 11, + "match_coverage": 100.0, + "rule_relevance": 100, + "is_builtin": false + } + } + ], + "license_expressions": [ + "example-installed-1" + ], + "percentage_of_license_text": 100.0, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.txt b/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.txt new file mode 100644 index 00000000000..f0455cbed1b --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_license_plugin_test.txt @@ -0,0 +1 @@ +This is a test license that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/.gitignore b/tests/licensedcode/data/additional_licenses/additional_plugin_1/.gitignore new file mode 100644 index 00000000000..95832e8eb97 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/.gitignore @@ -0,0 +1,2 @@ +/build/ +/dist/ \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/MANIFEST.in b/tests/licensedcode/data/additional_licenses/additional_plugin_1/MANIFEST.in new file mode 100644 index 00000000000..b566ab1f35d --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/MANIFEST.in @@ -0,0 +1,7 @@ +graft src +graft thirdparty + +include setup.* +include *.rst +include *LICENSE* +include *NOTICE* \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.cfg b/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.cfg new file mode 100644 index 00000000000..f5483e8ca2e --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.cfg @@ -0,0 +1,6 @@ +[metadata] +license_files = + test.LICENSE + +[aliases] +release = clean --all bdist_wheel --plat-name manylinux1_x86_64 --python-tag py3 \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.py b/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.py new file mode 100644 index 00000000000..48f5e5f65f2 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/setup.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from glob import glob +from os.path import basename +from os.path import splitext + +from setuptools import find_packages +from setuptools import setup + + +desc = '''A ScanCode path provider plugin to provide a set of example external licenses that can be installed.''' + +setup( + name='licenses_to_install1', + version='1.0', + license=( + 'apache-2.0 AND bsd-simplified-darwin AND (bsd-simplified AND public-domain AND ' + 'bsd-new AND isc AND (bsd-new OR gpl-1.0-plus) AND bsd-original)' + ), + description=desc, + long_description=desc, + author='nexB', + author_email='info@aboutcode.org', + url='https://github.com/nexB/scancode-plugins', + packages=find_packages('src'), + package_dir={'': 'src'}, + include_package_data=True, + py_modules=[splitext(basename(path))[0] for path in glob('src/*.py')], + zip_safe=False, + classifiers=[ + # complete classifier list: http://pypi.python.org/pypi?%3Aaction=list_classifiers + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'Topic :: Utilities', + ], + keywords=[ + 'open source', 'scancode_licenses', + ], + install_requires=[ + 'scancode-toolkit', + ], + entry_points={ + 'scancode_additional_license_location_provider': [ + 'licenses_to_install1 = licenses_to_install1:LicensesToInstall1Paths', + ], + }, +) \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/__init__.py b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/__init__.py new file mode 100644 index 00000000000..24ac5028c97 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/__init__.py @@ -0,0 +1,37 @@ +# +# Copyright (c) nexB Inc. and others. +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this list +# of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, this +# list of conditions and the following disclaimer in the documentation and/or +# other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +from os.path import abspath +from os.path import dirname + +from licensedcode.additional_license_location_provider import AdditionalLicenseLocationProviderPlugin + + +class LicensesToInstall1Paths(AdditionalLicenseLocationProviderPlugin): + def get_locations(self): + curr_dir = dirname(abspath(__file__)) + locations = { + 'licenses_to_install1': curr_dir, + } + return locations diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.LICENSE b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.LICENSE new file mode 100644 index 00000000000..f0455cbed1b --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.LICENSE @@ -0,0 +1 @@ +This is a test license that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.yml new file mode 100644 index 00000000000..df3f186d537 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/licenses/example-installed-1.yml @@ -0,0 +1,6 @@ +key: example-installed-1 +short_name: Example Installed License 1 +name: Example Installed License 1 +category: Permissive +owner: NexB +spdx_license_key: scancode-example-installed1 diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.RULE b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.RULE new file mode 100644 index 00000000000..bb701de0a88 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.RULE @@ -0,0 +1 @@ +This is a test rule that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.yml new file mode 100644 index 00000000000..77dde8a776f --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/src/licenses_to_install1/rules/example-installed-1.yml @@ -0,0 +1,2 @@ +license_expression: example-installed-1 +is_license_text: yes diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/test.LICENSE b/tests/licensedcode/data/additional_licenses/additional_plugin_1/test.LICENSE new file mode 100644 index 00000000000..6c7f04de819 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/test.LICENSE @@ -0,0 +1 @@ +This is a test license. That's all there is to it! \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt new file mode 100644 index 00000000000..c4d8e86562e --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt @@ -0,0 +1,4 @@ +This is a test license that must be installed into ScanCode Toolkit. +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor +incididunt ut labore et dolore magna aliqua. + diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt.yml new file mode 100644 index 00000000000..52d347c614c --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/data/example-installed-1.txt.yml @@ -0,0 +1,2 @@ +license_expressions: + - example-installed-1 diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/test_detection_datadriven.py b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/test_detection_datadriven.py new file mode 100644 index 00000000000..c375c0417f2 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_1/tests/test_detection_datadriven.py @@ -0,0 +1,34 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + +from os.path import abspath +from os.path import join +from os.path import dirname +import unittest + +from licensedcode_test_utils import build_tests # NOQA +from scancode_config import REGEN_TEST_FIXTURES + + + +""" +Data-driven tests using expectations stored in YAML files. +Test functions are attached to test classes at module import time +""" + +TEST_DIR = abspath(join(dirname(__file__), 'data')) + + +class TestLicenseDataDriven(unittest.TestCase): + pass + + +build_tests( + TEST_DIR, + clazz=TestLicenseDataDriven, regen=REGEN_TEST_FIXTURES) diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/MANIFEST.in b/tests/licensedcode/data/additional_licenses/additional_plugin_2/MANIFEST.in new file mode 100644 index 00000000000..b566ab1f35d --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/MANIFEST.in @@ -0,0 +1,7 @@ +graft src +graft thirdparty + +include setup.* +include *.rst +include *LICENSE* +include *NOTICE* \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/__init__.py b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/__init__.py new file mode 100644 index 00000000000..0517ee847cb --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/__init__.py @@ -0,0 +1,21 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# +from os.path import abspath +from os.path import dirname + +from licensedcode.additional_license_location_provider import AdditionalLicenseLocationProviderPlugin + + +class LicensesToInstall2Paths(AdditionalLicenseLocationProviderPlugin): + def get_locations(self): + curr_dir = dirname(abspath(__file__)) + locations = { + 'licenses_to_install2': curr_dir, + } + return locations diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.LICENSE b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.LICENSE new file mode 100644 index 00000000000..13658412786 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.LICENSE @@ -0,0 +1 @@ +This is a test license EXAMPLE2 that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.yml new file mode 100644 index 00000000000..8eb9217e9a0 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/licenses/example-installed-2.yml @@ -0,0 +1,6 @@ +key: example-installed-2 +short_name: Example Installed License 2 +name: Example Installed License 2 +category: Permissive +owner: NexB +spdx_license_key: LicenseRef-scancode-example-installed2 diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.RULE b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.RULE new file mode 100644 index 00000000000..3c54d093ef2 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.RULE @@ -0,0 +1 @@ +This is a test rule EXAMPLE2 that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.yml new file mode 100644 index 00000000000..fee21dca76e --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/build/lib/licenses_to_install2/rules/example-installed-2.yml @@ -0,0 +1,2 @@ +license_expression: example-installed-2 +is_license_text: yes diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.cfg b/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.cfg new file mode 100644 index 00000000000..f5483e8ca2e --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.cfg @@ -0,0 +1,6 @@ +[metadata] +license_files = + test.LICENSE + +[aliases] +release = clean --all bdist_wheel --plat-name manylinux1_x86_64 --python-tag py3 \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.py b/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.py new file mode 100644 index 00000000000..b166e32c436 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/setup.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from glob import glob +from os.path import basename +from os.path import splitext + +from setuptools import find_packages +from setuptools import setup + + +desc = '''A ScanCode path provider plugin to provide a set of example external licenses 2 that can be installed.''' + +setup( + name='licenses_to_install2', + version='1.0', + license='apache-2.0', + description=desc, + long_description=desc, + author='nexB', + author_email='info@aboutcode.org', + url='https://github.com/nexB/scancode-plugins', + packages=find_packages('src'), + package_dir={'': 'src'}, + include_package_data=True, + py_modules=[splitext(basename(path))[0] for path in glob('src/*.py')], + zip_safe=False, + classifiers=[ + # complete classifier list: http://pypi.python.org/pypi?%3Aaction=list_classifiers + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Developers', + 'Topic :: Utilities', + ], + keywords=[ + 'open source', 'scancode_licenses', + ], + install_requires=[ + 'scancode-toolkit', + ], + entry_points={ + 'scancode_additional_license_location_provider': [ + 'licenses_to_install2 = licenses_to_install2:LicensesToInstall2Paths', + ], + }, +) \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/__init__.py b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/__init__.py new file mode 100644 index 00000000000..0517ee847cb --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/__init__.py @@ -0,0 +1,21 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# +from os.path import abspath +from os.path import dirname + +from licensedcode.additional_license_location_provider import AdditionalLicenseLocationProviderPlugin + + +class LicensesToInstall2Paths(AdditionalLicenseLocationProviderPlugin): + def get_locations(self): + curr_dir = dirname(abspath(__file__)) + locations = { + 'licenses_to_install2': curr_dir, + } + return locations diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.LICENSE b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.LICENSE new file mode 100644 index 00000000000..13658412786 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.LICENSE @@ -0,0 +1 @@ +This is a test license EXAMPLE2 that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.yml new file mode 100644 index 00000000000..8eb9217e9a0 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/licenses/example-installed-2.yml @@ -0,0 +1,6 @@ +key: example-installed-2 +short_name: Example Installed License 2 +name: Example Installed License 2 +category: Permissive +owner: NexB +spdx_license_key: LicenseRef-scancode-example-installed2 diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.RULE b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.RULE new file mode 100644 index 00000000000..3c54d093ef2 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.RULE @@ -0,0 +1 @@ +This is a test rule EXAMPLE2 that must be installed into ScanCode Toolkit. diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.yml b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.yml new file mode 100644 index 00000000000..fee21dca76e --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/src/licenses_to_install2/rules/example-installed-2.yml @@ -0,0 +1,2 @@ +license_expression: example-installed-2 +is_license_text: yes diff --git a/tests/licensedcode/data/additional_licenses/additional_plugin_2/test.LICENSE b/tests/licensedcode/data/additional_licenses/additional_plugin_2/test.LICENSE new file mode 100644 index 00000000000..6c7f04de819 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/additional_plugin_2/test.LICENSE @@ -0,0 +1 @@ +This is a test license. That's all there is to it! \ No newline at end of file diff --git a/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.LICENSE b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.LICENSE new file mode 100644 index 00000000000..7348616c691 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.LICENSE @@ -0,0 +1,5 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION diff --git a/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.yml b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.yml new file mode 100644 index 00000000000..bf429e47547 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-apache-2.0.yml @@ -0,0 +1,11 @@ +key: test-apache-2.0 +short_name: Apache 2.0 +name: Apache License 2.0 +category: Permissive +owner: Apache Software Foundation +homepage_url: http://www.apache.org/licenses/ +spdx_license_key: Apache-2.0 +text_urls: + - http://www.apache.org/licenses/LICENSE-2.0 +osi_url: http://opensource.org/licenses/apache2.0.php +faq_url: http://www.apache.org/foundation/licence-FAQ.html diff --git a/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.LICENSE b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.LICENSE new file mode 100644 index 00000000000..7348616c691 --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.LICENSE @@ -0,0 +1,5 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION diff --git a/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.yml b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.yml new file mode 100644 index 00000000000..55ea8536e4b --- /dev/null +++ b/tests/licensedcode/data/additional_licenses/validate_licenses/licenses/test-bsd-ack-carrot2.yml @@ -0,0 +1 @@ +key: test-bsd-ack-carrot2 diff --git a/tests/licensedcode/data/cache/data/licenses/anu-license.yml b/tests/licensedcode/data/cache/data/licenses/anu-license.yml index b882cd3fb46..6abd0c4ffff 100644 --- a/tests/licensedcode/data/cache/data/licenses/anu-license.yml +++ b/tests/licensedcode/data/cache/data/licenses/anu-license.yml @@ -1,7 +1,7 @@ key: anu-license short_name: ANU License name: Australian National University License - +spdx_license_key: LicenseRef-scancode-anu-license category: Permissive owner: ANU Data Mining Group other_urls: diff --git a/tests/licensedcode/data/cache/data/licenses/public-domain.yml b/tests/licensedcode/data/cache/data/licenses/public-domain.yml index 4c18396893c..2f7a0734165 100644 --- a/tests/licensedcode/data/cache/data/licenses/public-domain.yml +++ b/tests/licensedcode/data/cache/data/licenses/public-domain.yml @@ -1,7 +1,7 @@ key: public-domain short_name: Public Domain name: Public Domain - +spdx_license_key: LicenseRef-scancode-public-domain category: Public Domain owner: Unspecified homepage_url: http://www.linfo.org/publicdomain.html diff --git a/tests/licensedcode/data/cache/data/licenses/unknown-spdx.yml b/tests/licensedcode/data/cache/data/licenses/unknown-spdx.yml index 251792bd21f..36eea084958 100644 --- a/tests/licensedcode/data/cache/data/licenses/unknown-spdx.yml +++ b/tests/licensedcode/data/cache/data/licenses/unknown-spdx.yml @@ -3,3 +3,4 @@ short_name: unknown SPDX name: Unknown SPDX license detected, but not recognized category: Unstated License owner: Unspecified +spdx_license_key: LicenseRef-scancode-unknown-spdx \ No newline at end of file diff --git a/tests/licensedcode/data/cache/data/licenses/unknown.yml b/tests/licensedcode/data/cache/data/licenses/unknown.yml index 377d35cb668..dab5846e3fa 100644 --- a/tests/licensedcode/data/cache/data/licenses/unknown.yml +++ b/tests/licensedcode/data/cache/data/licenses/unknown.yml @@ -3,3 +3,4 @@ short_name: unknown name: Unknown license detected, but not recognized category: Unstated License owner: Unspecified +spdx_license_key: LicenseRef-scancode-unknown \ No newline at end of file diff --git a/tests/licensedcode/data/models/licenses.dump.expected.json b/tests/licensedcode/data/models/licenses.dump.expected.json index d40d73d1f87..2f8161da57c 100644 --- a/tests/licensedcode/data/models/licenses.dump.expected.json +++ b/tests/licensedcode/data/models/licenses.dump.expected.json @@ -6,6 +6,7 @@ "category": "Permissive", "owner": "Apache Software Foundation", "homepage_url": "http://www.apache.org/licenses/", + "is_builtin": true, "spdx_license_key": "Apache-2.0", "text_urls": [ "http://www.apache.org/licenses/LICENSE-2.0" @@ -20,6 +21,7 @@ "category": "Permissive", "owner": "Carrot2", "homepage_url": "http://www.carrot2.org/carrot2.LICENSE", + "is_builtin": true, "spdx_license_key": "LicenseRef-scancode-bsd-ack-carrot2", "minimum_coverage": 80 }, @@ -30,6 +32,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-1.0.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: February 1989.\n", "spdx_license_key": "GPL-1.0", "text_urls": [ @@ -47,6 +50,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: February 1989.\n", "spdx_license_key": "GPL-1.0+" }, @@ -57,6 +61,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-2.0.html", + "is_builtin": true, "notes": "This is the last version of the GPL text as published by the FSF. This license was released: June 1991 This license is OSI certified.\n", "spdx_license_key": "GPL-2.0", "text_urls": [ @@ -77,6 +82,7 @@ "short_name": "GPL 2.0 with Library exception", "name": "GNU General Public License 2.0 with Library exception", "category": "Copyleft Limited", + "is_builtin": true, "owner": "Grammatica", "is_exception": true, "spdx_license_key": "LicenseRef-scancode-gpl-2.0-library", @@ -91,6 +97,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: June 1991 This license is OSI certified.\n", "spdx_license_key": "GPL-2.0+" }, @@ -101,6 +108,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-3.0.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: 29 June 2007 This license is OSI certified.\n", "spdx_license_key": "GPL-3.0", "text_urls": [ @@ -120,6 +128,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-3.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: 29 June 2007 This license is OSI certified.\n", "spdx_license_key": "GPL-3.0+" }, @@ -130,6 +139,7 @@ "category": "Free Restricted", "owner": "W3C - World Wide Web Consortium", "homepage_url": "http://www.w3.org/Consortium/Legal/copyright-documents-19990405", + "is_builtin": true, "spdx_license_key": "LicenseRef-scancode-w3c-docs-19990405" } ] \ No newline at end of file diff --git a/tests/licensedcode/data/models/licenses.load.expected.json b/tests/licensedcode/data/models/licenses.load.expected.json index e242729dd6b..c0f34e2f7ec 100644 --- a/tests/licensedcode/data/models/licenses.load.expected.json +++ b/tests/licensedcode/data/models/licenses.load.expected.json @@ -6,6 +6,7 @@ "category": "Permissive", "owner": "Apache Software Foundation", "homepage_url": "http://www.apache.org/licenses/", + "is_builtin": true, "spdx_license_key": "Apache-2.0", "text_urls": [ "http://www.apache.org/licenses/LICENSE-2.0" @@ -20,6 +21,7 @@ "category": "Permissive", "owner": "Carrot2", "homepage_url": "http://www.carrot2.org/carrot2.LICENSE", + "is_builtin": true, "spdx_license_key": "LicenseRef-scancode-bsd-ack-carrot2", "minimum_coverage": 80 }, @@ -30,6 +32,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-1.0.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: February 1989.", "spdx_license_key": "GPL-1.0", "text_urls": [ @@ -47,6 +50,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: February 1989.", "spdx_license_key": "GPL-1.0+" }, @@ -57,6 +61,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-2.0.html", + "is_builtin": true, "notes": "This is the last version of the GPL text as published by the FSF. This license was released: June 1991 This license is OSI certified.\n", "spdx_license_key": "GPL-2.0", "text_urls": [ @@ -77,6 +82,7 @@ "short_name": "GPL 2.0 with Library exception", "name": "GNU General Public License 2.0 with Library exception", "category": "Copyleft Limited", + "is_builtin": true, "owner": "Grammatica", "is_exception": true, "spdx_license_key": "LicenseRef-scancode-gpl-2.0-library", @@ -91,6 +97,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: June 1991 This license is OSI certified.", "spdx_license_key": "GPL-2.0+" }, @@ -101,6 +108,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-3.0.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: 29 June 2007 This license is OSI certified.", "spdx_license_key": "GPL-3.0", "text_urls": [ @@ -120,6 +128,7 @@ "category": "Copyleft", "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/licenses/gpl-3.0-standalone.html", + "is_builtin": true, "notes": "notes from SPDX:\nThis license was released: 29 June 2007 This license is OSI certified.", "spdx_license_key": "GPL-3.0+" }, @@ -130,6 +139,7 @@ "category": "Free Restricted", "owner": "W3C - World Wide Web Consortium", "homepage_url": "http://www.w3.org/Consortium/Legal/copyright-documents-19990405", + "is_builtin": true, "spdx_license_key": "LicenseRef-scancode-w3c-docs-19990405" } ] \ No newline at end of file diff --git a/tests/licensedcode/data/plugin_license/license-expression/scan.expected.json b/tests/licensedcode/data/plugin_license/license-expression/scan.expected.json index 3e7194b16b5..6e6e57ae752 100644 --- a/tests/licensedcode/data/plugin_license/license-expression/scan.expected.json +++ b/tests/licensedcode/data/plugin_license/license-expression/scan.expected.json @@ -103,7 +103,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", diff --git a/tests/licensedcode/data/plugin_license/license_reference/license-ref-see-copying.expected.json b/tests/licensedcode/data/plugin_license/license_reference/license-ref-see-copying.expected.json index 45491ebfd68..4f559a976a3 100644 --- a/tests/licensedcode/data/plugin_license/license_reference/license-ref-see-copying.expected.json +++ b/tests/licensedcode/data/plugin_license/license_reference/license-ref-see-copying.expected.json @@ -64,7 +64,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", diff --git a/tests/licensedcode/data/plugin_license/license_reference/scan-ref.expected.json b/tests/licensedcode/data/plugin_license/license_reference/scan-ref.expected.json index 584192a1970..89de003f331 100644 --- a/tests/licensedcode/data/plugin_license/license_reference/scan-ref.expected.json +++ b/tests/licensedcode/data/plugin_license/license_reference/scan-ref.expected.json @@ -64,7 +64,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", diff --git a/tests/licensedcode/data/plugin_license/license_reference/scan-wref.expected.json b/tests/licensedcode/data/plugin_license/license_reference/scan-wref.expected.json index 518e35174ff..673f1c3e267 100644 --- a/tests/licensedcode/data/plugin_license/license_reference/scan-wref.expected.json +++ b/tests/licensedcode/data/plugin_license/license_reference/scan-wref.expected.json @@ -14,7 +14,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", diff --git a/tests/licensedcode/data/plugin_license/license_url.expected.json b/tests/licensedcode/data/plugin_license/license_url/license_url.expected.json similarity index 96% rename from tests/licensedcode/data/plugin_license/license_url.expected.json rename to tests/licensedcode/data/plugin_license/license_url/license_url.expected.json index 1440419832d..d8c8e62c87e 100644 --- a/tests/licensedcode/data/plugin_license/license_url.expected.json +++ b/tests/licensedcode/data/plugin_license/license_url/license_url.expected.json @@ -1,7 +1,7 @@ { "files": [ { - "path": "license_url", + "path": "scan", "type": "directory", "licenses": [], "license_expressions": [], @@ -9,7 +9,7 @@ "scan_errors": [] }, { - "path": "license_url/apache-1.0.txt", + "path": "scan/apache-1.0.txt", "type": "file", "licenses": [ { diff --git a/tests/licensedcode/data/plugin_license/license_url/apache-1.0.txt b/tests/licensedcode/data/plugin_license/license_url/scan/apache-1.0.txt similarity index 100% rename from tests/licensedcode/data/plugin_license/license_url/apache-1.0.txt rename to tests/licensedcode/data/plugin_license/license_url/scan/apache-1.0.txt diff --git a/tests/licensedcode/data/plugin_license/sqlite/sqlite.expected.json b/tests/licensedcode/data/plugin_license/sqlite/sqlite.expected.json index 4677e3319d1..40a86e8d737 100644 --- a/tests/licensedcode/data/plugin_license/sqlite/sqlite.expected.json +++ b/tests/licensedcode/data/plugin_license/sqlite/sqlite.expected.json @@ -22,7 +22,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -61,7 +61,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -100,7 +100,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -139,7 +139,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -178,7 +178,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -217,7 +217,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -256,7 +256,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -295,7 +295,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -334,7 +334,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -373,7 +373,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -412,7 +412,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -451,7 +451,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -490,7 +490,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -529,7 +529,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -568,7 +568,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -607,7 +607,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -646,7 +646,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -685,7 +685,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -724,7 +724,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -763,7 +763,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -802,7 +802,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -841,7 +841,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -880,7 +880,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -919,7 +919,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -958,7 +958,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -997,7 +997,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1036,7 +1036,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1075,7 +1075,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1114,7 +1114,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1153,7 +1153,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1192,7 +1192,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1231,7 +1231,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1270,7 +1270,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1309,7 +1309,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1348,7 +1348,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1387,7 +1387,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1426,7 +1426,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1465,7 +1465,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1504,7 +1504,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1543,7 +1543,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1582,7 +1582,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1621,7 +1621,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1660,7 +1660,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1699,7 +1699,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1738,7 +1738,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1777,7 +1777,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1816,7 +1816,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1855,7 +1855,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1894,7 +1894,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1933,7 +1933,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -1972,7 +1972,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2011,7 +2011,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2050,7 +2050,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2089,7 +2089,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2128,7 +2128,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2167,7 +2167,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2206,7 +2206,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2245,7 +2245,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2284,7 +2284,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2323,7 +2323,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2362,7 +2362,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2401,7 +2401,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2440,7 +2440,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2479,7 +2479,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2518,7 +2518,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2557,7 +2557,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2596,7 +2596,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2635,7 +2635,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2674,7 +2674,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2713,7 +2713,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2752,7 +2752,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2791,7 +2791,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2830,7 +2830,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2869,7 +2869,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2908,7 +2908,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2947,7 +2947,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -2986,7 +2986,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3025,7 +3025,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3064,7 +3064,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3103,7 +3103,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3142,7 +3142,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3181,7 +3181,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3220,7 +3220,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3259,7 +3259,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3298,7 +3298,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3337,7 +3337,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3376,7 +3376,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3415,7 +3415,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3454,7 +3454,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3493,7 +3493,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3532,7 +3532,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3571,7 +3571,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3610,7 +3610,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3649,7 +3649,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3688,7 +3688,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3727,7 +3727,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3766,7 +3766,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3805,7 +3805,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3844,7 +3844,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3883,7 +3883,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3922,7 +3922,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -3961,7 +3961,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4000,7 +4000,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4039,7 +4039,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4078,7 +4078,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4117,7 +4117,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4156,7 +4156,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4195,7 +4195,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4234,7 +4234,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4273,7 +4273,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4312,7 +4312,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4351,7 +4351,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4390,7 +4390,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4429,7 +4429,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4468,7 +4468,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4507,7 +4507,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4546,7 +4546,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4585,7 +4585,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4624,7 +4624,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4663,7 +4663,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4702,7 +4702,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4741,7 +4741,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4780,7 +4780,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4819,7 +4819,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4858,7 +4858,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4897,7 +4897,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4936,7 +4936,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -4975,7 +4975,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5014,7 +5014,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5053,7 +5053,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5092,7 +5092,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5131,7 +5131,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5170,7 +5170,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5209,7 +5209,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5248,7 +5248,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", @@ -5287,7 +5287,7 @@ "is_unknown": false, "owner": "SQLite", "homepage_url": "https://sqlite.org/src/artifact/df5091916dbb40e6", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/blessing", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/blessing.yml", diff --git a/tests/licensedcode/data/plugin_license/text/scan-diag.expected.json b/tests/licensedcode/data/plugin_license/text/scan-diag.expected.json index fe6ec0220d8..01d2e50b188 100644 --- a/tests/licensedcode/data/plugin_license/text/scan-diag.expected.json +++ b/tests/licensedcode/data/plugin_license/text/scan-diag.expected.json @@ -55,7 +55,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", @@ -148,7 +148,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/fsf-ap.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/fsf-ap.yml", diff --git a/tests/licensedcode/data/plugin_license/text/scan.expected.json b/tests/licensedcode/data/plugin_license/text/scan.expected.json index bc0d7454980..64905fc8e66 100644 --- a/tests/licensedcode/data/plugin_license/text/scan.expected.json +++ b/tests/licensedcode/data/plugin_license/text/scan.expected.json @@ -55,7 +55,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", @@ -148,7 +148,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/fsf-ap.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/fsf-ap.yml", diff --git a/tests/licensedcode/data/plugin_license/text_long_lines/scan-diag.expected.json b/tests/licensedcode/data/plugin_license/text_long_lines/scan-diag.expected.json index baab28de655..212137b10dc 100644 --- a/tests/licensedcode/data/plugin_license/text_long_lines/scan-diag.expected.json +++ b/tests/licensedcode/data/plugin_license/text_long_lines/scan-diag.expected.json @@ -55,7 +55,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", diff --git a/tests/licensedcode/data/plugin_license/text_long_lines/scan.expected.json b/tests/licensedcode/data/plugin_license/text_long_lines/scan.expected.json index baab28de655..212137b10dc 100644 --- a/tests/licensedcode/data/plugin_license/text_long_lines/scan.expected.json +++ b/tests/licensedcode/data/plugin_license/text_long_lines/scan.expected.json @@ -55,7 +55,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", diff --git a/tests/licensedcode/data/plugin_license_text/scan.expected.json b/tests/licensedcode/data/plugin_license_text/scan.expected.json index 2c0c890494d..3bf1a7663b3 100644 --- a/tests/licensedcode/data/plugin_license_text/scan.expected.json +++ b/tests/licensedcode/data/plugin_license_text/scan.expected.json @@ -198,7 +198,7 @@ "is_unknown": false, "owner": "JA-SIG Collaborative", "homepage_url": "http://web.archive.org/web/20040402030132/http://uportal.org/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ja-sig", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ja-sig.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ja-sig.yml", @@ -351,7 +351,7 @@ "is_unknown": false, "owner": "Linux Foundation", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/linux-syscall-exception-gpl", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/linux-syscall-exception-gpl.yml", @@ -464,7 +464,7 @@ "is_unknown": false, "owner": "JA-SIG Collaborative", "homepage_url": "http://web.archive.org/web/20040402030132/http://uportal.org/license.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ja-sig", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ja-sig.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ja-sig.yml", diff --git a/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json b/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json index 566311e3c72..6aee6965e7b 100644 --- a/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json +++ b/tests/licensedcode/data/plugin_licenses_reference/scan.expected.json @@ -66,6 +66,7 @@ "owner": "Apache Software Foundation", "homepage_url": "http://www.apache.org/licenses/", "notes": "Per SPDX.org, this version was released January 2004 This license is OSI\ncertified\n", + "is_builtin": true, "spdx_license_key": "Apache-2.0", "other_spdx_license_keys": [ "LicenseRef-Apache", @@ -92,6 +93,7 @@ "owner": "Perl Foundation", "homepage_url": "http://www.perlfoundation.org/", "notes": "Per SPDX.org, this version was released 2006 This license is OSI\ncertifified.\n", + "is_builtin": true, "spdx_license_key": "Artistic-2.0", "osi_license_key": "Artistic-2.0", "text_urls": [ @@ -116,6 +118,7 @@ "owner": "Regents of the University of California", "homepage_url": "http://www.opensource.org/licenses/BSD-2-Clause", "notes": "Per SPDX.org, this license is OSI certified.", + "is_builtin": true, "spdx_license_key": "BSD-2-Clause", "other_spdx_license_keys": [ "BSD-2-Clause-NetBSD", @@ -140,6 +143,7 @@ "owner": "MIT", "homepage_url": "http://opensource.org/licenses/mit-license.php", "notes": "Per SPDX.org, this license is OSI certified.", + "is_builtin": true, "spdx_license_key": "MIT", "text_urls": [ "http://opensource.org/licenses/mit-license.php" diff --git a/tests/licensedcode/test_additional_license.py b/tests/licensedcode/test_additional_license.py new file mode 100644 index 00000000000..087d581c835 --- /dev/null +++ b/tests/licensedcode/test_additional_license.py @@ -0,0 +1,96 @@ +# +# Copyright (c) nexB Inc. and others. All rights reserved. +# ScanCode is a trademark of nexB Inc. +# SPDX-License-Identifier: Apache-2.0 +# See http://www.apache.org/licenses/LICENSE-2.0 for the license text. +# See https://github.com/nexB/scancode-toolkit for support or download. +# See https://aboutcode.org for more information about nexB OSS projects. +# + +import os + +import pytest +from commoncode.testcase import FileDrivenTesting + +from scancode.cli_test_utils import check_json_scan +from scancode.cli_test_utils import run_scan_click +from scancode_config import REGEN_TEST_FIXTURES + +test_env = FileDrivenTesting() +test_env.test_data_dir = os.path.join(os.path.dirname(__file__), 'data') + + +def test_validate_license_library_returns_errors(): + from licensedcode.models import InvalidLicense + from licensedcode.cache import get_index + licenses_dir = test_env.get_test_loc('additional_licenses/validate_licenses') + with pytest.raises(InvalidLicense): + get_index(force=True, additional_directory=licenses_dir) + + +""" +These tests need to have an extra "additional licenses" plugin install to work. +They will fail when spawned locally therefore we use a special Pytest marker +so that they run only in the CI to avoid problems. +""" + +# Testing an additional directory only +@pytest.mark.scanplugins +def test_detection_with_additional_license_directory(): + # Before running this test you need to reindex the licenses with + # the directory tests/licensedcode/data/additional_licenses/additional_dir/ + test_file = test_env.get_test_loc('additional_licenses/additional_license_directory_test.txt') + result_file = test_env.get_temp_file('json') + args = [ + '--license', + '--strip-root', + '--verbose', + '--json', result_file, + test_file, + ] + run_scan_click(args) + expected_loc = test_env.get_test_loc('additional_licenses/additional_license_directory_test.expected.json') + check_json_scan(expected_loc, result_file, regen=REGEN_TEST_FIXTURES) + + +# Testing an additional plugin only +@pytest.mark.scanplugins +def test_detection_with_additional_license_plugin(): + # Before running this test you need to install the plugin at + # the directory tests/licensedcode/data/additional_licenses/additional_plugin_1/ + # and reindex the licenses. + test_file = test_env.get_test_loc('additional_licenses/additional_license_plugin_test.txt') + result_file = test_env.get_temp_file('json') + args = [ + '--license', + '--strip-root', + '--verbose', + '--json', result_file, + test_file, + ] + run_scan_click(args) + expected_loc = test_env.get_test_loc('additional_licenses/additional_license_plugin_test.expected.json') + check_json_scan(expected_loc, result_file, regen=REGEN_TEST_FIXTURES) + + +# Testing an additional directory and two additional plugins together +@pytest.mark.scanplugins +def test_detection_with_additional_license_combined(): + # Before running this test you need to install the plugins at + # the directory tests/licensedcode/data/additional_licenses/additional_plugin_1/ + # the directory tests/licensedcode/data/additional_licenses/additional_plugin_2/ + # and reindex the licenses with + # the directory tests/licensedcode/data/additional_licenses/additional_dir/ + test_file = test_env.get_test_loc('additional_licenses/additional_license_combined_test.txt') + result_file = test_env.get_temp_file('json') + args = [ + '--license', + '--strip-root', + '--verbose', + '--json', result_file, + test_file, + ] + run_scan_click(args) + expected_loc = test_env.get_test_loc('additional_licenses/additional_license_combined_test.expected.json') + check_json_scan(expected_loc, result_file, regen=REGEN_TEST_FIXTURES) + diff --git a/tests/licensedcode/test_plugin_license.py b/tests/licensedcode/test_plugin_license.py index 0d5d20a469a..d34e20c8cee 100644 --- a/tests/licensedcode/test_plugin_license.py +++ b/tests/licensedcode/test_plugin_license.py @@ -238,13 +238,14 @@ def test_match_reference_license(): def test_reindex_licenses_works(): - run_scan_click(['--reindex-licenses-for-all-languages']) - run_scan_click(['--reindex-licenses']) + from licensedcode.cache import get_index + get_index(force=True) + get_index(force=True, index_all_languages=True) @pytest.mark.scanslow def test_scan_license_with_url_template(): - test_dir = test_env.get_test_loc('plugin_license/license_url', copy=True) + test_dir = test_env.get_test_loc('plugin_license/license_url/scan/', copy=True) result_file = test_env.get_temp_file('json') args = [ '--license', @@ -253,7 +254,7 @@ def test_scan_license_with_url_template(): '--json-pp', result_file, test_dir, ] - test_loc = test_env.get_test_loc('plugin_license/license_url.expected.json') + test_loc = test_env.get_test_loc('plugin_license/license_url/license_url.expected.json') run_scan_click(args) check_json_scan(test_loc, result_file, regen=REGEN_TEST_FIXTURES) diff --git a/tests/scancode/data/help/help.txt b/tests/scancode/data/help/help.txt index d03c64a3c3a..a51211ff899 100644 --- a/tests/scancode/data/help/help.txt +++ b/tests/scancode/data/help/help.txt @@ -157,13 +157,6 @@ Options: and including the starting directory. Use 0 for no scan depth limit. - miscellaneous: - --reindex-licenses Rebuild the license index and exit. - --reindex-licenses-for-all-languages - [EXPERIMENTAL] Rebuild the license index - including texts all languages (and not only - English) and exit. - documentation: -h, --help Show this message and exit. -A, --about Show information about ScanCode and licensing and exit. diff --git a/tests/scancode/data/plugin_consolidate/component-package-build-expected.json b/tests/scancode/data/plugin_consolidate/component-package-build-expected.json index 0d0daa39d31..864786d2ae3 100644 --- a/tests/scancode/data/plugin_consolidate/component-package-build-expected.json +++ b/tests/scancode/data/plugin_consolidate/component-package-build-expected.json @@ -850,10 +850,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/scancode/data/plugin_consolidate/component-package-expected.json b/tests/scancode/data/plugin_consolidate/component-package-expected.json index 4cd294b034e..93a46b0253a 100644 --- a/tests/scancode/data/plugin_consolidate/component-package-expected.json +++ b/tests/scancode/data/plugin_consolidate/component-package-expected.json @@ -740,10 +740,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/scancode/data/plugin_consolidate/license-holder-rollup-expected.json b/tests/scancode/data/plugin_consolidate/license-holder-rollup-expected.json index ee5b3700ddf..33c53d59207 100644 --- a/tests/scancode/data/plugin_consolidate/license-holder-rollup-expected.json +++ b/tests/scancode/data/plugin_consolidate/license-holder-rollup-expected.json @@ -524,10 +524,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/scancode/data/plugin_consolidate/return-nested-local-majority-expected.json b/tests/scancode/data/plugin_consolidate/return-nested-local-majority-expected.json index 8823f671c65..22f75ddac53 100644 --- a/tests/scancode/data/plugin_consolidate/return-nested-local-majority-expected.json +++ b/tests/scancode/data/plugin_consolidate/return-nested-local-majority-expected.json @@ -150,10 +150,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -265,10 +265,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -528,10 +528,10 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/scancode/data/virtual_idempotent/codebase.json b/tests/scancode/data/virtual_idempotent/codebase.json index 6476625b895..babf4e1022e 100644 --- a/tests/scancode/data/virtual_idempotent/codebase.json +++ b/tests/scancode/data/virtual_idempotent/codebase.json @@ -1111,11 +1111,11 @@ "is_exception": false, "is_unknown": false, "owner": "JBoss Community", - "homepage_url": "", + "homepage_url": null, "text_url": "http://repository.jboss.org/licenses/jbossorg-eula.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/jboss-eula", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 108, "matched_rule": { @@ -2990,10 +2990,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1649, "end_line": 1649, "matched_rule": { @@ -3024,10 +3024,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 1692, "end_line": 1692, "matched_rule": { @@ -4254,11 +4254,11 @@ "is_exception": true, "is_unknown": false, "owner": "Dmitriy Anisimkov", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 25, "matched_rule": { @@ -5547,11 +5547,11 @@ "is_exception": false, "is_unknown": false, "owner": "CMR - Christian Michelsen Research AS", - "homepage_url": "", - "text_url": "", + "homepage_url": null, + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/cmr-no", "spdx_license_key": "", - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { diff --git a/tests/summarycode/data/full_summary/summary.expected.json b/tests/summarycode/data/full_summary/summary.expected.json index 2fbc42215f1..4806e9d58e2 100644 --- a/tests/summarycode/data/full_summary/summary.expected.json +++ b/tests/summarycode/data/full_summary/summary.expected.json @@ -7480,7 +7480,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/full_summary/summary_by_facet.expected.json b/tests/summarycode/data/full_summary/summary_by_facet.expected.json index d20b89202f0..ceb583da539 100644 --- a/tests/summarycode/data/full_summary/summary_by_facet.expected.json +++ b/tests/summarycode/data/full_summary/summary_by_facet.expected.json @@ -8166,7 +8166,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/full_summary/summary_details.expected.json b/tests/summarycode/data/full_summary/summary_details.expected.json index 689edd3803f..bea0719fe35 100644 --- a/tests/summarycode/data/full_summary/summary_details.expected.json +++ b/tests/summarycode/data/full_summary/summary_details.expected.json @@ -8399,7 +8399,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/plugin_consolidate/e2fsprogs-expected.json b/tests/summarycode/data/plugin_consolidate/e2fsprogs-expected.json index 77491ea9510..33eddbf4f1f 100644 --- a/tests/summarycode/data/plugin_consolidate/e2fsprogs-expected.json +++ b/tests/summarycode/data/plugin_consolidate/e2fsprogs-expected.json @@ -1716,7 +1716,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -2002,7 +2002,7 @@ "text_url": "https://developercertificate.org/", "reference_url": "https://scancode-licensedb.aboutcode.org/dco-1.1", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 8, "matched_rule": { @@ -2035,7 +2035,7 @@ "text_url": "https://developercertificate.org/", "reference_url": "https://scancode-licensedb.aboutcode.org/dco-1.1", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 10, "end_line": 34, "matched_rule": { @@ -2135,10 +2135,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://www.gnu.org/software/autoconf-archive/", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-macro-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 18, "matched_rule": { @@ -2169,7 +2169,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "spdx_license_key": "FSFAP", "spdx_url": "https://spdx.org/licenses/FSFAP", @@ -2202,7 +2202,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "spdx_license_key": "FSFAP", "spdx_url": "https://spdx.org/licenses/FSFAP", @@ -2328,7 +2328,7 @@ "text_url": "http://www.fsf.org/licensing/licenses/", "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited-no-warranty", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 12, "matched_rule": { @@ -2358,7 +2358,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2391,7 +2391,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2424,7 +2424,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2457,7 +2457,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2490,7 +2490,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2523,7 +2523,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2556,7 +2556,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2589,7 +2589,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2622,7 +2622,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2655,7 +2655,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2688,7 +2688,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2721,7 +2721,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2754,7 +2754,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2787,7 +2787,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2888,7 +2888,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2921,7 +2921,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2954,7 +2954,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2987,7 +2987,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3020,7 +3020,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3053,7 +3053,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3120,10 +3120,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception-2.0", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2865, "end_line": 2882, "matched_rule": { @@ -3154,7 +3154,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3187,7 +3187,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3220,7 +3220,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3253,7 +3253,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3286,7 +3286,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3319,7 +3319,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3352,7 +3352,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3385,7 +3385,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3418,7 +3418,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3451,7 +3451,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3484,7 +3484,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -4074,10 +4074,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 25, "matched_rule": { @@ -4108,10 +4108,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 55, "end_line": 56, "matched_rule": { @@ -4264,7 +4264,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -4392,10 +4392,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 25, "matched_rule": { @@ -4426,10 +4426,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 72, "end_line": 73, "matched_rule": { @@ -4602,7 +4602,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/libtool-exception-2.0", "spdx_license_key": "Libtool-exception", "spdx_url": "https://spdx.org/licenses/Libtool-exception", @@ -4670,7 +4670,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/libtool-exception-2.0", "spdx_license_key": "Libtool-exception", "spdx_url": "https://spdx.org/licenses/Libtool-exception", @@ -4866,10 +4866,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -6270,10 +6270,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/patent-disclaimer", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 30, "matched_rule": { @@ -7903,7 +7903,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -7939,7 +7939,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -9405,7 +9405,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -9697,7 +9697,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -15020,10 +15020,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/proprietary-license", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 44, "end_line": 44, "matched_rule": { @@ -15804,7 +15804,7 @@ "is_unknown": false, "owner": "LaTeX", "homepage_url": "https://fedoraproject.org/wiki/Licensing/Latex2e", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/latex2e", "spdx_license_key": "Latex2e", "spdx_url": "https://spdx.org/licenses/Latex2e", @@ -15837,7 +15837,7 @@ "is_unknown": false, "owner": "LaTeX", "homepage_url": "https://fedoraproject.org/wiki/Licensing/Latex2e", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/latex2e", "spdx_license_key": "Latex2e", "spdx_url": "https://spdx.org/licenses/Latex2e", @@ -15964,10 +15964,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 12, "end_line": 29, "matched_rule": { @@ -22264,10 +22264,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 4, "matched_rule": { @@ -25367,10 +25367,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/bison-exception-2.0", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 306, "end_line": 324, "matched_rule": { @@ -28107,10 +28107,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 66, "end_line": 72, "matched_rule": { @@ -33148,7 +33148,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33298,7 +33298,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33331,10 +33331,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 54, "end_line": 54, "matched_rule": { @@ -33364,7 +33364,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33633,7 +33633,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33713,7 +33713,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33857,7 +33857,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -33931,7 +33931,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -34005,7 +34005,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -34552,10 +34552,10 @@ "is_unknown": false, "owner": "Paul Mackerras", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/paul-mackerras-binary", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 40, "matched_rule": { @@ -34814,10 +34814,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 12, "end_line": 29, "matched_rule": { @@ -34964,10 +34964,10 @@ "is_unknown": false, "owner": "Regents of the University of California", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/bsla", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 15, "matched_rule": { @@ -37178,10 +37178,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 13, "end_line": 15, "matched_rule": { @@ -43408,10 +43408,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -43565,10 +43565,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -44358,10 +44358,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -44522,10 +44522,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -46467,10 +46467,10 @@ "is_unknown": false, "owner": "Theodore Ts'o", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/tso-license", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 21, "matched_rule": { @@ -46723,7 +46723,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46803,7 +46803,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46877,7 +46877,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46957,7 +46957,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47031,7 +47031,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47105,7 +47105,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47179,7 +47179,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47253,7 +47253,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47327,7 +47327,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47485,7 +47485,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47559,7 +47559,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47633,7 +47633,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47707,7 +47707,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47781,7 +47781,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47855,7 +47855,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -47999,7 +47999,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -48201,7 +48201,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -48648,10 +48648,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 15, "matched_rule": { @@ -48736,10 +48736,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 15, "matched_rule": { @@ -49204,10 +49204,10 @@ "is_unknown": false, "owner": "MIT", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-with-modification-obligations", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 47, "matched_rule": { @@ -49336,10 +49336,10 @@ "is_unknown": false, "owner": "MIT", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-with-modification-obligations", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 15, "end_line": 36, "matched_rule": { @@ -57400,10 +57400,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 9, "matched_rule": { @@ -57719,10 +57719,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -57887,10 +57887,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58055,10 +58055,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -58218,10 +58218,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58337,10 +58337,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -58565,10 +58565,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58723,10 +58723,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58885,10 +58885,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -59043,10 +59043,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -59217,10 +59217,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -59371,10 +59371,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 7, "matched_rule": { @@ -59555,10 +59555,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -59717,10 +59717,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -59875,10 +59875,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -60043,10 +60043,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -60201,10 +60201,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -60423,10 +60423,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -60572,10 +60572,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -60729,10 +60729,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -60897,10 +60897,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 4, "matched_rule": { @@ -61070,10 +61070,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -61254,10 +61254,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/summarycode/data/plugin_consolidate/e2fsprogs.json b/tests/summarycode/data/plugin_consolidate/e2fsprogs.json index 9a18f8a2952..7113aa705a8 100644 --- a/tests/summarycode/data/plugin_consolidate/e2fsprogs.json +++ b/tests/summarycode/data/plugin_consolidate/e2fsprogs.json @@ -278,10 +278,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://www.gnu.org/software/autoconf-archive/", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-macro-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 18, "matched_rule": { @@ -312,7 +312,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "spdx_license_key": "FSFAP", "spdx_url": "https://spdx.org/licenses/FSFAP", @@ -345,7 +345,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-ap", "spdx_license_key": "FSFAP", "spdx_url": "https://spdx.org/licenses/FSFAP", @@ -468,7 +468,7 @@ "text_url": "http://www.fsf.org/licensing/licenses/", "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited-no-warranty", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 12, "matched_rule": { @@ -498,7 +498,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -531,7 +531,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -564,7 +564,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -597,7 +597,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -630,7 +630,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -663,7 +663,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -696,7 +696,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -729,7 +729,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -762,7 +762,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -795,7 +795,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -828,7 +828,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -861,7 +861,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -894,7 +894,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -927,7 +927,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1028,7 +1028,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1061,7 +1061,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1094,7 +1094,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1127,7 +1127,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1160,7 +1160,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1193,7 +1193,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1260,10 +1260,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception-2.0", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2865, "end_line": 2882, "matched_rule": { @@ -1294,7 +1294,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1327,7 +1327,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1360,7 +1360,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1393,7 +1393,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1426,7 +1426,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1459,7 +1459,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1492,7 +1492,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1525,7 +1525,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1558,7 +1558,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1591,7 +1591,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -1624,7 +1624,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -2982,7 +2982,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -3265,7 +3265,7 @@ "text_url": "https://developercertificate.org/", "reference_url": "https://scancode-licensedb.aboutcode.org/dco-1.1", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 8, "matched_rule": { @@ -3298,7 +3298,7 @@ "text_url": "https://developercertificate.org/", "reference_url": "https://scancode-licensedb.aboutcode.org/dco-1.1", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 10, "end_line": 34, "matched_rule": { @@ -3542,10 +3542,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 25, "matched_rule": { @@ -3576,10 +3576,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 55, "end_line": 56, "matched_rule": { @@ -3730,7 +3730,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/fsf-unlimited", "spdx_license_key": "FSFULLR", "spdx_url": "https://spdx.org/licenses/FSFULLR", @@ -3856,10 +3856,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob;f=config.guess;h=a7448442748cc6f98a066d2d1051fad3b043761a;hb=HEAD", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/autoconf-simple-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 25, "matched_rule": { @@ -3890,10 +3890,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 72, "end_line": 73, "matched_rule": { @@ -4064,7 +4064,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/libtool-exception-2.0", "spdx_license_key": "Libtool-exception", "spdx_url": "https://spdx.org/licenses/Libtool-exception", @@ -4132,7 +4132,7 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/libtool-exception-2.0", "spdx_license_key": "Libtool-exception", "spdx_url": "https://spdx.org/licenses/Libtool-exception", @@ -4326,10 +4326,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -4924,10 +4924,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/patent-disclaimer", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 30, "matched_rule": { @@ -6764,7 +6764,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -6800,7 +6800,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -8244,7 +8244,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -8534,7 +8534,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -12379,7 +12379,7 @@ "is_unknown": false, "owner": "LaTeX", "homepage_url": "https://fedoraproject.org/wiki/Licensing/Latex2e", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/latex2e", "spdx_license_key": "Latex2e", "spdx_url": "https://spdx.org/licenses/Latex2e", @@ -12412,7 +12412,7 @@ "is_unknown": false, "owner": "LaTeX", "homepage_url": "https://fedoraproject.org/wiki/Licensing/Latex2e", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/latex2e", "spdx_license_key": "Latex2e", "spdx_url": "https://spdx.org/licenses/Latex2e", @@ -12569,10 +12569,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 12, "end_line": 29, "matched_rule": { @@ -14457,10 +14457,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/proprietary-license", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 44, "end_line": 44, "matched_rule": { @@ -21000,10 +21000,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 4, "matched_rule": { @@ -24003,10 +24003,10 @@ "is_unknown": false, "owner": "Free Software Foundation (FSF)", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/bison-exception-2.0", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 306, "end_line": 324, "matched_rule": { @@ -25652,10 +25652,10 @@ "is_unknown": false, "owner": "Theodore Ts'o", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/tso-license", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 21, "matched_rule": { @@ -26792,10 +26792,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 66, "end_line": 72, "matched_rule": { @@ -31723,7 +31723,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -31873,7 +31873,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -31906,10 +31906,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 54, "end_line": 54, "matched_rule": { @@ -31939,7 +31939,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32203,7 +32203,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32283,7 +32283,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32427,7 +32427,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32501,7 +32501,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32575,7 +32575,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -32709,10 +32709,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 12, "end_line": 29, "matched_rule": { @@ -32857,10 +32857,10 @@ "is_unknown": false, "owner": "Regents of the University of California", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/bsla", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 15, "matched_rule": { @@ -33415,10 +33415,10 @@ "is_unknown": false, "owner": "Paul Mackerras", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/paul-mackerras-binary", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 40, "matched_rule": { @@ -35667,10 +35667,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 13, "end_line": 15, "matched_rule": { @@ -41795,10 +41795,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -41950,10 +41950,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -44561,10 +44561,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -44725,10 +44725,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-copyleft", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -44933,7 +44933,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45013,7 +45013,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45087,7 +45087,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45167,7 +45167,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45241,7 +45241,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45315,7 +45315,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45389,7 +45389,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45463,7 +45463,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45569,7 +45569,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45725,7 +45725,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45799,7 +45799,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45873,7 +45873,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -45947,7 +45947,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46021,7 +46021,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46095,7 +46095,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46239,7 +46239,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46441,7 +46441,7 @@ "is_unknown": false, "owner": "MIT", "homepage_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style_.28no_advertising_without_permission.29", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style-no-advert", "spdx_license_key": "NTP", "spdx_url": "https://spdx.org/licenses/NTP", @@ -46847,10 +46847,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 15, "matched_rule": { @@ -46933,10 +46933,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 7, "end_line": 15, "matched_rule": { @@ -47426,10 +47426,10 @@ "is_unknown": false, "owner": "MIT", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-with-modification-obligations", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 47, "matched_rule": { @@ -47556,10 +47556,10 @@ "is_unknown": false, "owner": "MIT", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/mit-with-modification-obligations", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 15, "end_line": 36, "matched_rule": { @@ -55590,10 +55590,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -55756,10 +55756,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -55922,10 +55922,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -56083,10 +56083,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -56200,10 +56200,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -56426,10 +56426,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -56582,10 +56582,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -56742,10 +56742,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -56898,10 +56898,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -57069,10 +57069,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -57223,10 +57223,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 7, "matched_rule": { @@ -57405,10 +57405,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -57549,10 +57549,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 9, "matched_rule": { @@ -57721,10 +57721,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -57877,10 +57877,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58043,10 +58043,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58231,10 +58231,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -58494,10 +58494,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -58643,10 +58643,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58798,10 +58798,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 3, "end_line": 3, "matched_rule": { @@ -58964,10 +58964,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 4, "end_line": 4, "matched_rule": { @@ -59135,10 +59135,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -59316,10 +59316,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/free-unknown", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/summarycode/data/plugin_consolidate/license-holder-rollup-expected.json b/tests/summarycode/data/plugin_consolidate/license-holder-rollup-expected.json index 35c4c630048..8c16a27d50b 100644 --- a/tests/summarycode/data/plugin_consolidate/license-holder-rollup-expected.json +++ b/tests/summarycode/data/plugin_consolidate/license-holder-rollup-expected.json @@ -541,7 +541,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", diff --git a/tests/summarycode/data/plugin_consolidate/return-nested-local-majority-expected.json b/tests/summarycode/data/plugin_consolidate/return-nested-local-majority-expected.json index b6d30b4526c..1e95a666f84 100644 --- a/tests/summarycode/data/plugin_consolidate/return-nested-local-majority-expected.json +++ b/tests/summarycode/data/plugin_consolidate/return-nested-local-majority-expected.json @@ -135,7 +135,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", @@ -262,7 +262,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", @@ -551,7 +551,7 @@ "is_unknown": true, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.yml", diff --git a/tests/summarycode/data/plugin_consolidate/zlib-expected.json b/tests/summarycode/data/plugin_consolidate/zlib-expected.json index f8d54ab8ee1..fed73ca514d 100644 --- a/tests/summarycode/data/plugin_consolidate/zlib-expected.json +++ b/tests/summarycode/data/plugin_consolidate/zlib-expected.json @@ -1674,10 +1674,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -1803,10 +1803,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -1920,10 +1920,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2102,10 +2102,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2219,10 +2219,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2336,10 +2336,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2453,10 +2453,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2570,10 +2570,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2687,10 +2687,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -2804,10 +2804,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 25, "matched_rule": { @@ -5927,7 +5927,7 @@ "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { @@ -6076,10 +6076,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 27, "matched_rule": { @@ -8227,7 +8227,7 @@ "text_url": "ftp://ftp.info-zip.org/pub/infozip/license.html", "reference_url": "https://scancode-licensedb.aboutcode.org/info-zip-2009-01", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 26, "matched_rule": { @@ -9013,10 +9013,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -12119,7 +12119,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 31, "end_line": 36, "matched_rule": { @@ -12243,7 +12243,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 29, "end_line": 34, "matched_rule": { @@ -12367,7 +12367,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 29, "end_line": 34, "matched_rule": { @@ -12646,10 +12646,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -13162,10 +13162,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 23, "end_line": 23, "matched_rule": { @@ -13254,10 +13254,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/summarycode/data/plugin_consolidate/zlib.json b/tests/summarycode/data/plugin_consolidate/zlib.json index 3ee5ceffc45..c3ebf3b4796 100644 --- a/tests/summarycode/data/plugin_consolidate/zlib.json +++ b/tests/summarycode/data/plugin_consolidate/zlib.json @@ -3857,10 +3857,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -3984,10 +3984,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4099,10 +4099,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4279,10 +4279,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4394,10 +4394,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4509,10 +4509,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4624,10 +4624,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4739,10 +4739,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4854,10 +4854,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 6, "matched_rule": { @@ -4969,10 +4969,10 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 6, "end_line": 25, "matched_rule": { @@ -8030,7 +8030,7 @@ "text_url": "http://fedoraproject.org/wiki/Licensing:MIT#Old_Style", "reference_url": "https://scancode-licensedb.aboutcode.org/mit-old-style", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 9, "end_line": 15, "matched_rule": { @@ -8177,10 +8177,10 @@ "is_unknown": false, "owner": "nexB", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/other-permissive", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 27, "matched_rule": { @@ -10294,7 +10294,7 @@ "text_url": "ftp://ftp.info-zip.org/pub/infozip/license.html", "reference_url": "https://scancode-licensedb.aboutcode.org/info-zip-2009-01", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 26, "end_line": 26, "matched_rule": { @@ -11050,10 +11050,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/unknown-license-reference", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 5, "end_line": 5, "matched_rule": { @@ -13795,7 +13795,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 31, "end_line": 36, "matched_rule": { @@ -13917,7 +13917,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 29, "end_line": 34, "matched_rule": { @@ -14039,7 +14039,7 @@ "text_url": "http://www.ietf.org/rfc/rfc1952.txt", "reference_url": "https://scancode-licensedb.aboutcode.org/peter-deutsch-document", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 29, "end_line": 34, "matched_rule": { @@ -14282,10 +14282,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { @@ -14820,10 +14820,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 23, "end_line": 23, "matched_rule": { @@ -14910,10 +14910,10 @@ "is_unknown": false, "owner": "Unspecified", "homepage_url": "http://www.linfo.org/publicdomain.html", - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/public-domain", "spdx_license_key": null, - "spdx_url": "", + "spdx_url": null, "start_line": 2, "end_line": 2, "matched_rule": { diff --git a/tests/summarycode/data/tallies/full_tallies/tallies.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies.expected.json index c72d3f1f8b7..b2a40d49cbc 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies.expected.json @@ -7676,7 +7676,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json index bac737fbcde..1c0a5a1744b 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies_by_facet.expected.json @@ -8351,7 +8351,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json index 151887ad127..f6514ca1e07 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies_details.expected.json @@ -8595,7 +8595,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_key_files-details.expected.json-lines b/tests/summarycode/data/tallies/full_tallies/tallies_key_files-details.expected.json-lines index 676b6c62884..4413f5b362e 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_key_files-details.expected.json-lines +++ b/tests/summarycode/data/tallies/full_tallies/tallies_key_files-details.expected.json-lines @@ -2094,7 +2094,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml", diff --git a/tests/summarycode/data/tallies/full_tallies/tallies_key_files.expected.json b/tests/summarycode/data/tallies/full_tallies/tallies_key_files.expected.json index 2d4fbc95e39..4a191c2c674 100644 --- a/tests/summarycode/data/tallies/full_tallies/tallies_key_files.expected.json +++ b/tests/summarycode/data/tallies/full_tallies/tallies_key_files.expected.json @@ -1418,7 +1418,7 @@ "is_unknown": false, "owner": "Dmitriy Anisimkov", "homepage_url": null, - "text_url": "", + "text_url": null, "reference_url": "https://scancode-licensedb.aboutcode.org/ada-linking-exception", "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.LICENSE", "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/ada-linking-exception.yml",