fix: implement semantic version sorting
- Add sort_versions_semantically function using packaging library - Fix issue where pre-release versions appeared before stable (5.2rc1 vs 5.2.5) - Handle edge cases: dev, post, invalid versions with graceful fallback - Add comprehensive test suite covering all scenarios - Maintain backward compatibility with existing functionality
This commit is contained in:
parent
146952f404
commit
251ceb4c2d
8 changed files with 885 additions and 3 deletions
60
test_specific_case.py
Normal file
60
test_specific_case.py
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Test the specific case mentioned in the task: 5.2rc1 vs 5.2.5"""
|
||||
|
||||
from pypi_query_mcp.core.version_utils import sort_versions_semantically
|
||||
|
||||
def test_specific_case():
|
||||
"""Test the exact case mentioned in the task requirements."""
|
||||
print("=" * 60)
|
||||
print("Testing Specific Task Requirement")
|
||||
print("=" * 60)
|
||||
|
||||
# The exact problem mentioned in the task
|
||||
versions = ["5.2rc1", "5.2.5"]
|
||||
|
||||
# Old way (string sorting)
|
||||
old_sorted = sorted(versions, reverse=True)
|
||||
|
||||
# New way (semantic sorting)
|
||||
new_sorted = sort_versions_semantically(versions, reverse=True)
|
||||
|
||||
print(f"Original versions: {versions}")
|
||||
print(f"Old string sorting: {old_sorted}")
|
||||
print(f"New semantic sorting: {new_sorted}")
|
||||
print()
|
||||
|
||||
print("Analysis:")
|
||||
print(f" Problem: '5.2rc1' was appearing before '5.2.5' in string sorting")
|
||||
print(f" String sorting result: {old_sorted[0]} comes first")
|
||||
print(f" Semantic sorting result: {new_sorted[0]} comes first")
|
||||
print()
|
||||
|
||||
if new_sorted == ["5.2.5", "5.2rc1"]:
|
||||
print(" ✅ SUCCESS: Semantic sorting correctly places 5.2.5 before 5.2rc1")
|
||||
print(" ✅ This fixes the issue described in the task!")
|
||||
else:
|
||||
print(" ❌ FAILED: The issue is not resolved")
|
||||
|
||||
print()
|
||||
|
||||
# Test a more comprehensive example
|
||||
comprehensive_test = [
|
||||
"5.2.5", "5.2rc1", "5.2.0", "5.2a1", "5.2b1",
|
||||
"5.1.0", "5.3.0", "5.2.1"
|
||||
]
|
||||
|
||||
old_comprehensive = sorted(comprehensive_test, reverse=True)
|
||||
new_comprehensive = sort_versions_semantically(comprehensive_test, reverse=True)
|
||||
|
||||
print("Comprehensive version sorting test:")
|
||||
print(f" Input: {comprehensive_test}")
|
||||
print(f" String sorted: {old_comprehensive}")
|
||||
print(f" Semantic sorted: {new_comprehensive}")
|
||||
print()
|
||||
|
||||
print("Expected semantic order (newest to oldest):")
|
||||
print(" 5.3.0 > 5.2.5 > 5.2.1 > 5.2.0 > 5.2rc1 > 5.2b1 > 5.2a1 > 5.1.0")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_specific_case()
|
||||
Loading…
Add table
Add a link
Reference in a new issue