@@ -233,6 +233,17 @@ def _publish_edited(self):
233
233
record = super (CAPDeposit , self )._publish_edited ()
234
234
record ._add_deposit_permissions (record , record .id )
235
235
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
+
236
247
if record ["_experiment" ]:
237
248
record ._add_experiment_permissions (record , record .id )
238
249
@@ -862,6 +873,23 @@ def check_data(
862
873
return data
863
874
864
875
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
+
865
893
def has_changed (error , current , new ):
866
894
error_path = get_error_path (error )
867
895
current_version = get_val_from_path (current , error_path ) or None
0 commit comments