If the user diffs two revisions of an ActorComponent blueprint, and then they proceed to add it to an Actor blueprint, then three copies will appear in the search list when browsing for the component to add: one real, and two temporary ones. If a temporary one is selected, and the asset is saved and submitted, then problems can arise with failed builds and broken references.
Reason: When diffing assets in revision control, a copy of each is downloaded to a temporary directory, and they’re not supposed to be used for other purposes. However, these copies are still in memory, and they can be erroneously added to systems that don’t check that these assets are for diffing. When diffing blueprints in revision control whose parent is ActorComponent, the temporary copies are added to the ComponentTypeRegistry.
It appears that the ComponentTypeRegistry queries both the global objects array and the AssetRegistry for component classes, regardless of whatever package flags are present. (See function ForceRefreshComponentList() in ComponentTypeRegistry.cpp.)
One potential solution is to modify ComponentTypeRegistry.cpp to filter out packages with the PKG_ForDiffing flag from its results when it does its global in-memory scan.
[Attachment Removed]