troubadix 26.1.0__py3-none-any.whl → 26.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. troubadix/__version__.py +1 -1
  2. troubadix/helper/date_format.py +2 -3
  3. troubadix/plugins/copyright_text.py +1 -1
  4. troubadix/plugins/dependencies.py +1 -1
  5. troubadix/plugins/dependency_category_order.py +1 -1
  6. troubadix/plugins/deprecated_dependency.py +2 -2
  7. troubadix/plugins/deprecated_functions.py +2 -3
  8. troubadix/plugins/duplicated_script_tags.py +1 -2
  9. troubadix/plugins/grammar.py +4 -6
  10. troubadix/plugins/http_links_in_tags.py +2 -3
  11. troubadix/plugins/illegal_characters.py +1 -2
  12. troubadix/plugins/multiple_re_parameters.py +0 -1
  13. troubadix/plugins/overlong_description_lines.py +1 -1
  14. troubadix/plugins/overlong_script_tags.py +9 -14
  15. troubadix/plugins/qod.py +0 -1
  16. troubadix/plugins/script_calls_recommended.py +1 -1
  17. troubadix/plugins/script_family.py +1 -1
  18. troubadix/plugins/script_tag_whitespaces.py +1 -2
  19. troubadix/plugins/script_tags_mandatory.py +1 -1
  20. troubadix/plugins/script_version_and_last_modification_tags.py +1 -1
  21. troubadix/plugins/security_messages.py +2 -4
  22. troubadix/plugins/severity_date.py +0 -1
  23. troubadix/plugins/severity_format.py +0 -1
  24. troubadix/plugins/severity_origin.py +0 -1
  25. troubadix/plugins/spaces_before_dots.py +0 -1
  26. troubadix/plugins/spaces_in_filename.py +1 -1
  27. troubadix/plugins/trailing_spaces_tabs.py +1 -1
  28. troubadix/plugins/valid_script_tag_names.py +1 -1
  29. troubadix/reporter.py +2 -3
  30. troubadix/standalone_plugins/allowed_rev_diff.py +2 -2
  31. troubadix/standalone_plugins/changed_creation_date.py +1 -5
  32. troubadix/standalone_plugins/changed_oid.py +1 -2
  33. troubadix/standalone_plugins/changed_packages/package.py +12 -3
  34. troubadix/standalone_plugins/file_extensions.py +1 -1
  35. troubadix/standalone_plugins/no_solution.py +2 -4
  36. troubadix/standalone_plugins/util.py +0 -2
  37. troubadix/standalone_plugins/version_updated.py +1 -2
  38. {troubadix-26.1.0.dist-info → troubadix-26.2.0.dist-info}/METADATA +1 -1
  39. {troubadix-26.1.0.dist-info → troubadix-26.2.0.dist-info}/RECORD +42 -42
  40. {troubadix-26.1.0.dist-info → troubadix-26.2.0.dist-info}/WHEEL +1 -1
  41. {troubadix-26.1.0.dist-info → troubadix-26.2.0.dist-info}/entry_points.txt +0 -0
  42. {troubadix-26.1.0.dist-info → troubadix-26.2.0.dist-info}/licenses/LICENSE +0 -0
troubadix/__version__.py CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  # THIS IS AN AUTOGENERATED FILE. DO NOT TOUCH!
4
4
 
