[FYI] bob.tellez
Original CL Desc
-----------------------------------------------------------------
[Backout] - CL32181613
[FYI] Josh.Adams
Original CL Desc
-----------------------------------------------------------------
- Fixing a bug where two branches for SourceControlSettings (project vs engine-only) would re-use one of the branches, instead of loading it a second time (so FIndBranch() will now check the FIlename if appropriate)
- Added support in FConfigContext for contexts that empty out the PRojectConfigDir to only load Engine ini layers
#rb paul.chipchase
[CL 32254428 by josh adams in ue5-main branch]
[FYI] Josh.Adams
Original CL Desc
-----------------------------------------------------------------
- Fixing a bug where two branches for SourceControlSettings (project vs engine-only) would re-use one of the branches, instead of loading it a second time (so FIndBranch() will now check the FIlename if appropriate)
- Added support in FConfigContext for contexts that empty out the PRojectConfigDir to only load Engine ini layers
#rb paul.chipchase
[CL 32203657 by bob tellez in ue5-main branch]
- Added support in FConfigContext for contexts that empty out the PRojectConfigDir to only load Engine ini layers
#rb paul.chipchase
[CL 32181639 by josh adams in ue5-main branch]
The fix is theorycrafted by reasoning about the code - I was not able to actually reproduce this.
The callstack suggests a nullptr exception, indicating that the Find() in AssetDataCache failed. The AssetDataToFetch container is populated in two places:
- AddAssetInformationEntry()
- OnUpdateHistoryComplete()
The AddAssetInformationEntry() method populates the AssetDataCache and optionally the AssetDataToFetch container.
The OnUpdateHistoryComplete() assumes the entry in AssetDataCache exists and populates the AssetDataToFetch container.
The ClearPendingTasks() removes pending entries from the AssetDataCache container.
However, it doesn't wait for any pending FUpdateStatus task to be finished.
Thus, if the ClearPendingTasks() method is called after GetFileHistory() queues an FUpdateStatus operation but before that operation returns, the OnUpdateHistoryComplete() would queue an entry in AssetDataToFetch while there is no accompanying entry in AssetDataCache. This will result in the crash. The ClearPendingTasks() is called on shutdown, when the source control provider changes or when the source control dialog is shown - the latter being the most likely thing to have happened.
#rb luc.eygasier, manuel.lang
[CL 32014349 by wouter burgers in ue5-main branch]
* Updated dropdown text color for dates
* Added missing icon(s) for project size
* When a Snapshot is expanded, the background color now remains dark
* When two adjacent Snapshots are expanded, there is now a separation between the expanded areas
#rb wouter.burgers
[CL 32007002 by marco anastasi in ue5-main branch]
The SSourceControlControls is currently instantiated in two places in the editor: bottom right and as part of the snapshot history panel. Regardless, we would like the behavior of these buttons to be the same. This was accomplished by providing 'defaults' in SourceControlMenuHelpers and then setting temporary 'overrides' in SnapshotHistoryPanel. This wasn't very pretty and somewhat confusing with SSourceControlControls providing a mix of instance and static interfaces and behaviors. I've refactored this with the idea in mind that these buttons should behave similar, wherever they are placed in the editor and providing static methods to control that behavior. The default behavior is now no-op and SnapshotHistory provides the UEFN/Skein behavior.
This also allowed the 'CanAutoSave' code to live in one location (in the SnapshotHistoryController) instead of being duplicated in two spots. This was also not possible because engine code cannot be accessed from SkeinSourceControlSlate, where the SSourceControlControls was being instantiated, resulting in the behavior as described in the JIRA bug.
#rb manuel.lang, marco.anastasi
[CL 31796796 by wouter burgers in ue5-main branch]
[REVIEW] [at]wouter.burgers, [at]manuel.lang
#rb Manuel.Lang
[FYI] wouter.burgers, manuel.lang
#localization none
#tests ran local build and preflight
#preferred_allowlister alex.kahn
[CL 30600518 by marco anastasi in ue5-main branch]
Created Asset Class 'filter pill' widget
Extended Assets List to display a colour pill representing the asset class
#rb wouter.burgers
[CL 30443162 by marco anastasi in ue5-main branch]
#rb juan.legaz
#jira UE-175581
### Perforce Connection
- FP4ClientUser now takes a FSourceControlResultInfo structure to store the warning/error messages generated during a perforce command, in addition we can now store info messages.
-- In almost all cases the array that was being passed in to store the warning/error messages came from a FSourceControlResultInfo so it doesn't change the overall flow.
- Rather than override ClientUser::OutputInfo to get the info messages we have overridden FP4ClientUser::Message instead as this is the preferred way in the cpp p4 api to capturing messages.
-- One difference between ::Message and the older capturing methods is that the older methods seemed to result in a newline character at the end of the message, which we do not see with the newer capture method. As some of our result parsing code relies on this behavior FP4ClientUser::Message will append this newline character for now until the parsing code can be fixed.
- For now FP4ClientUser still overrides ::OutputInfo, ::OutputError and ::HandleError but only to add a checkNoEntry() to each one. This is so that we can confirm that there are no remaining uses of it before removing it entirely.
- All classes derived from FP4ClientUser have been updated to work with the changes. In some cases this meant changing the override of ClientUser::OutputInfo to ClientUser::Message.
-- With a little bit of work we could probably remove these derived classes now that FP4ClientUser supports capturing the info messages which would help simplify the code base however this should be done in a future work item.
### Misc
- Remove ::FPerforceSourceControlProvider::GetWorkspaceList rather than update it, as it is not used.
- Add FSourceControlResultInfo::HasErrors to check if the struct contains errors or not.
-- Did not replace existing use of FPerforceSourceControlProvider::ErrorMessages.IsEmpty() that should be done as it's own work item.
[CL 30208418 by paul chipchase in ue5-main branch]
Technical:
- Moving an asset to a subfolder and choosing REVERT ALL works! The asset will show up again in Content Browser.
- Moving an asset to a subfolder, moving an actor (which triggers a world reload) and choosing REVERT ALL does NOT work! The asset will not show up again in Content Browser until the project is closed and re-opened. The reason it doesn't show up is because the AssetRegistry still thinks there is a REDIRECTOR asset in that location and the Content Browser doesn't show those by default.
The cause for this is that when the two packages (for example: a redirector material package and a world package) are passed into UPackageTools::ReloadPackages, it will call CreateNewMapForEditing which will cause the redirector material package to go STALE. This is tracked by FScopedTrackFilteredPackages. This results in the redirector material package never actually being reloaded, leaving the AssetRegistry with incorrect data, causing the Content Browser to not show it.
This is fixed by doing the world reload(s) separately.
#rb Manuel.Lang, Marco.Anastasi, Patrick.Enfedaque
#rnx
[CL 29916664 by wouter burgers in ue5-main branch]