MCPcopy Create free account
hub / github.com/apache/solr / VersionWriter

Class VersionWriter

dev-tools/scripts/changes2logchange.py:686–883  ·  view source on GitHub ↗

Handles version enumeration, comparison, and release-date.txt writing.

Source from the content-addressed store, hash-verified

684
685
686class VersionWriter:
687 """Handles version enumeration, comparison, and release-date.txt writing."""
688
689 def __init__(self, changes_file_path: str, changelog_dir: str):
690 self.changes_file_path = changes_file_path
691 self.changelog_dir = Path(changelog_dir)
692 self.parser = ChangesParser(changes_file_path)
693
694 # Fetch release dates from Apache projects JSON
695 version_dates_raw, _ = ReleaseDate.fetch_release_dates_and_latest()
696
697 # Normalize version keys for consistent lookup (e.g., "3.1" -> "3.1.0")
698 self.version_dates = {}
699 for version, date in version_dates_raw.items():
700 normalized = self._normalize_version(version)
701 # Keep the first occurrence (most canonical form)
702 if normalized not in self.version_dates:
703 self.version_dates[normalized] = date
704
705 def run(self):
706 """Execute version comparison and release-date.txt writing."""
707 print("Parsing CHANGES.txt for versions...")
708 self.parser.parse()
709
710 # Extract versions from CHANGES.txt
711 changes_versions = set(vs.version for vs in self.parser.versions)
712 print(f"Found {len(changes_versions)} versions in CHANGES.txt")
713
714 # Get existing version folders
715 existing_folders = self.get_existing_version_folders()
716 print(f"Found {len(existing_folders)} existing version folders in changelog/")
717
718 # Get versions from solr.json (which is what ReleaseDate fetches)
719 solr_json_versions = set(self.version_dates.keys())
720 print(f"Found {len(solr_json_versions)} versions in solr.json\n")
721
722 # Build normalized version mappings for matching (supports semver like 3.1 == 3.1.0)
723 changes_normalized = {self._normalize_version(v): v for v in changes_versions}
724 existing_normalized = {self._normalize_version(v): v for v in existing_folders}
725 solr_normalized = {self._normalize_version(v): v for v in solr_json_versions}
726
727 # Combine all normalized versions
728 all_normalized = sorted(set(changes_normalized.keys()) | set(solr_normalized.keys()) | set(existing_normalized.keys()),
729 key=self._version_sort_key)
730
731 # Print comparison report
732 self._print_comparison_report(all_normalized, changes_normalized, solr_normalized, existing_normalized)
733
734 # Write release-date.txt for existing folders
735 self._write_release_dates(existing_normalized)
736
737 def get_existing_version_folders(self) -> set:
738 """Get all existing vX.Y.Z folders in changelog/."""
739 if not self.changelog_dir.exists():
740 return set()
741
742 folders = set()
743 for item in self.changelog_dir.iterdir():

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…