5
- __version__ = "26.1.0"
5
+ __version__ = "26.2.0"
@@ -56,7 +56,7 @@ def check_date(date: str, date_name: str, file: str, plugin: str) -> Iterator[Li
56
56
  elif week_day_str != week_day_parsed:
57
57
  formatted_date = week_day_parsed
58
58
  yield LinterError(
59
- f"Wrong day of week. Please change it from '{week_day_str}" f"' to '{formatted_date}'.",
59
+ f"Wrong day of week. Please change it from '{week_day_str}' to '{formatted_date}'.",
60
60
  file=file,
61
61
  plugin=plugin,
62
62
  )
@@ -65,7 +65,6 @@ def check_date(date: str, date_name: str, file: str, plugin: str) -> Iterator[Li
65
65
  def compare_date_with_last_modification_date(
66
66
  date: str, date_name: str, last_mod_date: str, file: str, plugin: str
67
67
  ) -> Iterator[LinterResult]:
68
-
69
68
  yield from check_date(
70
69
  last_mod_date,
71
70
  "last_modification",
@@ -76,7 +75,7 @@ def compare_date_with_last_modification_date(
76
75
  try:
77
76
  if parse_date(date) > parse_date(last_mod_date):
78
77
  yield LinterError(
79
- f"The {date_name} must not be greater than " "last_modification date.",
78
+ f"The {date_name} must not be greater than last_modification date.",
80
79
  file=file,
81
80
  plugin=plugin,
82
81
  )
@@ -101,7 +101,7 @@ class CheckCopyrightText(FileContentPlugin):
101
101
  nasl_file.write_text(data=self.new_file_content, encoding=CURRENT_ENCODING)
102
102
 
103
103
  yield LinterFix(
104
- f"The copyright statement has been updated to " f"{CORRECT_COPYRIGHT_PHRASE}",
104
+ f"The copyright statement has been updated to {CORRECT_COPYRIGHT_PHRASE}",
105
105
  file=nasl_file,
106
106
  plugin=self.name,
107
107
  )
@@ -77,7 +77,7 @@ class CheckDependencies(FilePlugin):
77
77
  for dep in split_dependencies(match.group("value")):
78
78
  if not any((root / vers / dep).exists() for vers in FEED_VERSIONS):
79
79
  yield LinterError(
80
- f"The script dependency {dep} could not " "be found within the VTs.",
80
+ f"The script dependency {dep} could not be found within the VTs.",
81
81
  file=self.context.nasl_file,
82
82
  plugin=self.name,
83
83
  )
@@ -132,7 +132,7 @@ class CheckDependencyCategoryOrder(FileContentPlugin):
132
132
 
133
133
  if not dependency_path:
134
134
  yield LinterError(
135
- f"The script dependency {dep} could not " "be found within the VTs.",
135
+ f"The script dependency {dep} could not be found within the VTs.",
136
136
  file=nasl_file,
137
137
  plugin=self.name,
138
138
  )
@@ -78,7 +78,7 @@ class CheckDeprecatedDependency(FilePlugin):
78
78
 
79
79
  if not dependency_path:
80
80
  yield LinterError(
81
- f"The script dependency {dep} could not " "be found within the VTs.",
81
+ f"The script dependency {dep} could not be found within the VTs.",
82
82
  file=self.context.nasl_file,
83
83
  plugin=self.name,
84
84
  )
@@ -88,7 +88,7 @@ class CheckDeprecatedDependency(FilePlugin):
88
88
  dependency_deprecated = deprecated_pattern.search(dependency_content)
89
89
  if dependency_deprecated:
90
90
  yield LinterError(
91
- f"VT depends on {dep}, which is marked " "as deprecated.",
91
+ f"VT depends on {dep}, which is marked as deprecated.",
92
92
  file=self.context.nasl_file,
93
93
  plugin=self.name,
94
94
  )
@@ -44,8 +44,7 @@ class CheckDeprecatedFunctions(FilePlugin):
44
44
  deprecated_functions = {
45
45
  'script_summary();, use script_tag(name:"summary", value:""); '
46
46
  "instead": r"script_summary\s*\([^)]*\);",
47
- "script_id();, use script_oid(); with "
48
- "the full OID instead": r"script_id\s*\([0-9]+\);",
47
+ "script_id();, use script_oid(); with the full OID instead": r"script_id\s*\([0-9]+\);",
49
48
  "security_note();": r"security_note\s*\([^)]*\);",
50
49
  "security_warning();": r"security_warning\s*\([^)]*\);",
51
50
  "security_hole();": r"security_hole\s*\([^)]*\);",
@@ -58,7 +57,7 @@ class CheckDeprecatedFunctions(FilePlugin):
58
57
  for description, pattern in deprecated_functions.items():
59
58
  if re.search(pattern, self.context.file_content, re.MULTILINE):
60
59
  yield LinterError(
61
- "Found a deprecated function call / description item: " f"{description}",
60
+ f"Found a deprecated function call / description item: {description}",
62
61
  file=self.context.nasl_file,
63
62
  plugin=self.name,
64
63
  )
@@ -81,8 +81,7 @@ class CheckDuplicatedScriptTags(FilePlugin):
81
81
  match = list(match)
82
82
  if len(match) > 1:
83
83
  yield LinterError(
84
- f"The VT is using the script tag '{tag.value}' "
85
- "multiple number of times.",
84
+ f"The VT is using the script tag '{tag.value}' multiple number of times.",
86
85
  file=self.context.nasl_file,
87
86
  plugin=self.name,
88
87
  )
@@ -65,7 +65,7 @@ exceptions = [
65
65
  # nb: Valid sentence
66
66
  TextInFileCheck(
67
67
  "2012/gb_VMSA-2010-0007.nasl",
68
- "e. VMware VMnc Codec heap overflow vulnerabilities\n\n" " Vulnerabilities in the",
68
+ "e. VMware VMnc Codec heap overflow vulnerabilities\n\n Vulnerabilities in the",
69
69
  ),
70
70
  TextInFileCheck("gb_opensuse_2018_1900_1.nasl", "(Note that"),
71
71
  # e.g.:
@@ -135,10 +135,9 @@ def get_grammer_pattern() -> re.Pattern:
135
135
  r"links\s+mentioned\s+in(\s+the)?\s+reference|"
136
136
  r"\s+an?(\s+remote)?(\s+(un)?authenticated)?\s+attackers|"
137
137
  # e.g. "this flaws"
138
- r"this\s+(vulnerabilities|(flaw|error|problem|issue|feature|file|" r"request)s)|"
138
+ r"this\s+(vulnerabilities|(flaw|error|problem|issue|feature|file|request)s)|"
139
139
  # e.g. "these flaw "
140
- r"these\s+(vulnerability|(flaw|error|problem|issue|feature|file|"
141
- r"request)\s+)|"
140
+ r"these\s+(vulnerability|(flaw|error|problem|issue|feature|file|request)\s+)|"
142
141
  r"\s+or\s+not\.?(\"\);)?$|"
143
142
  r"from(\s+the)?(\s+below)?mentioned\s+References?\s+link|"
144
143
  r"software\s+it\s+fail|"
@@ -200,7 +199,7 @@ def get_grammer_pattern() -> re.Pattern:
200
199
  r"in the in the|to an? to a|prior to prior to|to version to version|"
201
200
  r"update to update to|"
202
201
  # e.g. "is prone to a security bypass vulnerabilities"
203
- r"is\s+prone\s+to\s+an?\s+[^\s]+\s+([^\s]+\s+)?vulnerabilities" r").*",
202
+ r"is\s+prone\s+to\s+an?\s+[^\s]+\s+([^\s]+\s+)?vulnerabilities).*",
204
203
  re.IGNORECASE,
205
204
  )
206
205
 
@@ -221,7 +220,6 @@ class CheckGrammar(FilePlugin):
221
220
 
222
221
  for match in pattern.finditer(self.context.file_content):
223
222
  if match:
224
-
225
223
  # nb: No strip() here for so that the exclusions can be handled
226
224
  # more strict with e.g. leading or trailing newlines.
227
225
  full_line = match.group(0)
@@ -102,9 +102,8 @@ class CheckHttpLinksInTags(FilePlugin):
102
102
  if match:
103
103
  if (
104
104
  # fmt: off
105
- "nvd.nist.gov/vuln/detail/CVE-" in match.group('ref')
106
- or "cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-"
107
- in match.group('ref')
105
+ "nvd.nist.gov/vuln/detail/CVE-" in match.group("ref")
106
+ or "cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-" in match.group("ref")
108
107
  # fmt: on
109
108
  ):
110
109
  yield LinterError(
@@ -106,8 +106,7 @@ class CheckIllegalCharacters(FilePlugin):
106
106
  for forbidden_char in found_forbidden_characters:
107
107
  result, _ = FORBIDDEN_CHARS[forbidden_char]
108
108
  yield result(
109
- f"Found illegal character '{forbidden_char}' "
110
- f"in {match.group(0)}",
109
+ f"Found illegal character '{forbidden_char}' in {match.group(0)}",
111
110
  file=self.context.nasl_file,
112
111
  plugin=self.name,
113
112
  )
@@ -24,7 +24,6 @@ class CheckMultipleReParameters(LineContentPlugin):
24
24
  name = "check_multiple_re_parameters"
25
25
 
26
26
  def check_lines(self, nasl_file: Path, lines: Iterable[str]) -> Iterator[LinterResult]:
27
-
28
27
  if self.context.nasl_file.suffix == ".inc":
29
28
  return
30
29
 
@@ -85,7 +85,7 @@ class CheckOverlongDescriptionLines(FileContentPlugin):
85
85
  continue
86
86
 
87
87
  yield LinterWarning(
88
- f"Line {i} is too long" f" with {len(line)} characters. " f"Max 100",
88
+ f"Line {i} is too long with {len(line)} characters. Max 100",
89
89
  plugin=self.name,
90
90
  file=nasl_file,
91
91
  line=i,
@@ -1,19 +1,6 @@
1
- # Copyright (C) 2022 Greenbone AG
1
+ # SPDX-FileCopyrightText: 2022 Greenbone AG
2
2
  #
3
3
  # SPDX-License-Identifier: GPL-3.0-or-later
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
4
 
18
5
  from pathlib import Path
19
6
  from typing import Iterator
@@ -27,8 +14,16 @@ from ..plugin import FileContentPlugin, LinterError, LinterResult
27
14
  VALUE_LIMIT = 3000
28
15
 
29
16
  IGNORE_FILES = [
17
+ # This has so many vulnerabilities, and we want at least mention each of them, so no way to
18
+ # shorten it down.
30
19
  "monstra_cms_mult_vuln",
20
+ # Same as previously
21
+ "2017/gb_generic_http_web_app_params_dir_trav.nasl",
22
+ "2017/gb_generic_http_web_root_dir_trav.nasl",
23
+ "2021/gb_generic_http_web_dirs_dir_trav.nasl",
24
+ # These have auto-generated affected tags which we don't want to shorten down.
31
25
  "gb_huawei-sa-",
26
+ # Needs a description for each option which we don't want to shorten down.
32
27
  "lsc_options.nasl",
33
28
  ]
34
29
 
troubadix/plugins/qod.py CHANGED
@@ -101,7 +101,6 @@ class CheckQod(FilePlugin):
101
101
 
102
102
  # Check if the value is enclosed in double quotes
103
103
  if full_value.startswith('"') and full_value.endswith('"'):
104
-
105
104
  # Compare against valid values
106
105
  if value not in VALID_QOD_NUM_VALUES:
107
106
  yield LinterError(
@@ -86,7 +86,7 @@ class CheckScriptCallsRecommended(FileContentPlugin):
86
86
  file_content
87
87
  ):
88
88
  yield LinterWarning(
89
- "VT does not contain the following recommended call: " f"'script_{call}'",
89
+ f"VT does not contain the following recommended call: 'script_{call}'",
90
90
  file=nasl_file,
91
91
  plugin=self.name,
92
92
  )
@@ -130,7 +130,7 @@ class CheckScriptFamily(FileContentPlugin):
130
130
 
131
131
  if matches[0].group("value") not in VALID_FAMILIES:
132
132
  yield LinterError(
133
- "Invalid or misspelled script family " f"'{matches[0].group('value')}'",
133
+ f"Invalid or misspelled script family '{matches[0].group('value')}'",
134
134
  file=nasl_file,
135
135
  plugin=self.name,
136
136
  )
@@ -59,8 +59,7 @@ class CheckScriptTagWhitespaces(FileContentPlugin):
59
59
  r".*\s+$", match.group("value"), flags=re.S
60
60
  ):
61
61
  yield LinterError(
62
- f"{match.group(0)}: value contains a leading or"
63
- " trailing whitespace character",
62
+ f"{match.group(0)}: value contains a leading or trailing whitespace character",
64
63
  file=nasl_file,
65
64
  plugin=self.name,
66
65
  )
@@ -69,7 +69,7 @@ class CheckScriptTagsMandatory(FileContentPlugin):
69
69
  for tag in MANDATORY_TAGS:
70
70
  if not get_script_tag_pattern(tag).search(file_content):
71
71
  yield LinterError(
72
- "VT does not contain the following mandatory tag: " f"'script_{tag.value}'",
72
+ f"VT does not contain the following mandatory tag: 'script_{tag.value}'",
73
73
  file=nasl_file,
74
74
  plugin=self.name,
75
75
  )
@@ -130,7 +130,7 @@ class CheckScriptVersionAndLastModificationTags(FileContentPlugin):
130
130
  if not match_last_modified:
131
131
  self.fix_last_modification_and_version = True
132
132
  yield LinterError(
133
- "VT is is using a wrong syntax for script_tag(" 'name:"last_modification".',
133
+ 'VT is is using a wrong syntax for script_tag(name:"last_modification".',
134
134
  file=nasl_file,
135
135
  plugin=self.name,
136
136
  )
@@ -59,8 +59,7 @@ class CheckSecurityMessages(FileContentPlugin):
59
59
 
60
60
  if not _file_contains_security_message(file_content):
61
61
  yield LinterError(
62
- "VT is missing a security_message or implementing"
63
- " function in a VT with severity",
62
+ "VT is missing a security_message or implementing function in a VT with severity",
64
63
  file=nasl_file,
65
64
  plugin=self.name,
66
65
  )
@@ -81,8 +80,7 @@ class CheckSecurityMessages(FileContentPlugin):
81
80
 
82
81
  if _file_contains_security_message(file_content):
83
82
  yield LinterError(
84
- "VT is using a security_message or implementing"
85
- " function in a VT without severity",
83
+ "VT is using a security_message or implementing function in a VT without severity",
86
84
  file=nasl_file,
87
85
  plugin=self.name,
88
86
  )
@@ -20,7 +20,6 @@ class CheckSeverityDate(FileContentPlugin):
20
20
  nasl_file: Path,
21
21
  file_content: str,
22
22
  ) -> Iterator[LinterResult]:
23
-
24
23
  if nasl_file.suffix == ".inc":
25
24
  return
26
25
 
@@ -16,7 +16,6 @@ class CheckSeverityFormat(FileContentPlugin):
16
16
  nasl_file: Path,
17
17
  file_content: str,
18
18
  ) -> Iterator[LinterResult]:
19
-
20
19
  if nasl_file.suffix == ".inc" or "severity_vector" not in file_content:
21
20
  return
22
21
 
@@ -16,7 +16,6 @@ class CheckSeverityOrigin(FileContentPlugin):
16
16
  nasl_file: Path,
17
17
  file_content: str,
18
18
  ) -> Iterator[LinterResult]:
19
-
20
19
  if nasl_file.suffix == ".inc" or "severity_origin" not in file_content:
21
20
  return
22
21
 
@@ -101,7 +101,6 @@ class CheckSpacesBeforeDots(FileContentPlugin):
101
101
  )
102
102
 
103
103
  def fix(self) -> Iterator[LinterResult]:
104
-
105
104
  if not self.matches:
106
105
  return
107
106
 
@@ -13,7 +13,7 @@ class CheckSpacesInFilename(FilePlugin):
13
13
  def run(self) -> Iterator[LinterResult]:
14
14
  if re.search(r"\s", self.context.nasl_file.name):
15
15
  yield LinterError(
16
- f"The VT {self.context.nasl_file}" " contains whitespace in the filename",
16
+ f"The VT {self.context.nasl_file} contains whitespace in the filename",
17
17
  file=self.context.nasl_file,
18
18
  plugin=self.name,
19
19
  )
@@ -44,7 +44,7 @@ class CheckTrailingSpacesTabs(FilePlugin):
44
44
  continue
45
45
 
46
46
  yield LinterError(
47
- "The VT has one or more trailing spaces " f"and/or tabs in line {line_number}!",
47
+ f"The VT has one or more trailing spaces and/or tabs in line {line_number}!",
48
48
  file=self.context.nasl_file,
49
49
  plugin=self.name,
50
50
  )
@@ -94,7 +94,7 @@ class CheckValidScriptTagNames(FileContentPlugin):
94
94
  for match in matches:
95
95
  if match.group("name") not in allowed_script_tag_names:
96
96
  yield LinterError(
97
- f"The script_tag name '{match.group('name')}' " "is not allowed.",
97
+ f"The script_tag name '{match.group('name')}' is not allowed.",
98
98
  file=nasl_file,
99
99
  plugin=self.name,
100
100
  )
troubadix/reporter.py CHANGED
@@ -185,7 +185,7 @@ class Reporter:
185
185
  if self._fix and self._ignore_warnings:
186
186
  line = f"{plugin:48} {count['error']:8} {count['fix']:8}"
187
187
  elif self._fix:
188
- line = f"{plugin:48} {count['error']:8} {count['warning']:8}" f" {count['fix']:8}"
188
+ line = f"{plugin:48} {count['error']:8} {count['warning']:8} {count['fix']:8}"
189
189
  elif self._ignore_warnings:
190
190
  line = f"{plugin:48} {count['error']:8}"
191
191
  else:
@@ -203,8 +203,7 @@ class Reporter:
203
203
 
204
204
  if self._fix and self._ignore_warnings:
205
205
  line = (
206
- f"{'sum':48} {self._result_counts.error_count:8}"
207
- f" {self._result_counts.fix_count:8}"
206
+ f"{'sum':48} {self._result_counts.error_count:8} {self._result_counts.fix_count:8}"
208
207
  )
209
208
  elif self._fix:
210
209
  line = (
@@ -29,7 +29,7 @@ def parse_arguments() -> Namespace:
29
29
  "--directory",
30
30
  default=Path.cwd(),
31
31
  type=Path,
32
- help="The directory the repository to check is located in. " "Defaults to 'pwd'",
32
+ help="The directory the repository to check is located in. Defaults to 'pwd'",
33
33
  )
34
34
 
35
35
  ignored_linestart_group = argument_parser.add_mutually_exclusive_group()
@@ -41,7 +41,7 @@ def parse_arguments() -> Namespace:
41
41
  nargs="*",
42
42
  type=str,
43
43
  default=DEFAULT_IGNORED_LINESTARTS,
44
- help="A list of line starts which will make the line be ignored. " "Default: %(default)s",
44
+ help="A list of line starts which will make the line be ignored. Default: %(default)s",
45
45
  )
46
46
 
47
47
  ignored_linestart_group.add_argument(
@@ -21,7 +21,6 @@ CREATION_DATE_BASE_PATTERN = (
21
21
 
22
22
 
23
23
  def parse_arguments() -> Namespace:
24
-
25
24
  parser = ArgumentParser(
26
25
  description="Check for changed creation date",
27
26
  )
@@ -43,8 +42,7 @@ def parse_arguments() -> Namespace:
43
42
  type=file_type_existing,
44
43
  default=[],
45
44
  help=(
46
- "List of files to diff. "
47
- "If empty use all files added or modified in the commit range."
45
+ "List of files to diff. If empty use all files added or modified in the commit range."
48
46
  ),
49
47
  )
50
48
  args = parser.parse_args()
@@ -69,7 +67,6 @@ def check_changed_creation_date(commit_range: str, nasl_files: list[Path]) -> bo
69
67
  creation_date_changed = False
70
68
 
71
69
  for nasl_file in nasl_files:
72
-
73
70
  if not nasl_file.exists():
74
71
  continue
75
72
 
@@ -116,7 +113,6 @@ def check_changed_creation_date(commit_range: str, nasl_files: list[Path]) -> bo
116
113
 
117
114
 
118
115
  def main() -> int:
119
-
120
116
  try:
121
117
  git_base = git("rev-parse", "--show-toplevel")
122
118
  os.chdir(git_base.rstrip("\n"))
@@ -49,8 +49,7 @@ def parse_args(args: Iterable[str]) -> Namespace:
49
49
  type=file_type_existing,
50
50
  default=[],
51
51
  help=(
52
- "List of files to diff. "
53
- "If empty use all files added or modified in the commit range."
52
+ "List of files to diff. If empty use all files added or modified in the commit range."
54
53
  ),
55
54
  )
56
55
  return parser.parse_args(args=args)
@@ -74,13 +74,22 @@ class Package:
74
74
 
75
75
  return False
76
76
 
77
+ def __le__(self, other: "Package") -> bool:
78
+ # Sort by release first, then the other fields
79
+ if self.release != other.release:
80
+ return self.release < other.release
81
+ if self.name != other.name:
82
+ return self.name < other.name
83
+
84
+ return self.version <= other.version
85
+
77
86
  def __str__(self) -> str:
78
- result = f"{self.name : <50} {self.version : <40} {self.release : <10}"
87
+ result = f"{self.name: <50} {self.version: <40} {self.release: <10}"
79
88
 
80
89
  reasons = ", ".join(
81
- f"{change}" f"{' in new package' if direction == Direction.PASSIVE else ''}"
90
+ f"{change}{' in new package' if direction == Direction.PASSIVE else ''}"
82
91
  for change, direction in self.reasons.items()
83
92
  )
84
- result += f"{reasons : <10}"
93
+ result += f"{reasons: <10}"
85
94
 
86
95
  return result
@@ -73,7 +73,7 @@ def main() -> int:
73
73
  print(file.relative_to(args.dir))
74
74
  return 0
75
75
 
76
- print(f"{len(unwanted_files)} " "Files with unwanted file extension were found:")
76
+ print(f"{len(unwanted_files)} Files with unwanted file extension were found:")
77
77
  for file in unwanted_files:
78
78
  print(file)
79
79
  return 1
@@ -97,7 +97,7 @@ def parse_args() -> Namespace:
97
97
  dest="threshold",
98
98
  type=int,
99
99
  default=12,
100
- help="The threshold after which to assume no solution " "will be provided anymore",
100
+ help="The threshold after which to assume no solution will be provided anymore",
101
101
  )
