Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion bert_e/tests/test_bert_e.py
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,20 @@ def test_branch_cascade_hotfix_and_development_three_digit(self):
fixver = ['4.3.18.1']
self.finalize_cascade(branches, tags, destination, fixver)

def test_branch_cascade_mixed_versions_0(self):
"""Test cascade with mix of 2-digit and 3-digit development branches"""
destination = 'development/5.1'
branches = OrderedDict({
1: {'name': 'development/4.3.17', 'ignore': True},
2: {'name': 'development/4.3', 'ignore': True},
3: {'name': 'development/5.1.0', 'ignore': True},
4: {'name': 'development/5.1', 'ignore': False},
5: {'name': 'development/10', 'ignore': False}
})
tags = ['4.3.16', '4.3.18']
fixver = ['5.1.1', '10.0.0']
self.finalize_cascade(branches, tags, destination, fixver)

def test_branch_cascade_mixed_versions(self):
"""Test cascade with mix of 2-digit and 3-digit development branches"""
destination = 'development/5.1'
Expand All @@ -555,7 +569,7 @@ def test_branch_cascade_mixed_versions(self):
2: {'name': 'development/4.3', 'ignore': True},
3: {'name': 'development/5.1.8', 'ignore': True},
4: {'name': 'development/5.1', 'ignore': False},
5: {'name': 'development/10.0', 'ignore': False}
5: {'name': 'development/10', 'ignore': False}
})
tags = ['4.3.16', '4.3.18', '5.1.3', '5.1.7']
fixver = ['5.1.9', '10.0.0']
Expand Down
53 changes: 35 additions & 18 deletions bert_e/workflow/gitwaterflow/branches.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,6 @@ def build(self, repo):
except errors.UnrecognizedBranchPattern:
continue
self._add_branch(branch)

self.finalize()

@property
Expand Down Expand Up @@ -858,7 +857,6 @@ def build(self, repo, dst_branch=None):
self._cascade = OrderedDict(
sorted(self._cascade.items(), key=cmp_to_key(compare_branches))
)

self._update_major_versions()
if dst_branch:
self.finalize(dst_branch)
Expand Down Expand Up @@ -979,6 +977,7 @@ def update_versions(self, tag):
if dev_branch:
# Only update if tag matches X.Y
# And is not a three-digit dev branch

if dev_branch.major == major and dev_branch.minor == minor:
# Exclude tags whose micro is already
# A three-digit dev branch for this X.Y
Expand All @@ -989,7 +988,6 @@ def update_versions(self, tag):

three_digit_micros = set(k[2] for k in three_digit_keys)
next_micro = micro + 1

while next_micro in three_digit_micros:
next_micro += 1
if (not hasattr(dev_branch, '_next_micro') or
Expand Down Expand Up @@ -1042,21 +1040,37 @@ def _update_major_versions(self):
"""
for version_tuple, branch_set in self._cascade.items():
# Only process major-only branches (tuples where minor is None)
if len(version_tuple) < 2 or version_tuple[1] is not None:
if len(version_tuple) < 2:
continue
major_branch: DevelopmentBranch = branch_set[DevelopmentBranch]
major = version_tuple[0]

# Find all minor versions for this major
minors = [
version_tuple[1] for version_tuple in self._cascade.keys()
if (len(version_tuple) >= 2 and
version_tuple[0] == major and
version_tuple[1] is not None)
]
minors.append(major_branch.latest_minor)

major_branch.latest_minor = max(minors)
if len(version_tuple) == 2 and version_tuple[1] is None:
major_branch: DevelopmentBranch = branch_set[DevelopmentBranch]
major = version_tuple[0]

# Find all minor versions for this major
minors = [
version_tuple[1] for version_tuple in self._cascade.keys()
if (len(version_tuple) >= 2 and
version_tuple[0] == major and
version_tuple[1] is not None)
]
minors.append(major_branch.latest_minor)

major_branch.latest_minor = max(minors)
elif len(version_tuple) == 2 and version_tuple[1] is not None:
minor_branch: DevelopmentBranch = branch_set[DevelopmentBranch]
minor = version_tuple[1]
major = version_tuple[0]

# Find all micros versions for this minor
micros = [
version_tuple[2] for version_tuple in self._cascade.keys()
if (len(version_tuple) >= 3 and
version_tuple[0] == major and
version_tuple[1] == minor and
version_tuple[2] is not None)
]
if micros:
minor_branch.latest_micro = max(micros)

def _set_target_versions(self, dst_branch):
"""Compute list of expected Jira FixVersion/s.
Expand Down Expand Up @@ -1091,7 +1105,10 @@ def _set_target_versions(self, dst_branch):
self.target_versions.append(version_current)
next_micro = dev_branch.micro
else:
next_micro = 0
if hasattr(dev_branch, 'latest_micro'):
next_micro = dev_branch.latest_micro + 1
else:
next_micro = 0
version_str = '%d.%d.%d' % (
dev_branch.major, dev_branch.minor, next_micro
)
Expand Down