From 491a05b68692f63232a08a1e9995da6b656a46a6 Mon Sep 17 00:00:00 2001 From: Vlad0n20 Date: Tue, 4 Aug 2026 15:39:51 +0200 Subject: [PATCH 1/2] Update current_version_number --- addons/osfstorage/models.py | 3 --- .../0045_alter_fileversion_options.py | 17 +++++++++++++++++ osf/models/files.py | 5 ++++- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 osf/migrations/0045_alter_fileversion_options.py diff --git a/addons/osfstorage/models.py b/addons/osfstorage/models.py index 46da2662d65..0da2e02ac0e 100644 --- a/addons/osfstorage/models.py +++ b/addons/osfstorage/models.py @@ -314,9 +314,6 @@ def serialize(self, include_full=None, version=None): version = self.get_version(version) earliest_version = self.versions.order_by('created').first() ret.update({ - # Must be the resolved version's own identifier, not versions.count() -- after a - # non-latest version is deleted, count() no longer matches any existing identifier, - # which breaks osfstorage_download's file_node.get_version(identifier=..., required=True). 'version': int(version.identifier) if version else 0, 'md5': version.metadata.get('md5') if version else None, 'sha256': version.metadata.get('sha256') if version else None, diff --git a/osf/migrations/0045_alter_fileversion_options.py b/osf/migrations/0045_alter_fileversion_options.py new file mode 100644 index 00000000000..cc774101d73 --- /dev/null +++ b/osf/migrations/0045_alter_fileversion_options.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.26 on 2026-08-04 13:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('osf', '0044_notification_scheduled'), + ] + + operations = [ + migrations.AlterModelOptions( + name='fileversion', + options={'ordering': ('-created', '-id')}, + ), + ] diff --git a/osf/models/files.py b/osf/models/files.py index 0609f801034..4d353f62506 100644 --- a/osf/models/files.py +++ b/osf/models/files.py @@ -883,7 +883,10 @@ def serialize_waterbutler_settings(self, node_id, root_id): }) class Meta: - ordering = ('-created',) + # '-id' is a deterministic tiebreak for versions created within the same instant (e.g. a + # version attached directly via add_version() right after another, in the same test/request) -- + # without it, .first()/.last() on ties is undefined and can flip between identical queries. + ordering = ('-created', '-id') class BaseFileVersionsThrough(models.Model): From a7ccce23065aef0e9f004a2bba7b227d9b04866b Mon Sep 17 00:00:00 2001 From: Vlad0n20 Date: Thu, 13 Aug 2026 16:29:11 +0200 Subject: [PATCH 2/2] Update migration --- ...fileversion_options.py => 0051_alter_fileversion_options.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename osf/migrations/{0045_alter_fileversion_options.py => 0051_alter_fileversion_options.py} (86%) diff --git a/osf/migrations/0045_alter_fileversion_options.py b/osf/migrations/0051_alter_fileversion_options.py similarity index 86% rename from osf/migrations/0045_alter_fileversion_options.py rename to osf/migrations/0051_alter_fileversion_options.py index cc774101d73..1fd084d4e51 100644 --- a/osf/migrations/0045_alter_fileversion_options.py +++ b/osf/migrations/0051_alter_fileversion_options.py @@ -6,7 +6,7 @@ class Migration(migrations.Migration): dependencies = [ - ('osf', '0044_notification_scheduled'), + ('osf', '0050_downloadevent_user_agent'), ] operations = [