102
102
 
103
103
  parser.add_argument(
@@ -239,9 +239,7 @@ def print_report(
239
239
  "No solution should be expected at this point. "
240
240
  )
241
241
  else:
242
- term.bold_info(
243
- f"{len(vts)} VTs with no solution for " f"more than {milestone} month(s)"
244
- )
242
+ term.bold_info(f"{len(vts)} VTs with no solution for more than {milestone} month(s)")
245
243
 
246
244
  for vt, oid, creation, solution in vts:
247
245
  term.info(str(vt.relative_to(root)))
@@ -11,11 +11,9 @@ from troubadix.standalone_plugins.changed_creation_date import git
11
11
 
12
12
  @contextmanager
13
13
  def temporary_git_directory():
14
-
15
14
  cwd = Path.cwd()
16
15
 
17
16
  with TemporaryDirectory() as tempdir:
18
-
19
17
  try:
20
18
  chdir(tempdir)
21
19
  git("init", "-b", "main")
@@ -68,8 +68,7 @@ def parse_args(args: Iterable[str]) -> Namespace:
68
68
  type=file_type_existing,
69
69
  default=[],
70
70
  help=(
71
- "List of files to diff. "
72
- "If empty use all files added or modified in the commit range."
71
+ "List of files to diff. If empty use all files added or modified in the commit range."
73
72
  ),
74
73
  )
