29
29
LOG = logging .getLogger (__name__ )
30
30
31
31
32
+ def _compare_version_component (version1 , version2 , component_index ):
33
+ """
34
+ Helper method to compare version components at a specific level.
35
+
36
+ Args:
37
+ version1, version2: Version tuples to compare
38
+ component_index: Index of the component to compare
39
+ (0 for major, 1 for minor, 2 for micro)
40
+
41
+ Returns:
42
+ int: -1 if version1 < version2, 1 if version1 > version2,
43
+ 0 if equal or both missing
44
+ None: if comparison should continue to next level
45
+ """
46
+ len1 = len (version1 )
47
+ len2 = len (version2 )
48
+
49
+ # Both have the component - compare them
50
+ if len1 > component_index and len2 > component_index :
51
+ comp1 = version1 [component_index ]
52
+ comp2 = version2 [component_index ]
53
+ if comp1 != comp2 :
54
+ return comp1 - comp2
55
+ return None # Equal, continue to next level
56
+
57
+ # Only one has the component
58
+ elif len1 > component_index and len2 <= component_index :
59
+ # version1 has component, version2 doesn't
60
+ # -> version1 comes first in the cascade
61
+ return - 1
62
+ elif len1 <= component_index and len2 > component_index :
63
+ # version2 has component, version1 doesn't
64
+ # -> version2 comes first in the cascade
65
+ return 1
66
+
67
+ # Neither has the component at this level
68
+ return None
69
+
70
+
32
71
def compare_branches (branch1 , branch2 ):
33
72
"""
34
73
Compare GitWaterflow branches for sorting.
@@ -39,13 +78,11 @@ def compare_branches(branch1, branch2):
39
78
# Safely extract version components
40
79
version1 = branch1 [0 ]
41
80
version2 = branch2 [0 ]
42
- # Extract major versions (always present)
43
- major1 = version1 [0 ] if len (version1 ) > 0 else 0
44
- major2 = version2 [0 ] if len (version2 ) > 0 else 0
45
81
46
- # Compare major versions first
47
- if major1 != major2 :
48
- return major1 - major2
82
+ # Compare major versions first using helper
83
+ major_result = _compare_version_component (version1 , version2 , 0 )
84
+ if major_result is not None :
85
+ return major_result
49
86
50
87
# Same major version - check if one is major-only vs major.minor
51
88
# Major-only branches have None as minor version, e.g., (4, None)
@@ -62,25 +99,13 @@ def compare_branches(branch1, branch2):
62
99
# major.minor comes before
63
100
return - 1
64
101
65
- # Both are major.minor or longer - compare normally
66
- minor1 = version1 [1 ] if len (version1 ) > 1 else 999
67
- minor2 = version2 [1 ] if len (version2 ) > 1 else 999
68
-
69
- # Compare minor versions
70
- if minor1 != minor2 :
71
- return minor1 - minor2
72
-
73
- # Same major.minor - extract micro versions
74
- # Default to 0 if no micro
75
- micro1 = version1 [2 ] if len (version1 ) > 2 else 999
76
- # Default to 0 if no micro
77
- micro2 = version2 [2 ] if len (version2 ) > 2 else 999
78
-
79
- # Compare micro versions
80
- if micro1 != micro2 :
81
- return micro1 - micro2
82
- else :
83
- return 0
102
+ # Compare remaining version components (minor, micro) using helper
103
+ for level in range (1 , 3 ): # 1=minor, 2=micro
104
+ result = _compare_version_component (version1 , version2 , level )
105
+ if result is not None :
106
+ return result
107
+
108
+ return 0
84
109
85
110
86
111
def compare_queues (version1 , version2 ):
0 commit comments