0012_use_release_instead_of_up_branch.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.db import migrations, models
  4. from django.db.models import Q
  5. def branch_to_release(apps, schema_editor):
  6. Layer_Version = apps.get_model('orm', 'Layer_Version')
  7. Release = apps.get_model('orm', 'Release')
  8. print("Converting all layer version up_branches to releases")
  9. # Find all the layer versions which have an upbranch and convert them to
  10. # the release that they're for.
  11. for layer_version in Layer_Version.objects.filter(
  12. Q(release=None) & ~Q(up_branch=None)):
  13. try:
  14. # HEAD and local are equivalent
  15. if "HEAD" in layer_version.up_branch.name:
  16. release = Release.objects.get(name="local")
  17. layer_version.commit = "HEAD"
  18. layer_version.branch = "HEAD"
  19. else:
  20. release = Release.objects.get(
  21. name=layer_version.up_branch.name)
  22. layer_version.release = release
  23. layer_version.save()
  24. except Exception as e:
  25. print("Couldn't work out an appropriate release for %s "
  26. "the up_branch was %s "
  27. "user the django admin interface to correct it" %
  28. (layer_version.layer.name, layer_version.up_branch.name))
  29. print(e)
  30. continue
  31. class Migration(migrations.Migration):
  32. dependencies = [
  33. ('orm', '0011_delete_layersource'),
  34. ]
  35. operations = [
  36. migrations.AddField(
  37. model_name='layer_version',
  38. name='release',
  39. field=models.ForeignKey(to='orm.Release', default=None, null=True, on_delete=models.CASCADE),
  40. ),
  41. migrations.RunPython(branch_to_release,
  42. reverse_code=migrations.RunPython.noop),
  43. migrations.RemoveField(
  44. model_name='layer_version',
  45. name='up_branch',
  46. ),
  47. migrations.DeleteModel(
  48. name='Branch',
  49. ),
  50. ]