@@ -233,6 +233,17 @@ def _publish_edited(self):
233233 record = super (CAPDeposit , self )._publish_edited ()
234234 record ._add_deposit_permissions (record , record .id )
235235
236+ with db .session .begin_nested ():
237+ if self .files and record .files .bucket is not None :
238+ # Unlock the record bucket
239+ record .files .bucket .locked = False
240+ # Lock the deposit's files bucket
241+ self .files .bucket .locked = True
242+ # Update the record files with the deposit files
243+ update_record_files (self .files , record .files )
244+ # lock the record bucket after update
245+ record .files .bucket .locked = True
246+
236247 if record ["_experiment" ]:
237248 record ._add_experiment_permissions (record , record .id )
238249
@@ -862,6 +873,23 @@ def check_data(
862873 return data
863874
864875
876+ def update_record_files (deposit_files , record_files ):
877+ for key in deposit_files .keys :
878+ deposit_file = deposit_files .__getitem__ (key )
879+ deposit_version_id = deposit_file .get_version ()
880+
881+ try :
882+ record_file = record_files .__getitem__ (key )
883+ if record_file .get ('version_id' , None ) == deposit_version_id :
884+ continue
885+ except KeyError :
886+ record_file = None
887+
888+ with deposit_file .obj .file .storage ().open () as file_stream :
889+ record_files [key ] = file_stream
890+ record_files .flush ()
891+
892+
865893def has_changed (error , current , new ):
866894 error_path = get_error_path (error )
867895 current_version = get_val_from_path (current , error_path ) or None
0 commit comments