mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
import sys
|
|
import settings
|
|
import utils
|
|
import difflib
|
|
|
|
|
|
def ignore_line_ending(ch):
|
|
return difflib.IS_CHARACTER_JUNK(ch, ws=" \r\n")
|
|
|
|
|
|
def compare_files(file1, file2):
|
|
diff = difflib.ndiff(open(file1).readlines(),
|
|
open(file2).readlines(), None, ignore_line_ending)
|
|
ret = ""
|
|
for line in diff:
|
|
if line.startswith("+") or line.startswith("-"):
|
|
ret += line
|
|
|
|
return ret
|
|
|
|
|
|
def compare_folders(folder1, folder2, output_file):
|
|
"""
|
|
Compares the contents of two folders and writes the differences to the output file.
|
|
"""
|
|
|
|
return_md = ""
|
|
|
|
for lang in settings.languages:
|
|
expected_files = ""
|
|
|
|
generated_output_rst = settings.generated_output_rst.format(
|
|
language=lang)
|
|
generated_output_csv = settings.generated_output_csv.format(
|
|
language=lang)
|
|
|
|
# check if files exist in both folder1 and folder 2
|
|
if not utils.check_file_exists(f"{folder1}/{generated_output_rst}"):
|
|
expected_files += f"- {generated_output_rst} doesn't exist in folder {folder1}\n"
|
|
if not utils.check_file_exists(f"{folder2}/{generated_output_rst}"):
|
|
expected_files += f"- {generated_output_rst} doesn't exist in folder {folder2}\n"
|
|
if not utils.check_file_exists(f"{folder1}/{generated_output_csv}"):
|
|
expected_files += f"- {generated_output_csv} doesn't exist in folder {folder1}\n"
|
|
if not utils.check_file_exists(f"{folder2}/{generated_output_csv}"):
|
|
expected_files += f"- {generated_output_csv} doesn't exist in folder {folder2}\n"
|
|
|
|
if expected_files != "":
|
|
print("Expected files are missing", file=sys.stderr)
|
|
return_md += f"\n### {lang}\n\n#### Expected files are missing for {lang}\n{expected_files}\n"
|
|
continue
|
|
|
|
# compare contents of files
|
|
cmp1 = compare_files(
|
|
f"{folder1}/{generated_output_rst}", f"{folder2}/{generated_output_rst}")
|
|
cmp2 = compare_files(
|
|
f"{folder1}/{generated_output_csv}", f"{folder2}/{generated_output_csv}")
|
|
|
|
if cmp1 != "" or cmp2 != "":
|
|
print("Generated file contents are not matching", file=sys.stderr)
|
|
return_md += f"\n### {lang}\n\n#### Generated file changes for {lang}\n\n"
|
|
if cmp1 != "":
|
|
return_md += f"- Changes to {generated_output_rst}:\n```diff\n{cmp1}```\n\n"
|
|
if cmp2 != "":
|
|
return_md += f"- Changes to {generated_output_csv}:\n```diff\n{cmp2}```\n\n"
|
|
|
|
with open(output_file, 'w', newline='') as out:
|
|
out.write(return_md)
|