75
74
  return parser.parse_args(args=args)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: troubadix
3
- Version: 26.1.0
3
+ Version: 26.2.0
4
4
  Summary: A linting and QA check tool for NASL files
5
5
  License: GPL-3.0-or-later
6
6
  License-File: LICENSE
@@ -1,11 +1,11 @@
1
1
  troubadix/__init__.py,sha256=K7sIXXDrC7YRb7BvIpdQ6ZfG_QkT0qUH_wAlHROVRfM,716
2
- troubadix/__version__.py,sha256=Cp9QkvisoG6GTt37BiiC5Mhyuj_IoWIhmGalrkYE_aY,103
2
+ troubadix/__version__.py,sha256=dPvqj93xVP1Mtnqwnka5NO509MBNQAmpmvjyI-qbYdc,103
3
3
  troubadix/argparser.py,sha256=VVntELpTVfRMUFZT7VlIhWxomnO4qdpN_H4GLfD9-Wk,7383
4
4
  troubadix/codespell/codespell.additions,sha256=_nGI5znfb2BRta4O0tubGYQSLjOusgqT_sz_HFZvbm8,585
5
5
  troubadix/codespell/codespell.exclude,sha256=4arAzknuJxPvGz0-tAFp4A3_VLaPR4_XdUE7UfIAGRI,148629
