Skip to content

Commit 283b7c0

Browse files
sarahboycebmispelon
authored andcommitted
Handled pre-releases when setting previous release as end of life.
1 parent f31081e commit 283b7c0

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

releases/models.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,8 @@ def save(self, *args, **kwargs):
242242
self.status = self.STATUS_REVERSE[status]
243243
cache.delete(self.DEFAULT_CACHE_KEY)
244244
super().save(*args, **kwargs)
245-
# Each micro release EOLs the previous one in the same series.
246-
if self.status == "f" and self.micro > 0 and self.is_active:
247-
(
248-
type(self)
249-
.objects.filter(
250-
major=self.major, minor=self.minor, micro=self.micro - 1, status="f"
251-
)
252-
.update(eol_date=self.date)
253-
)
245+
if self.is_active:
246+
self.set_previous_release_as_eol()
254247

255248
def __str__(self):
256249
return self.version
@@ -313,3 +306,27 @@ def validate_artifact_name(self, name, suffix):
313306
regex = f"^[Dd]jango-{re.escape(version)}{re.escape(suffix)}$"
314307
message = f"Filename {name} does not match pattern {regex}."
315308
return RegexValidator(regex, message=message, code="invalid_name")(name)
309+
310+
def set_previous_release_as_eol(self):
311+
"""Handles setting EOL date for the previous release in the series."""
312+
previous_release_kwargs = {
313+
"major": self.major,
314+
"minor": self.minor,
315+
"micro": self.micro,
316+
"status": self.status,
317+
"eol_date__isnull": True,
318+
}
319+
if self.iteration > 1:
320+
previous_release_kwargs["iteration"] = self.iteration - 1
321+
elif self.status == "b":
322+
previous_release_kwargs["status"] = "a"
323+
elif self.status == "c":
324+
previous_release_kwargs["status"] = "b"
325+
elif self.status == "f" and self.micro == 0:
326+
previous_release_kwargs["status"] = "c"
327+
elif self.status == "f" and self.micro > 0:
328+
previous_release_kwargs["micro"] = self.micro - 1
329+
330+
self.__class__.objects.filter(**previous_release_kwargs).update(
331+
eol_date=self.date
332+
)

releases/tests.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,29 @@ def test_save_sets_eol_date(self):
212212
with self.subTest(**params):
213213
self.assertEqual(previous.eol_date, expected_eol_date)
214214

215+
def test_save_eol_date_pre_releases(self):
216+
other_release = Release.objects.create(version="5.1.7", is_active=True)
217+
today = datetime.date.today()
218+
cases = [
219+
("5.2a1", "5.2a2"),
220+
("5.2a2", "5.2b1"),
221+
("5.2b1", "5.2rc1"),
222+
("5.2rc1", "5.2"),
223+
("5.2", "5.2.1"),
224+
]
225+
for previous_version, next_version in cases:
226+
with self.subTest(msg=f"{previous_version} -> {next_version}"):
227+
previous_release, _ = Release.objects.get_or_create(
228+
version=previous_version,
229+
is_active=True,
230+
)
231+
self.assertIsNone(previous_release.eol_date)
232+
Release.objects.create(version=next_version, is_active=True)
233+
previous_release.refresh_from_db()
234+
other_release.refresh_from_db()
235+
self.assertEqual(previous_release.eol_date, today)
236+
self.assertIsNone(other_release.eol_date)
237+
215238

216239
class ReleaseUploadToTestCase(SimpleTestCase):
217240
def test_upload_to_artifact(self):

0 commit comments

Comments
 (0)