diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index b56d0f517b62..2c8dae330d83 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -6048,7 +6048,9 @@ def __init__( self.library_dataset = library_dataset self.user = user - def to_history_dataset_association(self, target_history, parent_id=None, add_to_history=False, visible=None): + def to_history_dataset_association( + self, target_history, parent_id=None, add_to_history=False, visible=None, commit=True + ): sa_session = object_session(self) hda = HistoryDatasetAssociation( name=self.name, @@ -6072,9 +6074,12 @@ def to_history_dataset_association(self, target_history, parent_id=None, add_to_ sa_session.add(hda) hda.metadata = self.metadata if add_to_history and target_history: - target_history.add_dataset(hda) - with transaction(sa_session): - sa_session.commit() + target_history.stage_addition(hda) + if commit: + target_history.add_pending_items() + if commit: + with transaction(sa_session): + sa_session.commit() return hda def copy(self, parent_id=None, target_folder=None, flush=True): diff --git a/lib/galaxy/webapps/galaxy/services/history_contents.py b/lib/galaxy/webapps/galaxy/services/history_contents.py index 42913b7f2b42..f874b0a71749 100644 --- a/lib/galaxy/webapps/galaxy/services/history_contents.py +++ b/lib/galaxy/webapps/galaxy/services/history_contents.py @@ -1172,22 +1172,28 @@ def traverse(folder): rval.append(ld) return rval - for ld in traverse(folder): - hda = ld.library_dataset_dataset_association.to_history_dataset_association( - history, add_to_history=True + hdas = [ + ld.library_dataset_dataset_association.to_history_dataset_association( + history, add_to_history=True, commit=False ) + for ld in traverse(folder) + ] + history.add_pending_items() + + with transaction(trans.sa_session): + trans.sa_session.commit() + + for hda in hdas: hda_dict = self.hda_serializer.serialize_to_view( hda, user=trans.user, trans=trans, encode_id=False, **serialization_params.model_dump() ) rval.append(hda_dict) + return rval + else: message = f"Invalid 'source' parameter in request: {source}" raise exceptions.RequestParameterInvalidException(message) - with transaction(trans.sa_session): - trans.sa_session.commit() - return rval - def __create_dataset( self, trans,