Skip to content

Commit 876d45d

Browse files
Move validate outside of index lock
Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent 4b2b723 commit 876d45d

4 files changed

Lines changed: 29 additions & 28 deletions

File tree

etc/scripts/licenses/buildrules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def cli(licenses_file):
213213
rl = models.BasicRule(text=rdata.text, **rdata.data)
214214
skinny_rules.append(rl)
215215

216-
models.validate_rules(skinny_rules, licenses_by_key, with_text=True)
216+
models.validate_rules(skinny_rules, licenses_by_key, with_text=True, thorough=True)
217217

218218
print()
219219
for rule in skinny_rules:

src/licensedcode/cache.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -130,32 +130,32 @@ def load_or_build(
130130

131131
lock_file = os.path.join(scancode_cache_dir, LICENSE_LOCKFILE_NAME)
132132

133+
additional_directories = []
134+
if only_builtin:
135+
additional_directory = None
136+
plugin_directories = []
137+
else:
138+
plugin_directories = get_paths_to_installed_licenses_and_rules()
139+
if plugin_directories:
140+
additional_directories.extend(plugin_directories)
141+
142+
# include installed licenses
143+
if additional_directory:
144+
# additional_directories is originally a tuple
145+
additional_directories.append(additional_directory)
146+
147+
additional_license_dirs = get_license_dirs(additional_dirs=additional_directories)
148+
validate_additional_license_data(
149+
additional_directories=additional_license_dirs,
150+
scancode_license_dir=licenses_data_dir
151+
)
152+
133153
# here, we have no cache: lock, check and rebuild
134154
try:
135155
# acquire lock and wait until timeout to get a lock or die
136156
with lockfile.FileLock(lock_file).locked(timeout=timeout):
137157
# Here, the cache is either stale or non-existing: we need to
138158
# rebuild all cached data (e.g. mostly the index) and cache it
139-
140-
additional_directories = []
141-
if only_builtin:
142-
additional_directory = None
143-
plugin_directories = []
144-
else:
145-
plugin_directories = get_paths_to_installed_licenses_and_rules()
146-
if plugin_directories:
147-
additional_directories.extend(plugin_directories)
148-
149-
# include installed licenses
150-
if additional_directory:
151-
# additional_directories is originally a tuple
152-
additional_directories.append(additional_directory)
153-
154-
additional_license_dirs = get_license_dirs(additional_dirs=additional_directories)
155-
validate_additional_license_data(
156-
additional_directories=additional_license_dirs,
157-
scancode_license_dir=licenses_data_dir
158-
)
159159
licenses_db = load_licenses_from_multiple_dirs(
160160
additional_license_data_dirs=additional_license_dirs,
161161
builtin_license_data_dir=licenses_data_dir,

src/licensedcode/models.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,7 @@ def get_rules(
837837
licenses_data_dir=licenses_data_dir,
838838
rules_data_dir=rules_data_dir,
839839
validate=False,
840+
validate_thorough=False,
840841
is_builtin=True,
841842
):
842843
"""
@@ -854,7 +855,7 @@ def get_rules(
854855
))
855856

856857
if validate:
857-
validate_rules(rules=rules, licenses_by_key=licenses_db)
858+
validate_rules(rules=rules, licenses_by_key=licenses_db, thorough=validate_thorough)
858859

859860
licenses_as_rules = build_rules_from_licenses(licenses_db)
860861
return chain(licenses_as_rules, rules)
@@ -951,7 +952,7 @@ def get_rules_from_multiple_dirs(
951952
is_builtin=False,
952953
))
953954

954-
validate_rules(rules=combined_rules, licenses_by_key=licenses_db)
955+
validate_rules(rules=combined_rules, licenses_by_key=licenses_db, thorough=False)
955956

956957
return combined_rules
957958

@@ -1029,7 +1030,7 @@ class InvalidLicense(Exception):
10291030
pass
10301031

10311032

1032-
def _validate_all_rules(rules, licenses_by_key):
1033+
def _validate_all_rules(rules, licenses_by_key, thorough=False):
10331034
"""
10341035
Return a mapping of {error message: [list of Rule]} from validating a list
10351036
of ``rules`` Rule integrity and correctness using known licenses from a
@@ -1039,18 +1040,18 @@ def _validate_all_rules(rules, licenses_by_key):
10391040
errors = defaultdict(list)
10401041

10411042
for rule in rules:
1042-
for err_msg in rule.validate(licensing, thorough=True):
1043+
for err_msg in rule.validate(licensing, thorough=thorough):
10431044
errors[err_msg].append(rule)
10441045
return errors
10451046

10461047

1047-
def validate_rules(rules, licenses_by_key, with_text=False, rules_data_dir=rules_data_dir):
1048+
def validate_rules(rules, licenses_by_key, with_text=False, rules_data_dir=rules_data_dir, thorough=False):
10481049
"""
10491050
Return a mapping of {error message: [list of Rule]) from validating a list
10501051
of ``rules`` Rule integrity and correctness using known licenses from a
10511052
mapping of ``licenses_by_key`` {key: License}`.
10521053
"""
1053-
errors = _validate_all_rules(rules=rules, licenses_by_key=licenses_by_key)
1054+
errors = _validate_all_rules(rules=rules, licenses_by_key=licenses_by_key, thorough=thorough)
10541055
if errors:
10551056
message = ['Errors while validating rules:']
10561057
for msg, rules in errors.items():

tests/licensedcode/test_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class TestRule(FileBasedTesting):
187187
test_data_dir = TEST_DATA_DIR
188188

189189
def test_validate_license_rules_data(self):
190-
rules = list(models.get_rules(validate=True))
190+
rules = list(models.get_rules(validate=True, validate_thorough=True))
191191

192192
def test_create_rule_ignore_punctuation(self):
193193
test_rule = create_rule_from_text_and_expression(text='A one. A two. A three.')

0 commit comments

Comments
 (0)