6
6
  troubadix/codespell/codespell.ignore,sha256=2CP8u6O2VENcDpt2FfEDNmfa1Eh3D80yeYHT54GM1X4,1512
7
7
  troubadix/helper/__init__.py,sha256=tp2fPLzwGEA_2eiJbvuePiY6rjYSFxx7VUsCV4fSwvw,1110
8
- troubadix/helper/date_format.py,sha256=DrZy5A8YTrqgkPlUA3USSphcKqSZKk7S7heQcGR5rtc,2454
8
+ troubadix/helper/date_format.py,sha256=3wV2rlKIFZ26h77MB8CnVxV2HdeMh_d4cCL2MDYMUOc,2446
9
9
  troubadix/helper/helper.py,sha256=hoL725E5rIjgUS8tcWttXP_0gSlhcRc7Wvsn7KvMkps,3099
10
10
  troubadix/helper/if_block_parser.py,sha256=jrD3KklKnBS8NgzA6HPNOCSJvvvLO2WFmmaIMdzFpeo,7924
11
11
  troubadix/helper/linguistic_exception_handler.py,sha256=ydvNdF3LrCA_3EjofltUE1IQB4DwZ2iu0ZO-K_NnCIc,6703
@@ -15,78 +15,78 @@ troubadix/helper/text_utils.py,sha256=LOpabVTRgJmpUMvKDWvlALSvEeAQDV62vwBzTVMD2u
15
15
  troubadix/plugin.py,sha256=tBteosz-soLPqY_AdjsCqN2qKaS5ahxcJ_hSoFlSPlY,3459
16
16
  troubadix/plugins/__init__.py,sha256=5ks5gnSKdghUc8h1VTtnk-P8tnbf2DdqsNq7BMyFOds,8666
17
17
  troubadix/plugins/badwords.py,sha256=E_YBoD-6xEDqp5N7TlU5mJu6fWReTydAgtaweLDpTpc,4864
18
- troubadix/plugins/copyright_text.py,sha256=0dQH5-E6cxNJLFZLzGzUvtrFAXVsIwpqVP4hv8zXCxo,3549
18
+ troubadix/plugins/copyright_text.py,sha256=VyrL4obxj-GGdQeA6bTQG2oEFPB2dyNMLKX7s3EXk_c,3545
19
19
  troubadix/plugins/copyright_year.py,sha256=7fA_EHphxlIgOhkDPJ2FJlcGzF0t8CKtCdlOCw93A-M,5398
20
20
  troubadix/plugins/creation_date.py,sha256=kGfFQVJqwO36GJcA0ByPqZ42mspeGcuLJAA3xyW50aE,2337
21
21
  troubadix/plugins/cve_format.py,sha256=Ue6b9RzuQZWOdBd6y5ruqdEq2zyRb2_FSUQScnjHOUQ,3400
22
22
  troubadix/plugins/cvss_format.py,sha256=hmObghOvp0Gw3yn-wAJnHTwjcjILaVljyvfldxi_pmA,1904
23
- troubadix/plugins/dependencies.py,sha256=6ugVY10zA7LKM4PVnUtbEcCB58yDGW8D4MucWIkZg-o,4044
24
- troubadix/plugins/dependency_category_order.py,sha256=3JqexxSD4u4SL0NjK1ZEdagjHEh01a6gW6s3bpNdSTM,6802
25
- troubadix/plugins/deprecated_dependency.py,sha256=tNc0vY64ueXZjG5zUx1cIU7qTLD3VbV_YfKLgi_oL18,3603
26
- troubadix/plugins/deprecated_functions.py,sha256=6gkwF1oXuWD0TGtjd6z9Y0OFJhr-N5qSXngpZoG8Rs8,2548
23
+ troubadix/plugins/dependencies.py,sha256=5aNGDTTV3Sl6ms1DhGvYECOxq1VXvCOjDpJTYMV0NwY,4041
24
+ troubadix/plugins/dependency_category_order.py,sha256=1SZWwAkOAm6WhQ5keG6BHxXcQcEFMhtJiWRK5sbQqi0,6799
25
+ troubadix/plugins/deprecated_dependency.py,sha256=xknDLT7W6erQeEydwh1IQDYsvP3X4Agi0W0x5Rt5GN8,3597
26
+ troubadix/plugins/deprecated_functions.py,sha256=tRv2w7WnLb5PcRtOFO5b7oiUOWZk-KF2JSRjUVbImfY,2530
27
27
  troubadix/plugins/double_end_points.py,sha256=RpZGQzCliUrCaO-Q3hAXw_9nrZ6Embl5dksBozFZnf0,2403
28
28
  troubadix/plugins/duplicate_oid.py,sha256=dWxvQSW2kTiDGMs5-Zzpn1Dunx9mYkYfB89UCWZo9zQ,2622
29
- troubadix/plugins/duplicated_script_tags.py,sha256=UPBR2jbU15JLKJlVk1e2GFREH5Wj5Ax2yDFrmRKq74Y,3123
29
+ troubadix/plugins/duplicated_script_tags.py,sha256=RJbyiTT1FS5WggBjteU6jnX2TSUWph0N7uudOIusf14,3096
30
30
  troubadix/plugins/encoding.py,sha256=Ow_ZpyjtL2_nqhbukY_3EUhiR0agfSxMxJ4IcMSGsT4,2768
