diff --git a/winpython/diff.py b/winpython/diff.py
index a8e52e1d..2b059d9d 100644
--- a/winpython/diff.py
+++ b/winpython/diff.py
@@ -11,10 +11,11 @@
import re
import shutil
from packaging import version
+import sys
+
from . import utils
CHANGELOGS_DIR = Path(__file__).parent.parent / "changelogs"
-assert CHANGELOGS_DIR.is_dir()
class Package:
PATTERNS = [
@@ -48,7 +49,7 @@ class PackageIndex:
def __init__(self, version, searchdir=None, flavor="", architecture=64):
self.version = version
self.flavor = flavor
- self.searchdir = searchdir
+ self.searchdir = Path(searchdir) if searchdir else CHANGELOGS_DIR
self.architecture = architecture
self.packages = {"tools": {}, "python": {}, "wheelhouse": {}}
self._load_index()
@@ -102,6 +103,10 @@ def find_previous_version(target_version, searchdir=None, flavor="", architectur
return max(versions, key=version.parse, default=target_version)
def compare_package_indexes(version2, version1=None, searchdir=None, flavor="", flavor1=None, architecture=64):
+ """Comparison by looking versions in a given Changelog directory"""
+ if not searchdir or (not Path(searchdir).is_dir() and not CHANGELOGS_DIR.is_dir()):
+ print(f"Error: changelogs directory {CHANGELOGS_DIR} does not exist.")
+ sys.exit(1)
version1 = version1 or find_previous_version(version2, searchdir, flavor, architecture)
flavor1 = flavor1 or flavor
@@ -140,8 +145,49 @@ def write_changelog(version2, version1=None, searchdir=None, flavor="", architec
f.write(changelog)
# Copy to winpython/changelogs back to basedir
if basedir:
- shutil.copyfile(output_file, basedir / output_file.name)
+ shutil.copyfile(output_file, Path(basedir) / output_file.name)
+
+def compare_two_markdown_files(file1, file2):
+ """Compare two arbitrary markdown files with WinPython changelog format."""
+ class DummyPackageIndex(PackageIndex):
+ def __init__(self, filename):
+ self.packages = {"tools": {}, "python": {}, "wheelhouse": {}}
+ self._load_index(filename)
+
+ def _load_index(self, filename):
+ with open(filename, "r", encoding=utils.guess_encoding(filename)[0]) as f:
+ self._parse_index(f.read())
+
+ pi1 = DummyPackageIndex(Path(file1))
+ pi2 = DummyPackageIndex(Path(file2))
+
+ text = f"## Differences between {file1} and {file2}\n\n\n\n"
+ for key in PackageIndex.HEADERS:
+ diff = compare_packages(pi1.packages[key], pi2.packages[key])
+ if diff:
+ text += f"\n{PackageIndex.HEADERS[key]}\n\n{diff}"
+ return text + "\n \n\n* * *\n"
+
+def print_usage():
+ print("Usage:")
+ print(" python diff.py file1.md file2.md")
+ print(" - Compare two markdown changelog files directly.")
+ print(" python diff.py [searchdir] [flavor] [architecture]")
+ print(" - Compare WinPython markdown changelogs by version.")
if __name__ == "__main__":
- print(compare_package_indexes("3.7.4.0", "3.7.2.0", r"C:\WinP\bd37\budot", "Zero", architecture=32))
- write_changelog("3.7.4.0", "3.7.2.0", r"C:\WinP\bd37\budot", "Ps2", architecture=64)
+ if len(sys.argv) == 3 and all(arg.lower().endswith('.md') for arg in sys.argv[1:]):
+ # Usage: python diff.py file1.md file2.md
+ file1, file2 = sys.argv[1], sys.argv[2]
+ print(compare_two_markdown_files(file1, file2))
+ elif len(sys.argv) >= 3:
+ # Original usage (version comparison)
+ # Example: python diff.py 3.7.4.0 3.7.2.0 "C:\WinP\bd37\budot" "Zero" 32
+ version2 = sys.argv[1]
+ version1 = sys.argv[2]
+ searchdir = Path(sys.argv[3]) if len(sys.argv) > 3 else CHANGELOGS_DIR
+ flavor = sys.argv[4] if len(sys.argv) > 4 else ""
+ architecture = int(sys.argv[5]) if len(sys.argv) > 5 else 64
+ print(compare_package_indexes(version2, version1, searchdir, flavor, architecture=architecture))
+ else:
+ print_usage()
\ No newline at end of file