Skip to content

Commit 219491d

Browse files
committed
Merge branch 'release/19.26.0'
2 parents 96b96a3 + cefe84c commit 219491d

24 files changed

+450
-53
lines changed

CHANGELOG

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
We follow the CalVer (https://calver.org/) versioning scheme: YY.MINOR.MICRO.
44

5+
19.26.0 (2019-09-11)
6+
===================
7+
- Create a custom through table for linking files and versions
8+
for storing version names. Supports different versions of the same
9+
file having different names.
10+
- Update README for populating institutions.
11+
12+
513
19.25.0 (2019-09-05)
614
===================
715
- Automate account deactivation if users have no content

README-docker-compose.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@
147147
- `docker-compose run --rm web python manage.py migrate`
148148
- Populate institutions:
149149
- After resetting your database or with a new install you will need to populate the table of institutions. **You must have run migrations first.**
150-
- `docker-compose run --rm web python -m scripts.populate_institutions test`
150+
- `docker-compose run --rm web python -m scripts.populate_institutions -e test -a`
151151
- Populate preprint, registration, and collection providers:
152152
- After resetting your database or with a new install, the required providers and subjects will be created automatically **when you run migrations.** To create more:
153153
- `docker-compose run --rm web python manage.py populate_fake_providers`

addons/base/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from addons.base import signals as file_signals
3838
from addons.base.utils import format_last_known_metadata, get_mfr_url
3939
from osf import features
40-
from osf.models import (BaseFileNode, TrashedFileNode,
40+
from osf.models import (BaseFileNode, TrashedFileNode, BaseFileVersionsThrough,
4141
OSFUser, AbstractNode, Preprint,
4242
NodeLog, DraftRegistration, RegistrationSchema,
4343
Guid, FileVersionUserMetadata, FileVersion)
@@ -875,6 +875,10 @@ def addon_view_file(auth, node, file_node, version):
875875
args={'url': download_url.url}
876876
)
877877

878+
version_names = BaseFileVersionsThrough.objects.filter(
879+
basefilenode_id=file_node.id
880+
).order_by('-fileversion_id').values_list('version_name', flat=True)
881+
878882
ret.update({
879883
'urls': {
880884
'render': render_url.url,
@@ -902,6 +906,7 @@ def addon_view_file(auth, node, file_node, version):
902906
'allow_comments': file_node.provider in settings.ADDONS_COMMENTABLE,
903907
'checkout_user': file_node.checkout._id if file_node.checkout else None,
904908
'pre_reg_checkout': is_pre_reg_checkout(node, file_node),
909+
'version_names': list(version_names)
905910
})
906911

907912
ret.update(rubeus.collect_addon_assets(node))

addons/osfstorage/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ def create_version(self, creator, location, metadata=None):
313313
version._find_matching_archive(save=False)
314314

315315
version.save()
316-
self.versions.add(version)
316+
# Adds version to the list of file versions - using custom through table
317+
self.add_version(version)
317318
self.save()
318319

319320
return version

addons/osfstorage/tests/test_models.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,24 @@ def test_materialized_path_nested(self):
299299
def test_copy(self):
300300
to_copy = self.node_settings.get_root().append_file('Carp')
301301
copy_to = self.node_settings.get_root().append_folder('Cloud')
302+
version = to_copy.create_version(
303+
self.user,
304+
{
305+
'service': 'cloud',
306+
settings.WATERBUTLER_RESOURCE: 'osf',
307+
'object': '06d80e',
308+
}, {
309+
'sha256': 'existing',
310+
'vault': 'the cloud',
311+
'archive': 'erchiv'
312+
})
313+
assert_equal(to_copy.versions.first().get_basefilenode_version(to_copy).version_name, 'Carp')
302314

303315
copied = to_copy.copy_under(copy_to)
304316

305317
assert_not_equal(copied, to_copy)
306318
assert_equal(copied.parent, copy_to)
319+
assert_equal(copied.versions.first().get_basefilenode_version(copied).version_name, 'Carp')
307320
assert_equal(to_copy.parent, self.node_settings.get_root())
308321

309322
def test_copy_node_file_to_preprint(self):
@@ -347,7 +360,7 @@ def test_move_nested_between_regions(self):
347360

348361
for _ in range(2):
349362
version = factories.FileVersionFactory(region=self.node_settings.region)
350-
child.versions.add(version)
363+
child.add_version(version)
351364
child.save()
352365

353366
moved = to_move.move_under(move_to)
@@ -361,8 +374,21 @@ def test_move_nested_between_regions(self):
361374
def test_copy_rename(self):
362375
to_copy = self.node_settings.get_root().append_file('Carp')
363376
copy_to = self.node_settings.get_root().append_folder('Cloud')
377+
version = to_copy.create_version(
378+
self.user,
379+
{
380+
'service': 'cloud',
381+
settings.WATERBUTLER_RESOURCE: 'osf',
382+
'object': '06d80e',
383+
}, {
384+
'sha256': 'existing',
385+
'vault': 'the cloud',
386+
'archive': 'erchiv'
387+
})
388+
assert_equal(to_copy.versions.first().get_basefilenode_version(to_copy).version_name, 'Carp')
364389

365390
copied = to_copy.copy_under(copy_to, name='But')
391+
assert_equal(copied.versions.first().get_basefilenode_version(copied).version_name, 'But')
366392

367393
assert_equal(copied.name, 'But')
368394
assert_not_equal(copied, to_copy)
@@ -381,12 +407,25 @@ def test_move(self):
381407

382408
def test_move_and_rename(self):
383409
to_move = self.node_settings.get_root().append_file('Carp')
410+
version = to_move.create_version(
411+
self.user,
412+
{
413+
'service': 'cloud',
414+
settings.WATERBUTLER_RESOURCE: 'osf',
415+
'object': '06d80e',
416+
}, {
417+
'sha256': 'existing',
418+
'vault': 'the cloud',
419+
'archive': 'erchiv'
420+
})
384421
move_to = self.node_settings.get_root().append_folder('Cloud')
422+
assert_equal(to_move.versions.first().get_basefilenode_version(to_move).version_name, 'Carp')
385423

386424
moved = to_move.move_under(move_to, name='Tuna')
387425

388426
assert_equal(to_move, moved)
389427
assert_equal(to_move.name, 'Tuna')
428+
assert_equal(moved.versions.first().get_basefilenode_version(moved).version_name, 'Tuna')
390429
assert_equal(moved.parent, move_to)
391430

392431
def test_move_preprint_primary_file_to_node(self):
@@ -649,7 +688,7 @@ def test_after_fork_copies_versions(self):
649688

650689
for _ in range(num_versions):
651690
version = factories.FileVersionFactory()
652-
record.versions.add(version)
691+
record.add_version(version)
653692

654693
fork = self.project.fork_node(self.auth_obj)
655694
fork_node_settings = fork.get_addon('osfstorage')

addons/osfstorage/tests/test_utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from addons.osfstorage import utils
1313

1414
from addons.osfstorage.tests.utils import StorageTestCase
15+
from website.files.utils import attach_versions
1516

1617

1718
@pytest.mark.django_db
@@ -25,7 +26,7 @@ def setUp(self):
2526
factories.FileVersionFactory(creator=self.user)
2627
for __ in range(3)
2728
]
28-
self.record.versions = self.versions
29+
attach_versions(self.record, self.versions)
2930
self.record.save()
3031

3132
def test_serialize_revision(self):

0 commit comments

Comments
 (0)