Skip to content

Commit 0c010cf

Browse files
committed
allow to compare two markdown files directly
1 parent 42f8e52 commit 0c010cf

File tree

1 file changed

+51
-5
lines changed

1 file changed

+51
-5
lines changed

winpython/diff.py

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
import re
1212
import shutil
1313
from packaging import version
14+
import sys
15+
1416
from . import utils
1517

1618
CHANGELOGS_DIR = Path(__file__).parent.parent / "changelogs"
17-
assert CHANGELOGS_DIR.is_dir()
1819

1920
class Package:
2021
PATTERNS = [
@@ -48,7 +49,7 @@ class PackageIndex:
4849
def __init__(self, version, searchdir=None, flavor="", architecture=64):
4950
self.version = version
5051
self.flavor = flavor
51-
self.searchdir = searchdir
52+
self.searchdir = Path(searchdir) if searchdir else CHANGELOGS_DIR
5253
self.architecture = architecture
5354
self.packages = {"tools": {}, "python": {}, "wheelhouse": {}}
5455
self._load_index()
@@ -102,6 +103,10 @@ def find_previous_version(target_version, searchdir=None, flavor="", architectur
102103
return max(versions, key=version.parse, default=target_version)
103104

104105
def compare_package_indexes(version2, version1=None, searchdir=None, flavor="", flavor1=None, architecture=64):
106+
"""Comparison by looking versions in a given Changelog directory"""
107+
if not searchdir or (not Path(searchdir).is_dir() and not CHANGELOGS_DIR.is_dir()):
108+
print(f"Error: changelogs directory {CHANGELOGS_DIR} does not exist.")
109+
sys.exit(1)
105110
version1 = version1 or find_previous_version(version2, searchdir, flavor, architecture)
106111
flavor1 = flavor1 or flavor
107112

@@ -140,8 +145,49 @@ def write_changelog(version2, version1=None, searchdir=None, flavor="", architec
140145
f.write(changelog)
141146
# Copy to winpython/changelogs back to basedir
142147
if basedir:
143-
shutil.copyfile(output_file, basedir / output_file.name)
148+
shutil.copyfile(output_file, Path(basedir) / output_file.name)
149+
150+
def compare_two_markdown_files(file1, file2):
151+
"""Compare two arbitrary markdown files with WinPython changelog format."""
152+
class DummyPackageIndex(PackageIndex):
153+
def __init__(self, filename):
154+
self.packages = {"tools": {}, "python": {}, "wheelhouse": {}}
155+
self._load_index(filename)
156+
157+
def _load_index(self, filename):
158+
with open(filename, "r", encoding=utils.guess_encoding(filename)[0]) as f:
159+
self._parse_index(f.read())
160+
161+
pi1 = DummyPackageIndex(Path(file1))
162+
pi2 = DummyPackageIndex(Path(file2))
163+
164+
text = f"## Differences between {file1} and {file2}\n\n<details>\n\n"
165+
for key in PackageIndex.HEADERS:
166+
diff = compare_packages(pi1.packages[key], pi2.packages[key])
167+
if diff:
168+
text += f"\n{PackageIndex.HEADERS[key]}\n\n{diff}"
169+
return text + "\n</details>\n\n* * *\n"
170+
171+
def print_usage():
172+
print("Usage:")
173+
print(" python diff.py file1.md file2.md")
174+
print(" - Compare two markdown changelog files directly.")
175+
print(" python diff.py <version2> <version1> [searchdir] [flavor] [architecture]")
176+
print(" - Compare WinPython markdown changelogs by version.")
144177

145178
if __name__ == "__main__":
146-
print(compare_package_indexes("3.7.4.0", "3.7.2.0", r"C:\WinP\bd37\budot", "Zero", architecture=32))
147-
write_changelog("3.7.4.0", "3.7.2.0", r"C:\WinP\bd37\budot", "Ps2", architecture=64)
179+
if len(sys.argv) == 3 and all(arg.lower().endswith('.md') for arg in sys.argv[1:]):
180+
# Usage: python diff.py file1.md file2.md
181+
file1, file2 = sys.argv[1], sys.argv[2]
182+
print(compare_two_markdown_files(file1, file2))
183+
elif len(sys.argv) >= 3:
184+
# Original usage (version comparison)
185+
# Example: python diff.py 3.7.4.0 3.7.2.0 "C:\WinP\bd37\budot" "Zero" 32
186+
version2 = sys.argv[1]
187+
version1 = sys.argv[2]
188+
searchdir = Path(sys.argv[3]) if len(sys.argv) > 3 else CHANGELOGS_DIR
189+
flavor = sys.argv[4] if len(sys.argv) > 4 else ""
190+
architecture = int(sys.argv[5]) if len(sys.argv) > 5 else 64
191+
print(compare_package_indexes(version2, version1, searchdir, flavor, architecture=architecture))
192+
else:
193+
print_usage()

0 commit comments

Comments
 (0)