31
31
  troubadix/plugins/forking_nasl_functions.py,sha256=HXnlyR5yGVUYvzIOUKVRy2VPfuZc5uoehDt-HkEXo7k,6033
32
32
  troubadix/plugins/get_kb_on_services.py,sha256=1wLMohNZoEg1P7DiCRcpe6639SfvOsSMZWTta12VmgQ,3365
33
- troubadix/plugins/grammar.py,sha256=2_kSHN_kIFh3op4Ar6-rDyvf7E9suygxyhJlqCUzNzI,10917
34
- troubadix/plugins/http_links_in_tags.py,sha256=SWugC4KC0XdUlENpQ1edI9xZ6wGb9crV4WYFnvk0gJ4,7485
33
+ troubadix/plugins/grammar.py,sha256=i-xjxLm4A5-FsOPRUybm8E0fp7lcxfqegB6wzziiaIY,10893
34
+ troubadix/plugins/http_links_in_tags.py,sha256=w1lEgvaMDckajpq4TXmN8bn4tbQheghfQmjmwpiHzfE,7465
35
35
  troubadix/plugins/if_statement_syntax.py,sha256=5BRJwCCghvZn1AfvYzmk8l9S7aRqbVaLHhSKod_Q9zw,1429
36
- troubadix/plugins/illegal_characters.py,sha256=9HgBcjDxzxBKplNy64hf4zz6uUiQYxKoVHGllDoBZjM,4240
36
+ troubadix/plugins/illegal_characters.py,sha256=-Hgu8kzeniwfM492pJVs7QlrTLwrSZd__b4EKp2kwmY,4204
37
37
  troubadix/plugins/log_messages.py,sha256=ST5pwr8cZNMgxdMiSV2wm3jCFG34Rxd-6y-ozIcI070,2948
38
38
  troubadix/plugins/malformed_dependencies.py,sha256=El9v-Hlc3rMzXFNyW-1WZrTcJWXTGURErWc92Jpopis,2962
39
39
  troubadix/plugins/misplaced_compare_in_if.py,sha256=lqiKk09ksmaavhFhxfivttIQKXEr-nwYHHyhtVxPJJQ,4826
40
40
  troubadix/plugins/missing_desc_exit.py,sha256=YwZlSY1RTTTBa_EBK6JAzCg9_jlCs8Oyp5pclNY-UkI,2381
41
41
  troubadix/plugins/missing_tag_solution.py,sha256=iO7_6Us3w12AVPuiGK3AUU3S62K1lcZvcGK_-fvvQtk,2828
42
- troubadix/plugins/multiple_re_parameters.py,sha256=cfylzQNmQXum4R9GsoS2E7BucljhwlAokim0v0NDdj4,1402
42
+ troubadix/plugins/multiple_re_parameters.py,sha256=8CRKGxQ6jzNCucDb1QM9LvjlTOJmOUBq4MaSRZrpRvg,1401
43
43
  troubadix/plugins/newlines.py,sha256=2Uqsb4lG7rXEoCZD3Tdoku4YmB7WGqLQUPC3tJiEEso,2772
44
- troubadix/plugins/overlong_description_lines.py,sha256=0fs-5MePqRuIN6Mng71Xb7G2Ekc4t7fWVkR9mHXcpGw,3291
45
- troubadix/plugins/overlong_script_tags.py,sha256=LKJQxX9s2fkExkM0MOIqYZGOKbEe9eth7DEcxFo3A8k,2356
44
+ troubadix/plugins/overlong_description_lines.py,sha256=VySzzZ6rbuXobPw9IEogjmJ0cahzmrjBZRZxALfKGlw,3283
45
+ troubadix/plugins/overlong_script_tags.py,sha256=-HV1pMVxgyinQ8Vnj6uPbdVOx2O0NEh894kQ_t49NqA,2195
46
46
  troubadix/plugins/prod_svc_detect_in_vulnvt.py,sha256=5NX335QQLquxNamNt0_WGDpvB-XgNguv-77neEnKmx8,4234
47
- troubadix/plugins/qod.py,sha256=OMEjZR3fbimLX4F3LsMZZn4IZi32j4soMYp1uQFv5Sc,4164
47
+ troubadix/plugins/qod.py,sha256=QkA_FjT4n-4y17qYVqGLW4RP1TcRi3TxGXGk2wO9sfk,4163
48
48
  troubadix/plugins/reporting_consistency.py,sha256=yp4FQ8T6gVPzLDF5334mGG5m8n9x8c2I_ApfHzZpVRA,4024
49
49
  troubadix/plugins/script_add_preference_id.py,sha256=ra_HROAarILUGFGKHgBlFet3gCRMPNML835IONiRbTU,1597
50
50
  troubadix/plugins/script_add_preference_type.py,sha256=iyOC8DCyj0cAXFXFiUYWf1Wz79GLHMnGWOtGleItTnU,3589
51
51
  troubadix/plugins/script_calls_empty_values.py,sha256=_MJ0hCb-VZzrnnzjPBaQrQvdbH4iOyxwcPcXtAZzbjw,2512
52
- troubadix/plugins/script_calls_recommended.py,sha256=VI7iTQWGixV3m6pzgAzCaKHhjAtla22QQeS_4_moWLI,3138
52
+ troubadix/plugins/script_calls_recommended.py,sha256=xdG869wsuvQiGusrcqoRfAc2vdI5NqlkdUT8mCRMhAs,3135
53
53
  troubadix/plugins/script_category.py,sha256=EsFoR6fKjnJNNJb2gLkftwXDhJ3RCfa5g8796N-jxX8,2184
54
54
  troubadix/plugins/script_copyright.py,sha256=TcWw7D4WIYuD3XGKQ-gfPbd_px_iLXE68gwl5l7kdcE,2288
55
- troubadix/plugins/script_family.py,sha256=A7V6OwuJfzemHhZ2NrJdwW5XtYfcKTLgqEvJkD5lJaM,4082
55
+ troubadix/plugins/script_family.py,sha256=ujjErdzQYflmSk-H8dcBW6H_8OhmFIihnjzJN6uu9M4,4079
56
56
  troubadix/plugins/script_tag_form.py,sha256=k0PQv1LOTQVbs16X9RRYSV4vywl_AUCXa215w32FwI0,1735
57
- troubadix/plugins/script_tag_whitespaces.py,sha256=pOUcJpxK4RfWvb0poq28BHiHPOFqHy7BNNJVk7gSxJE,2275
58
- troubadix/plugins/script_tags_mandatory.py,sha256=qNRNEcMxw75aoNOue9tZIiGC7EdHNYUb5K7Q5rucAD8,2645
59
- troubadix/plugins/script_version_and_last_modification_tags.py,sha256=MY05rTqviaP1tzsCD4fJRUD5d_zwVAU3dHNHuh8aOaA,7508
57
+ troubadix/plugins/script_tag_whitespaces.py,sha256=P_C9KqUczFmZPZPuQzVTd8CLroLLGVxLFz_8QTyjqYw,2252
58
+ troubadix/plugins/script_tags_mandatory.py,sha256=yS1qIrEjF7Oh2sU5m3mgC7a6FmMwAzTI1XdULaXBQhY,2642
59
+ troubadix/plugins/script_version_and_last_modification_tags.py,sha256=UASUhjyhQXKxUmeiVZMg9TvTDSUQ2aRIvFH7J2L4vrw,7505
60
60
  troubadix/plugins/script_xref_form.py,sha256=cJsn2JNF39mY74Kc9fo-6o27PUdqCnlYH_2bjw-KxRU,1802
