ScriptCollection 4.2.76__py3-none-any.whl → 4.2.78__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.
- ScriptCollection/ScriptCollectionCore.py +130 -15
- ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py +2 -0
- ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py +158 -117
- ScriptCollection/TFCPS/Maven/TFCPS_CodeUnitSpecific_Maven.py +43 -0
- ScriptCollection/TFCPS/Maven/__init__.py +0 -0
- ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py +4 -0
- ScriptCollection/TFCPS/Rust/TFCPS_CodeUnitSpecific_Rust.py +43 -0
- ScriptCollection/TFCPS/Rust/__init__.py +0 -0
- ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py +13 -0
- {scriptcollection-4.2.76.dist-info → scriptcollection-4.2.78.dist-info}/METADATA +1 -1
- {scriptcollection-4.2.76.dist-info → scriptcollection-4.2.78.dist-info}/RECORD +14 -10
- {scriptcollection-4.2.76.dist-info → scriptcollection-4.2.78.dist-info}/WHEEL +0 -0
- {scriptcollection-4.2.76.dist-info → scriptcollection-4.2.78.dist-info}/entry_points.txt +0 -0
- {scriptcollection-4.2.76.dist-info → scriptcollection-4.2.78.dist-info}/top_level.txt +0 -0
|
@@ -13,6 +13,7 @@ import zipfile
|
|
|
13
13
|
import math
|
|
14
14
|
import base64
|
|
15
15
|
import os
|
|
16
|
+
from html.parser import HTMLParser
|
|
16
17
|
from queue import Queue, Empty
|
|
17
18
|
from concurrent.futures import ThreadPoolExecutor
|
|
18
19
|
import xml.etree.ElementTree as ET
|
|
@@ -37,7 +38,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
|
|
|
37
38
|
from .ProgramRunnerPopen import ProgramRunnerPopen
|
|
38
39
|
from .SCLog import SCLog, LogLevel
|
|
39
40
|
|
|
40
|
-
version = "4.2.
|
|
41
|
+
version = "4.2.78"
|
|
41
42
|
__version__ = version
|
|
42
43
|
|
|
43
44
|
class VSCodeWorkspaceShellTask:
|
|
@@ -2622,7 +2623,7 @@ TXDX
|
|
|
2622
2623
|
self.run_program("docker", f"network create {network_name}")
|
|
2623
2624
|
|
|
2624
2625
|
@GeneralUtilities.check_arguments
|
|
2625
|
-
def format_xml_file(self, file: str) -> None:
|
|
2626
|
+
def format_xml_file(self, file: str,add_xml_declaration:bool=True) -> None:
|
|
2626
2627
|
encoding = "utf-8"
|
|
2627
2628
|
element = ET.XML(GeneralUtilities.read_text_from_file(file, encoding))
|
|
2628
2629
|
def trim_texts(elem: ET.Element):
|
|
@@ -2634,15 +2635,125 @@ TXDX
|
|
|
2634
2635
|
trim_texts(child)
|
|
2635
2636
|
trim_texts(element)
|
|
2636
2637
|
ET.indent(element)
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
)
|
|
2638
|
+
content = ET.tostring(element, xml_declaration=add_xml_declaration, encoding="unicode")
|
|
2639
|
+
GeneralUtilities.write_text_to_file(file, content.rstrip("\n") + "\n", encoding)
|
|
2640
|
+
|
|
2641
|
+
@GeneralUtilities.check_arguments
|
|
2642
|
+
def format_html_file(self, file: str, add_html_declaration: bool = False) -> None:
|
|
2643
|
+
encoding = "utf-8"
|
|
2644
|
+
content = GeneralUtilities.read_text_from_file(file, encoding)
|
|
2645
|
+
content=self.format_html_content(content, add_html_declaration)
|
|
2646
|
+
GeneralUtilities.write_text_to_file(file, content, encoding)
|
|
2647
|
+
|
|
2648
|
+
@GeneralUtilities.check_arguments
|
|
2649
|
+
def format_html_content(self, content: str, add_html_declaration: bool = False) -> str:
|
|
2650
|
+
|
|
2651
|
+
VOID_ELEMENTS = {"area", "base", "br", "col", "embed", "hr", "img", "input",
|
|
2652
|
+
"link", "meta", "param", "source", "track", "wbr"}
|
|
2653
|
+
|
|
2654
|
+
class _Node:
|
|
2655
|
+
__slots__ = ("tag", "attrs", "children", "text", "is_void", "raw")
|
|
2656
|
+
def __init__(self, tag=None, attrs=(), text=None, is_void=False, raw=None):
|
|
2657
|
+
self.tag = tag
|
|
2658
|
+
self.attrs = list(attrs)
|
|
2659
|
+
self.children = []
|
|
2660
|
+
self.text = text
|
|
2661
|
+
self.is_void = is_void
|
|
2662
|
+
self.raw = raw
|
|
2663
|
+
|
|
2664
|
+
class _Builder(HTMLParser):
|
|
2665
|
+
def __init__(self):
|
|
2666
|
+
super().__init__(convert_charrefs=False)
|
|
2667
|
+
self.root = _Node()
|
|
2668
|
+
self.stack = [self.root]
|
|
2669
|
+
|
|
2670
|
+
def _top(self):
|
|
2671
|
+
return self.stack[-1]
|
|
2672
|
+
|
|
2673
|
+
def handle_starttag(self, tag, attrs):
|
|
2674
|
+
raw = self.get_starttag_text()
|
|
2675
|
+
raw_lower = raw.lower()
|
|
2676
|
+
original_attrs = []
|
|
2677
|
+
pos = 1 + len(tag)
|
|
2678
|
+
for lc_name, value in attrs:
|
|
2679
|
+
idx = raw_lower.index(lc_name, pos)
|
|
2680
|
+
original_attrs.append((raw[idx:idx + len(lc_name)], value))
|
|
2681
|
+
pos = idx + len(lc_name)
|
|
2682
|
+
node = _Node(tag=tag, attrs=original_attrs, is_void=tag.lower() in VOID_ELEMENTS)
|
|
2683
|
+
self._top().children.append(node)
|
|
2684
|
+
if not node.is_void:
|
|
2685
|
+
self.stack.append(node)
|
|
2686
|
+
|
|
2687
|
+
def handle_endtag(self, tag):
|
|
2688
|
+
if len(self.stack) > 1 and self.stack[-1].tag == tag:
|
|
2689
|
+
self.stack.pop()
|
|
2690
|
+
|
|
2691
|
+
def handle_data(self, data):
|
|
2692
|
+
t = " ".join(data.split())
|
|
2693
|
+
if t:
|
|
2694
|
+
self._top().children.append(_Node(text=t))
|
|
2695
|
+
|
|
2696
|
+
def handle_entityref(self, name):
|
|
2697
|
+
self._top().children.append(_Node(text=f"&{name};"))
|
|
2698
|
+
|
|
2699
|
+
def handle_charref(self, name):
|
|
2700
|
+
self._top().children.append(_Node(text=f"&#{name};"))
|
|
2701
|
+
|
|
2702
|
+
def handle_comment(self, data):
|
|
2703
|
+
self._top().children.append(_Node(raw=f"<!--{data}-->"))
|
|
2704
|
+
|
|
2705
|
+
def handle_decl(self, decl):
|
|
2706
|
+
self._top().children.append(_Node(raw=f"<!{decl}>"))
|
|
2707
|
+
|
|
2708
|
+
def handle_pi(self, data):
|
|
2709
|
+
self._top().children.append(_Node(raw=f"<?{data}>"))
|
|
2710
|
+
|
|
2711
|
+
_angular_exprs: list[str] = []
|
|
2712
|
+
|
|
2713
|
+
def _protect_angular(m: re.Match) -> str:
|
|
2714
|
+
idx = len(_angular_exprs)
|
|
2715
|
+
_angular_exprs.append(m.group(0))
|
|
2716
|
+
return f"__ANGEXPR{idx}__"
|
|
2717
|
+
|
|
2718
|
+
protected = re.sub(r'\{\{[\s\S]*?\}\}', _protect_angular, content)
|
|
2719
|
+
builder = _Builder()
|
|
2720
|
+
builder.feed(protected)
|
|
2721
|
+
ind = " "
|
|
2722
|
+
|
|
2723
|
+
def _serialize(node: _Node, depth: int) -> list:
|
|
2724
|
+
prefix = ind * depth
|
|
2725
|
+
if node.raw is not None:
|
|
2726
|
+
return [prefix + node.raw]
|
|
2727
|
+
if node.text is not None:
|
|
2728
|
+
return [node.text]
|
|
2729
|
+
if node.tag is None:
|
|
2730
|
+
out = []
|
|
2731
|
+
for c in node.children:
|
|
2732
|
+
out.extend(_serialize(c, depth))
|
|
2733
|
+
return out
|
|
2734
|
+
attr_str = "".join(f" {n}" if v is None else f' {n}="{v}"' for n, v in node.attrs)
|
|
2735
|
+
if node.is_void:
|
|
2736
|
+
return [f"{prefix}<{node.tag}{attr_str}>"]
|
|
2737
|
+
has_elem_children = any(c.tag is not None for c in node.children)
|
|
2738
|
+
if not has_elem_children:
|
|
2739
|
+
inner = "".join(c.text or "" for c in node.children)
|
|
2740
|
+
return [f"{prefix}<{node.tag}{attr_str}>{inner}</{node.tag}>"]
|
|
2741
|
+
lines = [f"{prefix}<{node.tag}{attr_str}>"]
|
|
2742
|
+
for c in node.children:
|
|
2743
|
+
child_lines = _serialize(c, depth + 1)
|
|
2744
|
+
if c.text is not None:
|
|
2745
|
+
lines.append(ind * (depth + 1) + child_lines[0])
|
|
2746
|
+
else:
|
|
2747
|
+
lines.extend(child_lines)
|
|
2748
|
+
lines.append(f"{prefix}</{node.tag}>")
|
|
2749
|
+
return lines
|
|
2750
|
+
|
|
2751
|
+
result = "\n".join(line for line in _serialize(builder.root, 0) if line.strip())
|
|
2752
|
+
for i, expr in enumerate(_angular_exprs):
|
|
2753
|
+
result = result.replace(f"__ANGEXPR{i}__", expr)
|
|
2754
|
+
if add_html_declaration and not result.lstrip().startswith("<!DOCTYPE"):
|
|
2755
|
+
result = "<!DOCTYPE html>\n" + result
|
|
2756
|
+
return result
|
|
2646
2757
|
|
|
2647
2758
|
@GeneralUtilities.check_arguments
|
|
2648
2759
|
def get_pip_index_url_arguments_from_local_cache(self)->list[str]:
|
|
@@ -3264,7 +3375,9 @@ OCR-content:
|
|
|
3264
3375
|
tree = ET.parse(file)
|
|
3265
3376
|
root = tree.getroot()
|
|
3266
3377
|
|
|
3267
|
-
for segment in root.findall(".//xliff:segment
|
|
3378
|
+
for segment in root.findall(".//xliff:segment", ns):
|
|
3379
|
+
if segment.get("state", "initial") != "initial":
|
|
3380
|
+
continue
|
|
3268
3381
|
source_el = segment.find("xliff:source", ns)
|
|
3269
3382
|
if source_el is None or not source_el.text:
|
|
3270
3383
|
continue
|
|
@@ -3337,12 +3450,14 @@ OCR-content:
|
|
|
3337
3450
|
@GeneralUtilities.check_arguments
|
|
3338
3451
|
def get_all_commits_in_git_repository(self,repository_folder:str,include_all_heads:bool=False) -> list[str]:
|
|
3339
3452
|
"""Returns a textual visualization of all commits in a git-repository."""
|
|
3340
|
-
#do 'git log --reverse --all --pretty=format:"%ci | %H | %cn <%ce> | %s"'
|
|
3341
|
-
args = ["log", "--reverse", "--pretty=format:%ci | %H | %cn <%ce> | %s"]
|
|
3453
|
+
#do 'git log --reverse --all --pretty=format:"%ci | %H | %cn <%ce> | %d | %s"'
|
|
3454
|
+
args = ["log", "--reverse", "--pretty=format:%ci | %H | %cn <%ce> | %D | %s"]
|
|
3342
3455
|
if include_all_heads:
|
|
3343
3456
|
args.append("--all")
|
|
3344
3457
|
result=self.run_program_argsasarray("git", args, repository_folder, throw_exception_if_exitcode_is_not_zero=True)
|
|
3345
|
-
|
|
3458
|
+
output= result[1]
|
|
3459
|
+
result=output.splitlines()
|
|
3460
|
+
return result
|
|
3346
3461
|
|
|
3347
3462
|
@GeneralUtilities.check_arguments
|
|
3348
3463
|
def write_commit_list_for_repository(self,repository_folder:str,target_file:str,include_all_heads:bool=False) -> None:
|
|
@@ -43,7 +43,9 @@ class TFCPS_CodeUnitSpecific_Docker_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
43
43
|
args.append("--output")
|
|
44
44
|
args.append(f"type=docker,dest={target_file}")
|
|
45
45
|
args.append(".")
|
|
46
|
+
time.sleep(5)
|
|
46
47
|
self._protected_sc.run_program_argsasarray("docker", args, codeunit_folder, print_errors_as_information=True,print_live_output=self.get_verbosity()==LogLevel.Debug)
|
|
48
|
+
time.sleep(2)
|
|
47
49
|
self._protected_sc.run_program_argsasarray("docker", ["load", "-i", target_file], codeunit_folder, print_errors_as_information=True,print_live_output=self.get_verbosity()==LogLevel.Debug)
|
|
48
50
|
|
|
49
51
|
self.__generate_sbom_for_docker_image()
|
|
@@ -191,9 +191,51 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
191
191
|
os.rename(f"{codeunit_folder}\\{bomfile_folder}\\bom.xml", target)
|
|
192
192
|
self._protected_sc.format_xml_file(target)
|
|
193
193
|
|
|
194
|
+
@GeneralUtilities.check_arguments
|
|
195
|
+
def get_dotnet_build_diagnostics(self) -> list[tuple[LogLevel, str, str | None, int | None]]:
|
|
196
|
+
codeunit_name = self.get_codeunit_name()
|
|
197
|
+
codeunit_folder = self.get_codeunit_folder()
|
|
198
|
+
sln_file = os.path.join(codeunit_folder, codeunit_name + ".sln")
|
|
199
|
+
temp_output_folder = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
|
|
200
|
+
GeneralUtilities.ensure_directory_exists(temp_output_folder)
|
|
201
|
+
try:
|
|
202
|
+
run_result = self._protected_sc.run_program("dotnet", f"build \"{sln_file}\" -nologo -v minimal -o \"{temp_output_folder}\"", codeunit_folder, throw_exception_if_exitcode_is_not_zero=False)
|
|
203
|
+
finally:
|
|
204
|
+
GeneralUtilities.ensure_directory_does_not_exist(temp_output_folder)
|
|
205
|
+
diagnostics: list[tuple[LogLevel, str, str | None, int | None]] = []
|
|
206
|
+
pattern = re.compile(r"^\s*(?:(.+?)\((\d+),\d+\): )?(error|warning|message|info) [^:]+: (.+?)(?:\s*\[.+\])?\s*$", re.IGNORECASE)
|
|
207
|
+
for line in GeneralUtilities.string_to_lines(run_result[1] + "\n" + run_result[2]):
|
|
208
|
+
m = pattern.match(line)
|
|
209
|
+
if m:
|
|
210
|
+
file_path = m.group(1)
|
|
211
|
+
line_number = int(m.group(2)) if m.group(2) else None
|
|
212
|
+
level_str = m.group(3).lower()
|
|
213
|
+
message = m.group(4)
|
|
214
|
+
if level_str == "error":
|
|
215
|
+
level = LogLevel.Error
|
|
216
|
+
elif level_str == "warning":
|
|
217
|
+
level = LogLevel.Warning
|
|
218
|
+
else:
|
|
219
|
+
level = LogLevel.Information
|
|
220
|
+
diagnostics.append((level, message, file_path, line_number))
|
|
221
|
+
return diagnostics
|
|
222
|
+
|
|
194
223
|
@GeneralUtilities.check_arguments
|
|
195
224
|
def linting(self) -> None:
|
|
196
|
-
|
|
225
|
+
codeunit_name = self.get_codeunit_name()
|
|
226
|
+
codeunit_folder = self.get_codeunit_folder()
|
|
227
|
+
self._protected_sc.format_xml_file(os.path.join(codeunit_folder, codeunit_name, codeunit_name + ".csproj"), add_xml_declaration=False)
|
|
228
|
+
self._protected_sc.format_xml_file(os.path.join(codeunit_folder, codeunit_name + "Tests", codeunit_name + "Tests.csproj"), add_xml_declaration=False)
|
|
229
|
+
self.standardized_task_verify_standard_format_csproj_files()
|
|
230
|
+
diagnostics = self.get_dotnet_build_diagnostics()
|
|
231
|
+
has_errors = False
|
|
232
|
+
for (level, message, file, line) in diagnostics:
|
|
233
|
+
location = f" ({file}:{line})" if file else ""
|
|
234
|
+
self._protected_sc.log.log(f"{message}{location}", level)
|
|
235
|
+
if level == LogLevel.Error:#should not occurr on scbuildcodeunits because then the build would have failed already.
|
|
236
|
+
has_errors = True
|
|
237
|
+
if has_errors:
|
|
238
|
+
raise ValueError("Linting-issues occurred.")
|
|
197
239
|
|
|
198
240
|
@GeneralUtilities.check_arguments
|
|
199
241
|
def do_common_tasks(self,current_codeunit_version:str,certificateGeneratorInformation:CertificateGeneratorInformationBase)-> None:
|
|
@@ -207,7 +249,6 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
207
249
|
self._protected_sc.replace_version_in_nuspec_file(GeneralUtilities.resolve_relative_path(f"./Build/{codeunit_name}.nuspec", folder_of_current_file), codeunit_version)
|
|
208
250
|
if certificateGeneratorInformation.generate_certificate():
|
|
209
251
|
self.tfcps_Tools_General.set_constants_for_certificate_private_information(self.get_codeunit_folder())
|
|
210
|
-
self.standardized_task_verify_standard_format_csproj_files()
|
|
211
252
|
|
|
212
253
|
@GeneralUtilities.check_arguments
|
|
213
254
|
def standardized_task_verify_standard_format_csproj_files(self) -> bool:
|
|
@@ -237,64 +278,64 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
237
278
|
codeunit_version_regex = re.escape(codeunit_version)
|
|
238
279
|
codeunit_description_regex = re.escape(codeunit_description)
|
|
239
280
|
regex = f"""^<Project Sdk=\\"Microsoft\\.NET\\.Sdk\\">
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
<\\/Project
|
|
281
|
+
<PropertyGroup>
|
|
282
|
+
<TargetFramework>([^<]+)<\\/TargetFramework>
|
|
283
|
+
<Authors>([^<]+)<\\/Authors>
|
|
284
|
+
<Version>{codeunit_version_regex}<\\/Version>
|
|
285
|
+
<AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
|
|
286
|
+
<FileVersion>{codeunit_version_regex}<\\/FileVersion>
|
|
287
|
+
<SelfContained>false<\\/SelfContained>
|
|
288
|
+
<IsPackable>false<\\/IsPackable>
|
|
289
|
+
<PreserveCompilationContext>false<\\/PreserveCompilationContext>
|
|
290
|
+
<GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
|
|
291
|
+
<Copyright>([^<]+)<\\/Copyright>
|
|
292
|
+
<Description>{codeunit_description_regex}<\\/Description>
|
|
293
|
+
<PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
|
|
294
|
+
<RepositoryUrl>https:\\/\\/([^<]+)\\.git<\\/RepositoryUrl>
|
|
295
|
+
<RootNamespace>([^<]+)\\.Core<\\/RootNamespace>
|
|
296
|
+
<ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
|
|
297
|
+
<Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
|
|
298
|
+
<Configurations>Development;QualityCheck;Productive<\\/Configurations>
|
|
299
|
+
<IsTestProject>false<\\/IsTestProject>
|
|
300
|
+
<LangVersion>([^<]+)<\\/LangVersion>
|
|
301
|
+
<PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
|
|
302
|
+
<GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
|
|
303
|
+
<AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
|
|
304
|
+
<OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResult_DotNet_win\\-x64<\\/OutputPath>
|
|
305
|
+
<PlatformTarget>([^<]+)<\\/PlatformTarget>
|
|
306
|
+
<WarningLevel>\\d<\\/WarningLevel>
|
|
307
|
+
<Prefer32Bit>false<\\/Prefer32Bit>
|
|
308
|
+
<SignAssembly>true<\\/SignAssembly>
|
|
309
|
+
<AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
|
|
310
|
+
<DelaySign>true<\\/DelaySign>
|
|
311
|
+
<NoWarn>([^<]+)<\\/NoWarn>
|
|
312
|
+
<WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
|
|
313
|
+
<ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}\\.sarif<\\/ErrorLog>
|
|
314
|
+
<OutputType>([^<]+)<\\/OutputType>
|
|
315
|
+
<DocumentationFile>\\.\\.\\\\Other\\\\Artifacts\\\\MetaInformation\\\\{codeunit_name_regex}\\.xml<\\/DocumentationFile>(\\n|.)*
|
|
316
|
+
<\\/PropertyGroup>
|
|
317
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
|
|
318
|
+
<DebugType>full<\\/DebugType>
|
|
319
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
320
|
+
<Optimize>false<\\/Optimize>
|
|
321
|
+
<DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
|
|
322
|
+
<ErrorReport>prompt<\\/ErrorReport>
|
|
323
|
+
<\\/PropertyGroup>
|
|
324
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
|
|
325
|
+
<DebugType>portable<\\/DebugType>
|
|
326
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
327
|
+
<Optimize>false<\\/Optimize>
|
|
328
|
+
<DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
|
|
329
|
+
<ErrorReport>none<\\/ErrorReport>
|
|
330
|
+
<\\/PropertyGroup>
|
|
331
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
|
|
332
|
+
<DebugType>portable<\\/DebugType>
|
|
333
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
334
|
+
<Optimize>false<\\/Optimize>
|
|
335
|
+
<DefineConstants>Productive<\\/DefineConstants>
|
|
336
|
+
<ErrorReport>none<\\/ErrorReport>
|
|
337
|
+
<\\/PropertyGroup>(\\n|.)*
|
|
338
|
+
<\\/Project>\\n?$"""
|
|
298
339
|
result = self.__standardized_task_verify_standard_format_for_csproj_files(regex, csproj_file)
|
|
299
340
|
return (result[0], regex, result[1])
|
|
300
341
|
|
|
@@ -302,63 +343,63 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
302
343
|
codeunit_name_regex = re.escape(codeunit_name)
|
|
303
344
|
codeunit_version_regex = re.escape(codeunit_version)
|
|
304
345
|
regex = f"""^<Project Sdk=\\"Microsoft\\.NET\\.Sdk\\">
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
<\\/Project
|
|
346
|
+
<PropertyGroup>
|
|
347
|
+
<TargetFramework>([^<]+)<\\/TargetFramework>
|
|
348
|
+
<Authors>([^<]+)<\\/Authors>
|
|
349
|
+
<Version>{codeunit_version_regex}<\\/Version>
|
|
350
|
+
<AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
|
|
351
|
+
<FileVersion>{codeunit_version_regex}<\\/FileVersion>
|
|
352
|
+
<SelfContained>false<\\/SelfContained>
|
|
353
|
+
<IsPackable>false<\\/IsPackable>
|
|
354
|
+
<PreserveCompilationContext>false<\\/PreserveCompilationContext>
|
|
355
|
+
<GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
|
|
356
|
+
<Copyright>([^<]+)<\\/Copyright>
|
|
357
|
+
<Description>{codeunit_name_regex}Tests is the test-project for {codeunit_name_regex}\\.<\\/Description>
|
|
358
|
+
<PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
|
|
359
|
+
<RepositoryUrl>https:\\/\\/([^<]+)\\.git</RepositoryUrl>
|
|
360
|
+
<RootNamespace>([^<]+)\\.Tests<\\/RootNamespace>
|
|
361
|
+
<ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
|
|
362
|
+
<Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
|
|
363
|
+
<Configurations>Development;QualityCheck;Productive<\\/Configurations>
|
|
364
|
+
<IsTestProject>true<\\/IsTestProject>
|
|
365
|
+
<LangVersion>([^<]+)<\\/LangVersion>
|
|
366
|
+
<PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
|
|
367
|
+
<GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
|
|
368
|
+
<AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
|
|
369
|
+
<OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResultTests_DotNet_win\\-x64<\\/OutputPath>
|
|
370
|
+
<PlatformTarget>([^<]+)<\\/PlatformTarget>
|
|
371
|
+
<WarningLevel>\\d<\\/WarningLevel>
|
|
372
|
+
<Prefer32Bit>false<\\/Prefer32Bit>
|
|
373
|
+
<SignAssembly>true<\\/SignAssembly>
|
|
374
|
+
<AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
|
|
375
|
+
<DelaySign>true<\\/DelaySign>
|
|
376
|
+
<NoWarn>([^<]+)<\\/NoWarn>
|
|
377
|
+
<WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
|
|
378
|
+
<ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}Tests\\.sarif<\\/ErrorLog>
|
|
379
|
+
<OutputType>Library<\\/OutputType>(\\n|.)*
|
|
380
|
+
<\\/PropertyGroup>
|
|
381
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
|
|
382
|
+
<DebugType>full<\\/DebugType>
|
|
383
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
384
|
+
<Optimize>false<\\/Optimize>
|
|
385
|
+
<DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
|
|
386
|
+
<ErrorReport>prompt<\\/ErrorReport>
|
|
387
|
+
<\\/PropertyGroup>
|
|
388
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
|
|
389
|
+
<DebugType>portable<\\/DebugType>
|
|
390
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
391
|
+
<Optimize>false<\\/Optimize>
|
|
392
|
+
<DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
|
|
393
|
+
<ErrorReport>none<\\/ErrorReport>
|
|
394
|
+
<\\/PropertyGroup>
|
|
395
|
+
<PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
|
|
396
|
+
<DebugType>portable<\\/DebugType>
|
|
397
|
+
<DebugSymbols>true<\\/DebugSymbols>
|
|
398
|
+
<Optimize>false<\\/Optimize>
|
|
399
|
+
<DefineConstants>Productive<\\/DefineConstants>
|
|
400
|
+
<ErrorReport>none<\\/ErrorReport>
|
|
401
|
+
<\\/PropertyGroup>(\\n|.)*
|
|
402
|
+
<\\/Project>\\n?$"""
|
|
362
403
|
result = self.__standardized_task_verify_standard_format_for_csproj_files(regex, csproj_file)
|
|
363
404
|
return (result[0], regex, result[1])
|
|
364
405
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from ...GeneralUtilities import GeneralUtilities
|
|
3
|
+
from ...SCLog import LogLevel
|
|
4
|
+
from ..TFCPS_CodeUnitSpecific_Base import TFCPS_CodeUnitSpecific_Base, TFCPS_CodeUnitSpecific_Base_CLI
|
|
5
|
+
|
|
6
|
+
class TFCPS_CodeUnitSpecific_Maven_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
7
|
+
|
|
8
|
+
def __init__(self, current_file: str, verbosity: LogLevel, targetenvironmenttype: str, use_cache: bool, is_pre_merge: bool):
|
|
9
|
+
super().__init__(current_file, verbosity, targetenvironmenttype, use_cache, is_pre_merge)
|
|
10
|
+
|
|
11
|
+
@GeneralUtilities.check_arguments
|
|
12
|
+
def build(self) -> None:
|
|
13
|
+
pass#TODO
|
|
14
|
+
|
|
15
|
+
@GeneralUtilities.check_arguments
|
|
16
|
+
def linting(self) -> None:
|
|
17
|
+
pass#TODO
|
|
18
|
+
|
|
19
|
+
@GeneralUtilities.check_arguments
|
|
20
|
+
def run_testcases(self) -> None:
|
|
21
|
+
pass#TODO
|
|
22
|
+
|
|
23
|
+
def get_dependencies(self) -> dict[str, set[str]]:
|
|
24
|
+
return dict[str, set[str]]()#TODO
|
|
25
|
+
|
|
26
|
+
@GeneralUtilities.check_arguments
|
|
27
|
+
def get_available_versions(self, dependencyname: str) -> list[str]:
|
|
28
|
+
return []#TODO
|
|
29
|
+
|
|
30
|
+
@GeneralUtilities.check_arguments
|
|
31
|
+
def set_dependency_version(self, name: str, new_version: str) -> None:
|
|
32
|
+
raise ValueError("Operation is not implemented.")
|
|
33
|
+
|
|
34
|
+
class TFCPS_CodeUnitSpecific_Maven_CLI:
|
|
35
|
+
|
|
36
|
+
@staticmethod
|
|
37
|
+
@GeneralUtilities.check_arguments
|
|
38
|
+
def parse(file: str) -> TFCPS_CodeUnitSpecific_Maven_Functions:
|
|
39
|
+
parser = TFCPS_CodeUnitSpecific_Base_CLI.get_base_parser()
|
|
40
|
+
#add custom parameter if desired
|
|
41
|
+
args = parser.parse_args()
|
|
42
|
+
result: TFCPS_CodeUnitSpecific_Maven_Functions = TFCPS_CodeUnitSpecific_Maven_Functions(file, LogLevel(int(args.verbosity)), args.targetenvironmenttype, not args.nocache, args.ispremerge)
|
|
43
|
+
return result
|
|
File without changes
|
|
@@ -24,6 +24,10 @@ class TFCPS_CodeUnitSpecific_NodeJS_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
|
24
24
|
|
|
25
25
|
@GeneralUtilities.check_arguments
|
|
26
26
|
def linting(self) -> None:
|
|
27
|
+
src_folder = os.path.join(self.get_codeunit_folder(), "src")
|
|
28
|
+
for file in GeneralUtilities.get_all_files_of_folder(src_folder):
|
|
29
|
+
if file.endswith(".html"):
|
|
30
|
+
self._protected_sc.format_html_file(file, os.path.basename(file) == "index.html")
|
|
27
31
|
self._protected_sc.run_with_epew("npm", "run lint", self.get_codeunit_folder(),print_live_output=self.get_verbosity()==LogLevel.Debug,encode_argument_in_base64=True)
|
|
28
32
|
|
|
29
33
|
@GeneralUtilities.check_arguments
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from ...GeneralUtilities import GeneralUtilities
|
|
3
|
+
from ...SCLog import LogLevel
|
|
4
|
+
from ..TFCPS_CodeUnitSpecific_Base import TFCPS_CodeUnitSpecific_Base, TFCPS_CodeUnitSpecific_Base_CLI
|
|
5
|
+
|
|
6
|
+
class TFCPS_CodeUnitSpecific_Rust_Functions(TFCPS_CodeUnitSpecific_Base):
|
|
7
|
+
|
|
8
|
+
def __init__(self, current_file: str, verbosity: LogLevel, targetenvironmenttype: str, use_cache: bool, is_pre_merge: bool):
|
|
9
|
+
super().__init__(current_file, verbosity, targetenvironmenttype, use_cache, is_pre_merge)
|
|
10
|
+
|
|
11
|
+
@GeneralUtilities.check_arguments
|
|
12
|
+
def build(self) -> None:
|
|
13
|
+
pass#TODO
|
|
14
|
+
|
|
15
|
+
@GeneralUtilities.check_arguments
|
|
16
|
+
def linting(self) -> None:
|
|
17
|
+
pass#TODO
|
|
18
|
+
|
|
19
|
+
@GeneralUtilities.check_arguments
|
|
20
|
+
def run_testcases(self) -> None:
|
|
21
|
+
pass#TODO
|
|
22
|
+
|
|
23
|
+
def get_dependencies(self) -> dict[str, set[str]]:
|
|
24
|
+
return dict[str, set[str]]()#TODO
|
|
25
|
+
|
|
26
|
+
@GeneralUtilities.check_arguments
|
|
27
|
+
def get_available_versions(self, dependencyname: str) -> list[str]:
|
|
28
|
+
return []#TODO
|
|
29
|
+
|
|
30
|
+
@GeneralUtilities.check_arguments
|
|
31
|
+
def set_dependency_version(self, name: str, new_version: str) -> None:
|
|
32
|
+
raise ValueError("Operation is not implemented.")
|
|
33
|
+
|
|
34
|
+
class TFCPS_CodeUnitSpecific_Rust_CLI:
|
|
35
|
+
|
|
36
|
+
@staticmethod
|
|
37
|
+
@GeneralUtilities.check_arguments
|
|
38
|
+
def parse(file: str) -> TFCPS_CodeUnitSpecific_Rust_Functions:
|
|
39
|
+
parser = TFCPS_CodeUnitSpecific_Base_CLI.get_base_parser()
|
|
40
|
+
#add custom parameter if desired
|
|
41
|
+
args = parser.parse_args()
|
|
42
|
+
result: TFCPS_CodeUnitSpecific_Rust_Functions = TFCPS_CodeUnitSpecific_Rust_Functions(file, LogLevel(int(args.verbosity)), args.targetenvironmenttype, not args.nocache, args.ispremerge)
|
|
43
|
+
return result
|
|
File without changes
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import json
|
|
3
3
|
from datetime import datetime, timedelta,timezone
|
|
4
|
+
import yaml
|
|
4
5
|
from ..GeneralUtilities import GeneralUtilities
|
|
5
6
|
from ..ScriptCollectionCore import ScriptCollectionCore
|
|
6
7
|
from ..SCLog import LogLevel
|
|
@@ -67,6 +68,7 @@ class TFCPS_CodeUnit_BuildCodeUnits:
|
|
|
67
68
|
self.__search_for_vulnerabilities()
|
|
68
69
|
self.__search_for_secrets()
|
|
69
70
|
if self.is_pre_merge():
|
|
71
|
+
self.__translate()
|
|
70
72
|
self.__collect_metrics()
|
|
71
73
|
self.__generate_loc_diagram()
|
|
72
74
|
end_time:datetime=GeneralUtilities.get_now()
|
|
@@ -97,6 +99,17 @@ class TFCPS_CodeUnit_BuildCodeUnits:
|
|
|
97
99
|
def build_codeunits_in_container(self) -> None:
|
|
98
100
|
raise ValueError("Not implemented.")
|
|
99
101
|
|
|
102
|
+
@GeneralUtilities.check_arguments
|
|
103
|
+
def __translate(self) -> None:
|
|
104
|
+
for taskfile_name in ("Taskfile.yml", "Taskfile.yaml"):
|
|
105
|
+
taskfile = os.path.join(self.repository, taskfile_name)
|
|
106
|
+
if os.path.isfile(taskfile):
|
|
107
|
+
with open(taskfile, "r", encoding="utf-8") as f:
|
|
108
|
+
taskfile_content = yaml.safe_load(f)
|
|
109
|
+
if isinstance(taskfile_content.get("tasks"), dict) and "Translate" in taskfile_content["tasks"]:
|
|
110
|
+
self.sc.run_program("task", "Translate", self.repository, print_live_output=self.sc.log.loglevel == LogLevel.Debug)
|
|
111
|
+
break
|
|
112
|
+
|
|
100
113
|
@GeneralUtilities.check_arguments
|
|
101
114
|
def __collect_metrics(self) -> None:
|
|
102
115
|
project_version: str=self.tfcps_tools_general.get_version_of_project(self.repository)
|
|
@@ -9,7 +9,7 @@ ScriptCollection/ProgramRunnerMock.py,sha256=uTu-aFle1W_oKjeQEmuPsFPQpvo0kRf2FrR
|
|
|
9
9
|
ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
|
|
10
10
|
ScriptCollection/ProgramRunnerSudo.py,sha256=_khC3xuTdrPoLluBJZWfldltmmuKltABJPcbjZSFW-4,4835
|
|
11
11
|
ScriptCollection/SCLog.py,sha256=8TRy1LeYMsPOIuWUcnUNNbO5pd-cNBS-3cn-kdzP8FU,4768
|
|
12
|
-
ScriptCollection/ScriptCollectionCore.py,sha256=
|
|
12
|
+
ScriptCollection/ScriptCollectionCore.py,sha256=fvpJovrlNqW5EcN6NaZH7o5984PM2meD-BsrJjR0Er8,187128
|
|
13
13
|
ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
14
|
ScriptCollection/OCIImages/AbstractImageHandler.py,sha256=83qDMILwxhH9DbC0sb358Vu8PXEysmJJyap_6gECZqs,1627
|
|
15
15
|
ScriptCollection/OCIImages/OCIImageManager.py,sha256=aBogkSXNDyi8NO11N-s03nuFJEv7PyJ-wjHuYYeZfvs,6662
|
|
@@ -24,7 +24,7 @@ ScriptCollection/Resources/CultureChooser/index.html,sha256=gxQzbrSp4WU52TqN-gcB
|
|
|
24
24
|
ScriptCollection/Resources/MaintenanceSite/MaintenanceSite.html,sha256=CX9S1bdOz6xU2aGfr03tJRGczQrlpn-IeODc15d5kc0,232
|
|
25
25
|
ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py,sha256=EMNDgkUem87aH1csz7eoSBBEKkiZMLZqZhnxKSPQWe0,27845
|
|
26
26
|
ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=MieeAAKm1y58qXp1cCUN5mj5vwpq4Pc1uusUjPQzpvc,8237
|
|
27
|
-
ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=
|
|
27
|
+
ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=2CNCmngOgygvhJrBdMbrq5W6LZ-xxchlxeThaDQZ-TA,15792
|
|
28
28
|
ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=yqGstRjRfVVGbqrcBgtYStqth2x2SvBb3y2Ht8GsuMQ,6554
|
|
29
29
|
ScriptCollection/TFCPS/TFCPS_Generic.py,sha256=Tpzgiz6m3-cYCkObZOG5Uu7oM-EMoWFzzRpLl3Lblqo,2023
|
|
30
30
|
ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=-Ev9D3bZDlUk2WFQhcmvzQ3FCS97OdsVUd0koAdmpZc,7474
|
|
@@ -32,23 +32,27 @@ ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=Ajfy2pLajTuU6UpwItHt4C2a-gL
|
|
|
32
32
|
ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py,sha256=f0Uq1cA_4LvmL72cal0crrbKF6PcxL13D9wBKuQ1YBw,2328
|
|
33
33
|
ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=VbS3qdpCc4ZgbwlwxHdLB_ras8dDmJDBklRrWIrhbDQ,101356
|
|
34
34
|
ScriptCollection/TFCPS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
-
ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=
|
|
35
|
+
ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=bHBIaZuV1DqvBI5BGG8xp5PYDfDDGPlbcma8Z_0mCjc,12191
|
|
36
36
|
ScriptCollection/TFCPS/Docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
37
|
ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationBase.py,sha256=bT6Gd5pQpZCw4OQz6HWkPCSn5z__eUUEisABLDSxd0o,200
|
|
38
38
|
ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationGenerate.py,sha256=QyjOfMY22JWCvKjMelHiDWbJiWqotOfebpJpgDUaoO4,237
|
|
39
39
|
ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationNoGenerate.py,sha256=i0zEGehj0sttxjjZtoq2KFSKp_ulxVyWp_ZgAhIY_So,241
|
|
40
|
-
ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py,sha256=
|
|
40
|
+
ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py,sha256=0Jd-Sik8dY8KMdTsMIpedvYmgsuiyCcoL1VhT5ePQd8,34200
|
|
41
41
|
ScriptCollection/TFCPS/DotNet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
42
|
ScriptCollection/TFCPS/Flutter/TFCPS_CodeUnitSpecific_Flutter.py,sha256=KAjyFyEjpkghsVPskfsHD68k4Z92gRCT_q6BXfikRwE,7660
|
|
43
43
|
ScriptCollection/TFCPS/Flutter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
44
|
ScriptCollection/TFCPS/Go/TFCPS_CodeUnitSpecific_Go.py,sha256=kyx26AnT1-LySFA46wfJ9yZUKYdMWTD0U2XZfSQbuB0,3497
|
|
45
45
|
ScriptCollection/TFCPS/Go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
-
ScriptCollection/TFCPS/
|
|
46
|
+
ScriptCollection/TFCPS/Maven/TFCPS_CodeUnitSpecific_Maven.py,sha256=nwlofbDhKmFdOZ0Gt8AXqoEl8u-5qfoh9URGYbMJ9C4,1695
|
|
47
|
+
ScriptCollection/TFCPS/Maven/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=57I7xbLtCtH-Edt1QKCSXF7wnGyAhbGMdghD_VFZIIY,13184
|
|
47
49
|
ScriptCollection/TFCPS/NodeJS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
50
|
ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py,sha256=9XK7XnbeOnq_4siVoWovogStoKFiZLhGh3C_f2YaznI,13621
|
|
49
51
|
ScriptCollection/TFCPS/Python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
scriptcollection-4.2.
|
|
53
|
-
scriptcollection-4.2.
|
|
54
|
-
scriptcollection-4.2.
|
|
52
|
+
ScriptCollection/TFCPS/Rust/TFCPS_CodeUnitSpecific_Rust.py,sha256=S_9g9IliQzBBqTQquYj6gI1E3OlGfGZsxXw-mSEe-iA,1690
|
|
53
|
+
ScriptCollection/TFCPS/Rust/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
+
scriptcollection-4.2.78.dist-info/METADATA,sha256=wc5MdwqJz28QC9dQL-k7Mz-J9bv1OucsY0MKKgOAAog,7691
|
|
55
|
+
scriptcollection-4.2.78.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
56
|
+
scriptcollection-4.2.78.dist-info/entry_points.txt,sha256=27XwAJEcaMEc1be0Ec1vKHCbiU4Ziu8jKL-SqsrYOIQ,4680
|
|
57
|
+
scriptcollection-4.2.78.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
|
|
58
|
+
scriptcollection-4.2.78.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|