import os
import difflib
import sys
def get_all_files(folder):
file_list = []
for root, _, files in [Link](folder):
for file in files:
relative_path = [Link]([Link](root, file), folder)
file_list.append(relative_path)
return set(file_list)
def read_file_lines(filepath, ignore_comments):
try:
with open(filepath, 'r', encoding='utf-8') as f:
return [[Link]() for line in [Link]() if not (ignore_comments
and ([Link]().startswith('*') or [Link]().startswith('//')))]
except Exception as e:
return [f"[Error reading file: {e}]"]
def format_diff(file, content1, content2):
diff = list([Link](content1, content2))
differences = []
line_num1, line_num2 = 1, 1
current_block = []
for i, line in enumerate(diff):
if [Link](' '):
line_num1 += 1
line_num2 += 1
if current_block:
[Link]('\n'.join(current_block) + '\n')
current_block = []
elif [Link]('-'): # Line only in file1
if not current_block:
start_line = line_num1
current_block.append(f"file1> {line[2:]}")
line_num1 += 1
elif [Link]('+'): # Line only in file2
current_block.append(f"file2> {line[2:]}")
line_num2 += 1
if i == len(diff) - 1 or ([Link](' ') and current_block):
if current_block:
[Link](f"Line number: {start_line} - {line_num1 - 1}\n"
+ '\n'.join(current_block) + '\n')
current_block = []
return f"Differences in {file}:\n\n" + '\n'.join(differences) + "\n\n"
def compare_folders(folder1, folder2, ignore_comments, output_file='[Link]'):
files1 = get_all_files(folder1)
files2 = get_all_files(folder2)
all_files = [Link](files2)
differences = []
for file in all_files:
path1 = [Link](folder1, file)
path2 = [Link](folder2, file)
if file not in files1:
[Link](f"File only in {folder2}: {file}\n\n")
elif file not in files2:
[Link](f"File only in {folder1}: {file}\n\n")
else:
content1 = read_file_lines(path1, ignore_comments)
content2 = read_file_lines(path2, ignore_comments)
if content1 != content2:
diff_text = format_diff(file, content1, content2)
[Link](diff_text)
with open(output_file, 'w', encoding='utf-8') as f:
if differences:
[Link](differences)
else:
[Link]("No differences found.\n")
print(f"Comparison complete. Results saved in {output_file}")
if __name__ == "__main__":
if len([Link]) < 3:
print("Usage: python [Link] <folder1> <folder2> [ignoreComments]")
[Link](1)
folder1 = [Link][1]
folder2 = [Link][2]
ignore_comments = len([Link]) > 3 and [Link][3] == "ignoreComments"
compare_folders(folder1, folder2, ignore_comments)