61
61
  troubadix/plugins/script_xref_url.py,sha256=gXDRgwewWKO1rsREUPm1yPKEq58iD7bQSyOotftI6YA,5317
62
- troubadix/plugins/security_messages.py,sha256=tfuyoPf937XqH9-GlhKNOntF9BjpKYDOFdQR9DRh5-A,4501
62
+ troubadix/plugins/security_messages.py,sha256=j1z5pD4fWam9s2Su46T4sX9pJ-L7DTTKmSAML2BwQyc,4463
63
63
  troubadix/plugins/set_get_kb_calls.py,sha256=WGu1CKLjn3VhbDo33IJ4TtWQ-kz9gInkJskTqOSMM6k,3415
64
- troubadix/plugins/severity_date.py,sha256=wewIeZxTFi_42ZBCrxonmBUKH0mxuD0UELH-h_czpFg,1426
65
- troubadix/plugins/severity_format.py,sha256=J9j6sKsjQwaPJsnnBQLU2OO76ABKTVwFqZy5gGTRv30,958
66
- troubadix/plugins/severity_origin.py,sha256=MAZK3OXa03omJiK1vWhfl4I186pgvMhjAj-e_yvl3kA,958
64
+ troubadix/plugins/severity_date.py,sha256=dVxSunRdc9JZPysFmPsz2ksZwPFMQs-wJTZPKLdwTj8,1425
65
+ troubadix/plugins/severity_format.py,sha256=pCd--9HCwrDXa4M1LWRuwoanVtWFkhjaj1ketKmo_xM,957
66
+ troubadix/plugins/severity_origin.py,sha256=HWA03j5LP9gqCHF5hsqysw-l3iLGVBq0FMKVCerZzd8,957
67
67
  troubadix/plugins/solution_text.py,sha256=xUe1wkA-5k3wNMeSA2ZCnicD3SF2kK3DPhWuKkUPelk,5808
68
68
  troubadix/plugins/solution_type.py,sha256=5MxR_cRNpKka3-bPbyA0LaPL7QuLgRE7-6KShN1p9iQ,2590
69
- troubadix/plugins/spaces_before_dots.py,sha256=mP1zplgOT5KAt36Og34MQRFHXodWnIrrc7WkkPDo6_w,4766
70
- troubadix/plugins/spaces_in_filename.py,sha256=vQFtzNsIalQTwWc_i6ZTEnLhF-htyW5aR_JwVpxE0DA,595
69
+ troubadix/plugins/spaces_before_dots.py,sha256=NPmMcwaNXOCU1IvgINSN7H0nXf92e8mlOux-ZG5LEks,4765
70
+ troubadix/plugins/spaces_in_filename.py,sha256=qRIWHkVBLrTEbzqfRVotRPgXfpAAfdMnpnT0YUtXW14,592
71
71
  troubadix/plugins/spelling.py,sha256=8x_4OTZAyofk_aoKkuLipl4WPgKhaR8nLnRRXn7KyLU,9497
72
72
  troubadix/plugins/tabs.py,sha256=7zXaTZe4cZoZvrLyqntVfTeNN_W3D8dfQl67QevXxtc,1319
73
73
  troubadix/plugins/todo_tbd.py,sha256=MN5fFwBhPmt3JDQ2Hx20B8yUy1vz7LIZC3rDIOzfW9M,1758
74
- troubadix/plugins/trailing_spaces_tabs.py,sha256=BSec5a8Xrf35fxBEpGprmg_WEATuT7JxagEdbd6dK1w,1835
74
+ troubadix/plugins/trailing_spaces_tabs.py,sha256=X9C4Y5wy7F5QzfC4EtEsDcKuJfbdUNqDuMZYxma0Jxw,1832
75
75
  troubadix/plugins/using_display.py,sha256=THHw0zOoEPeMwz3ftN2M6w09EdlNcy7IebKG6IWXH1A,3674
76
76
  troubadix/plugins/valid_oid.py,sha256=eiItF9BVWlaUFKmtn8KH41X7a38MGn3LDBDuw0TvtA8,17850
77
- troubadix/plugins/valid_script_tag_names.py,sha256=pxYxEERDgimarP4R8vIlVMe3oMlUh-trR2n1I8X10l4,3401
77
+ troubadix/plugins/valid_script_tag_names.py,sha256=-_82CAI-2sWEnqrQR79-zKBKyUsHQwQiAKy7GoMQ4FE,3398
78
78
  troubadix/plugins/variable_assigned_in_if.py,sha256=M9dqY5kugKSvP9Ahdfm2SC0ou36NmNVy4dNv9HljJXw,3203
79
79
  troubadix/plugins/variable_redefinition_in_foreach.py,sha256=DhABvLQIPdB1ezwvAOQHtOSQJZhMSAwTb7ky7nrXN0k,2450
80
80
  troubadix/plugins/vt_file_permissions.py,sha256=-8rOUD0NpRwB0Ec5oQCcVpDVAaZqsUopqpGPB1To6fY,1521
81
81
  troubadix/plugins/vt_placement.py,sha256=R3v2-iguzT7sP-gWw0AQr0wIUylF9dOCat5fyW66E_c,2720
82
- troubadix/reporter.py,sha256=sPgJPQvF1IILgo5X2psiWctaEKGZLL3CC4Doy_11ZjA,9110
82
+ troubadix/reporter.py,sha256=secwt8CJc5G6ndOsucvcAEfi5JyzhqG2QsEtOcc2iaE,9086
83
83
  troubadix/results.py,sha256=jILEBvV9TMSlYba3R0lFXHy1DWdcJkAZkWCInzdysQ4,2523
84
84
  troubadix/runner.py,sha256=Ua5BlR3lSLf3PhgwI1dYCv8ilM3Me5RTYKhTnaahzCw,5039
85
85
  troubadix/standalone_plugins/__init__.py,sha256=kUR5RAFc7HCeiqdlX36dZOHkUI5wI6V_43RpEcD8b-0,22
