File indexing completed on 2026-06-26 08:40:25
0001 from django.db import migrations
0002
0003
0004 def _vt(v):
0005 return tuple(int(p) if p.isdigit() else -1 for p in str(v or '').split('.'))
0006
0007
0008 def reclassify_future_releases(apps, schema_editor):
0009 """A past-imported release whose version is newer than the current campaign
0010 is a future release, not past. The importer forced everything to 'past';
0011 move the newer ones to 'future' (catches e.g. RECO/26.06.0 while current is
0012 26.05.0). No-op when there is no current campaign."""
0013 Campaign = apps.get_model('pcs', 'Campaign')
0014 current = Campaign.objects.filter(lifecycle='current').first()
0015 if not current:
0016 return
0017 cur = _vt(current.name)
0018 for c in Campaign.objects.filter(lifecycle='past'):
0019 version = c.name.split('/', 1)[1] if '/' in c.name else c.name
0020 if _vt(version) > cur:
0021 c.lifecycle = 'future'
0022 c.save(update_fields=['lifecycle'])
0023
0024
0025 class Migration(migrations.Migration):
0026
0027 dependencies = [
0028 ('pcs', '0014_complete_physics_schema'),
0029 ]
0030
0031 operations = [
0032 migrations.RunPython(reclassify_future_releases, migrations.RunPython.noop),
0033 ]