86
- troubadix/standalone_plugins/allowed_rev_diff.py,sha256=WTQFfO1QZF-H8GptcR1UEhhsuQC35suhNmS-Cu-YVzQ,4009
87
- troubadix/standalone_plugins/changed_creation_date.py,sha256=gx-fCxQ4tKR_gbGRUvVJ7Ryo771pnbZU_ukVolwd4Uo,3468
86
+ troubadix/standalone_plugins/allowed_rev_diff.py,sha256=lkyg_7spoicuPpnBkj4c4U35XM-5_8uE7bKKu8J5d0Y,4003
87
+ troubadix/standalone_plugins/changed_creation_date.py,sha256=HTZZHmrupbIEP57tmkhVY98GTgsoBDjRla6WDJXbwoU,3450
88
88
  troubadix/standalone_plugins/changed_cves.py,sha256=Qc3gdeJHfioD2UfG4PW1wrj_YKfKQcc3ocdFHgxc8Lk,2857
89
- troubadix/standalone_plugins/changed_oid.py,sha256=2tGp0NWBE3m3xDDfeRI5VXNbvTW210OEKx3lwJzgbpE,3882
89
+ troubadix/standalone_plugins/changed_oid.py,sha256=RW_YTO1E3GWwz_91l5OlQC4aOAfGX1rsXGgtNxYjgak,3867
90
90
  troubadix/standalone_plugins/changed_packages/changed_packages.py,sha256=O-k79wkeCVsKimBsONfKgoI5GYG3jpCFx4hU9B9qpoU,5690
91
91
  troubadix/standalone_plugins/changed_packages/marker/__init__.py,sha256=Le59j2KcaXez1MIPjZ8GDJmSuLGkOVI3k2-BWO30Bc0,993
92
92
  troubadix/standalone_plugins/changed_packages/marker/added_epoch.py,sha256=PfnG5B1v8SwOJw3ez-eb794PT7k-O4hJKDHMSd9lwNo,1797
@@ -95,7 +95,7 @@ troubadix/standalone_plugins/changed_packages/marker/added_udeb.py,sha256=EqSv7c
95
95
  troubadix/standalone_plugins/changed_packages/marker/changed_update.py,sha256=A6nU6-itA32_PEvPSyaSd6pqSFqGc0R6BBvob1YzCCU,1906
96
96
  troubadix/standalone_plugins/changed_packages/marker/dropped_architecture.py,sha256=VWEhhf3aia0orj_ISK1-1r0NJIOgCVbHTylP6h-pfXg,1602
97
97
  troubadix/standalone_plugins/changed_packages/marker/marker.py,sha256=7uZXR2Ds_8soB_2wugCkOSz_3hoX03KMh2NAW0G5Dzg,1278
98
- troubadix/standalone_plugins/changed_packages/package.py,sha256=KC1btPysu_r5KkLrJiOLmp8qVerWkls1-fOv6n7J1NE,2701
98
+ troubadix/standalone_plugins/changed_packages/package.py,sha256=2Dg2rFPJfzAIn_yEp7hKoApGdDq9hvAVOMmTs_2d5xg,3011
99
99
  troubadix/standalone_plugins/common.py,sha256=PkScV-lisNY4WyrzwjV3dK1DF26hJv5JXTcREblJ0v0,1028
100
100
  troubadix/standalone_plugins/dependency_graph/__init__.py,sha256=SQSaQXWmpq5-5ozpqMgvnvoYTK8oj64A5kie1m_5bWQ,88
101
101
  troubadix/standalone_plugins/dependency_graph/checks.py,sha256=riE0miS5gQsynSBDK0LRlHLtVyUI1Q8mAttIY_mIOqQ,3998
@@ -103,14 +103,14 @@ troubadix/standalone_plugins/dependency_graph/cli.py,sha256=RIyGeSm83XJ88N7Ati6z
103
103
  troubadix/standalone_plugins/dependency_graph/dependency_graph.py,sha256=qevcgWF-vVvU9rY34TeCLBhEJQGyL0Ze_kFt853AfzA,5458
104
104
  troubadix/standalone_plugins/dependency_graph/models.py,sha256=7kLrjFRdyReTRTgxte6-3KCBve4evg91AcqkX4I8VJU,1002
105
105
  troubadix/standalone_plugins/deprecate_vts.py,sha256=0IhSpk6Dk63suus1xVRwGiXJ_I1Bl_OaukSn8xg6kIM,9462
106
- troubadix/standalone_plugins/file_extensions.py,sha256=6r8ex2qfsRKVVMQ9lUubIdrWUDhz6QpWspnT9E04Ako,2297
106
+ troubadix/standalone_plugins/file_extensions.py,sha256=uk-3mn1Gl9DuqkQ_-Q2mrXO7nqtm-EnnvM1gfKCIeNw,2294
107
107
  troubadix/standalone_plugins/last_modification.py,sha256=U6eP0c-ZcQkM7iuZlrQqecBX2WtavPdLbt2atr_ZBnc,4280
108
- troubadix/standalone_plugins/no_solution.py,sha256=bzKU1cAn_PtZrARsg8WEkHkxX3aErPIP0hp7Jtei9C4,8544
109
- troubadix/standalone_plugins/util.py,sha256=JTXGmi-_BJouTNe6QzEosLlXUt9jKW-3fz4db05RJJw,696
110
- troubadix/standalone_plugins/version_updated.py,sha256=SVGxIY35AqCfWl7Bl_8uUA5uuN3z6WrrY0mkjp3-DKQ,4115
108
+ troubadix/standalone_plugins/no_solution.py,sha256=XnbFGqskaoJY47TGovTSqWdIvC6aYqda2OuoH7lQKdE,8507
109
+ troubadix/standalone_plugins/util.py,sha256=BTRYHPaxlQrmHgY70dXr4jkky5jdE3CHWv7iwPQD2PE,694
110
+ troubadix/standalone_plugins/version_updated.py,sha256=pyCUklO3cg37ZSNOeBFzNU4ka746EURgPkcISnSBHDs,4100
111
111
  troubadix/troubadix.py,sha256=tLYO_J5Wh3KQ9b45UCVAbF31R2990R1UFi_3dkBgcV8,6005
112
- troubadix-26.1.0.dist-info/METADATA,sha256=K_LusmbkrEUC-_6kgZPI1u4nQeSc4DLSHzjj3qsxPUo,4535
113
- troubadix-26.1.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
114
- troubadix-26.1.0.dist-info/entry_points.txt,sha256=ETEPBi4fKv3o7hzkzceX4838G6g5_5wRdEddYot8N6A,920
115
- troubadix-26.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
116
- troubadix-26.1.0.dist-info/RECORD,,
112
+ troubadix-26.2.0.dist-info/METADATA,sha256=MyOshPXKFnvr8XWdGWNI2oyI4AOcZcdLW9r0Y9_m56o,4535
113
+ troubadix-26.2.0.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
114
+ troubadix-26.2.0.dist-info/entry_points.txt,sha256=ETEPBi4fKv3o7hzkzceX4838G6g5_5wRdEddYot8N6A,920
115
+ troubadix-26.2.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
116
+ troubadix-26.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any