Commit Graph

139 Commits

Author SHA1 Message Date
Per Larsson
2366c567d6 PAK - flush pending file writers before exiting UnrealPak
#jira UE-179925
#rb CarlMagnus.Nordin
#preflight 642bbaf8da7f95837033d7c6

[CL 24907513 by Per Larsson in ue5-main branch]
2023-04-04 04:15:55 -04:00
justin marcus
29f370f3b8 Check for IO errors when signing paks.
Fix pak files not being signed.


[REVIEW] [at]Graeme.Thornton [at]Bart.Hawthorne

[CL 24906547 by justin marcus in ue5-main branch]
2023-04-03 23:31:44 -04:00
Andriy Tylychko
321c94194f removed core delegates deprecated in 5.2. while it's a bit too early for a normal deprecation removal, these delegates are known race conditions so it's rather an urgency
#preflight 641ddae9973e609670e2f347
#rb francis.hurteau

[CL 24805272 by Andriy Tylychko in ue5-main branch]
2023-03-27 13:25:52 -04:00
pj kack
eb2c730a89 UnrealPak: Add -csv parameter to create pak and create ucas commands to list all the chunks.
Output is the same as when executing the -list command separately.
Running with -csv=<dir> will create one <pakchunkfilename>.pak.csv file per generated pak and one <pakchunkfilename>.utoc.csv file per generated container.
Running with -csv=<file> will create one single <file>.pak.csv for all paks and one <file>.utoc.csv for all containers.

Details:
The container output (the big set of data) is generated based on in-memory writer TOC data once the IoStoreWriters have been finalized.
The pak output (smaller set of data) is generated using the existing list command and loads the newly generated files from disk.
Cleanup the remains of three obsolete csv output features for containers (-csvoutput, -writefinalorder and OUTPUT_CHUNKID_DIRECTORY).
Optimize container output generation by extending FIoStoreTocChunkInfo with OffsetOnDisk and NumCompressedBlocks filled directly by EnumerateChunks.
Add a ChunkIdToFileNameMap to FCookedPackageStore.
Use the FCookedPackageStore to output the actual package ids and package names (this is currently broken when running -list as a separate command).

#rb carlmagnus.nordin
#rnx
#preflight 63e5eacb98775169f8dea431

[CL 24118941 by pj kack in ue5-main branch]
2023-02-10 10:13:22 -05:00
dan thompson
fbd5b69cbc Tidy up pak log spam a bit when making 1000s of pak files.
#preflight 63e2c7a8c11233cdcaaa8e4a
#rb pj.kack

[CL 24066993 by dan thompson in ue5-main branch]
2023-02-08 00:25:30 -05:00
pj kack
5450132470 UnrealPak: Improve diffutils
Add support for diffing pak directories for pak diff.
Add support for different cryptokeys for pak diff and legacy iostore diff.

#jira UE-175144
#rb carlmagnus.nordin
#rnx
#preflight 63d9259e7a39a18021d4f997

[CL 23945218 by pj kack in ue5-main branch]
2023-02-01 03:39:07 -05:00
Francis Hurteau
9dfe27ab41 Truncation warning fixes for multiple core modules:
CookOnTheFly, CookOnTheFlyNetServer, PakFileUtilities, PakFile

#jira UE-166274
#rb PJ.Kack
#preflight 63c041f01a06fc61057115b7

[CL 23666183 by Francis Hurteau in ue5-main branch]
2023-01-12 13:17:30 -05:00
carlmagnus nordin
434141b1f8 UnrealPak: Fix check triggering for modifying compression tasks array while iterating over it
#jira UE-172561
#preflight 6398867d2960b73220f611d5
#rb paul.chipchase

[CL 23514303 by carlmagnus nordin in ue5-main branch]
2022-12-14 13:19:01 -05:00
pj kack
8c69b411f5 UnrealPak: Fix unavoidable crash when using -repack (fallout from cl 18836432).
Let CollectFilesToAdd fallback to the old logic of using the source file name when the FPakInputPair.Dest specifies a directory, i.e. is ending with a "/".
Let ExtractFilesFromPak start using destination file names just as ProcessCommandLine reading from response files is doing so that -Extract with -responsefile will generate the same format as UAT with file names.
Remove dead code in ProcessPakFileSpecificCommandLine.

#jira UE-171678
#rb carlmagnus.nordin
#lockdown mark.lintott
#preflight 6390679d1776b8c21cf42bac

[CL 23427029 by pj kack in ue5-main branch]
2022-12-07 07:17:57 -05:00
graeme thornton
f8f4e8769d PakFile: Add functionality to sign a pak as a separate step
[FYI] carlmagnus.nordin

[CL 23312474 by graeme thornton in ue5-main branch]
2022-11-29 12:35:16 -05:00
paul chipchase
2c1e11b225 UnrealPak now supports rehydrating virtualized files as they are placed into pak files
#rb CarlMagnus.Nordin, Per.Larsson
#rnx
#preflight 63496fcf1f6054a99fe8bd0c

- When parsing the paklist, any file with a -rehydrate flag will be considered for rehydration

- Add the virtualization module to the PakFileUtilities module
- Add the source control module to UnrealPak (the virtualization module should be taking care of this)
- While parsing the files to be included in the pak file, we will record if any of the files require rehydration, if so this will be noted in FPakCommandLineParameters::bRequiresRehydration and used to initialize the virtualization system.
-- We only need to initialize the system once, even if we detect that multiple pak files have files that need rehydration.
-- If no pak file needs rehydration we do not initialize the system and the virtualization module is never loaded.
- FOutputPakFileEntry::CompressedFileBuffer was made private with accessors to make the refactor easier.
- Now when we start to compress a file, we always load it entirely into memory (along with any potential padding needed), if we then detect that the file doesn't require padding then we just use the in memory buffer as the output and if we do need compression we compress the buffer.
-- This means that there is only one place we load the file from disk, meaing only one place we need to insert the rehydration code to. This load is where the rehydration occurs.
-- In the previous code we would load the file into memory and then retain this copy during the compression pass, so no additional memory should be used.
- At the moment when we get the buffer back fromt he rehydration pass it will be in the form of a FSharedBuffer and so for now we need to memcpy to FCompressedFileBuffer::UncompressedBuffer, which is a waste of cpu cycles.
-- In a future change we should change UncompressedBuffer from TArray to FSharedBuffer to avoid this.

[CL 22595708 by paul chipchase in ue5-main branch]
2022-10-18 05:23:58 -04:00
paul chipchase
45c1322f06 Fix a bug where UnrealPak would produce inconsistent binary output due to occasionally skipping compression on files that should've been compressed.
#rb CarlMagnus.Nordin
#rnx
#preflight 6346ab768a0a7b2adc72cce4

### Problem
- The bug was originally introduced in CL 21791765
- Each file to be compressed calls FPakWriterContext::BeginCompress which will create a FMemoryCompressor and assign it to the files FOutputPakFileEntry. The problem is that the work done by the FMemoryCompressor can potentially complete and signal EndCompressionBarrier before the FMemoryCompresseor has been assigned. This can be due to the work itself being very small, or that closing a file handle when FCompressedFileBuffer::BeginCompressFileToWorkingBuffer returns (which creates the FMemoryCompressor) stalls against system resources. This potentially allows FPakWriterContext::EndCompres to execute concurrently and incorrectly believe that the file is not being compressed as FOutputPakFileEntry::MemoryCompressor is still nullptr.
- Not only does this mean that some files end up being paked uncompressed when they should be compressed, the results are not deterministic which means we can end up with different binary output when paking the exact same data with the exact same settings.

### Solution
- The constructor of FMemoryCompressor no longer adds its work to the task graph system. Instead the tasks are only added after the compressor has been assigned to FOutputPakFileEntry.
- Replaced auto in ranged for loops with the type, as per recent coding standards discussions.

[CL 22505090 by paul chipchase in ue5-main branch]
2022-10-13 11:12:42 -04:00
carlmagnus nordin
ce567d1e8e UnrealPak: Fixed issue with files larger than 2GB
#rb none
#preflight 6346695a8d665d55d024fdbc

[CL 22497602 by carlmagnus nordin in ue5-main branch]
2022-10-13 02:48:05 -04:00
Andriy Tylychko
4a6985cfbe Deprecated all global vars of thread-safe delegates from FCoreDelegates and replaced them by functions returning local static singleton.
thread-safe delegates are not zero-initializable and so can't be used as global vars because they are vulnerable to static initialization order fiasco.

#jira UE-163668
#rb steve.robb
#preflight 632462db3752284a3179ec02

[CL 22094531 by Andriy Tylychko in ue5-main branch]
2022-09-20 11:45:56 -04:00
jason walter
26117b5d31 Rename IniKeyBlacklist to IniKeyDenylist and IniSectionBlacklist to IniSectionDenyList
#jira UE-131078
#rb josh.adams
#preflight 6320c90f47741a7dbd237e5f

[CL 21997756 by jason walter in ue5-main branch]
2022-09-13 21:47:24 -04:00
josh adams
882d771a9c Unshelved from pending changelist '21985878':
- Fixed an assert with -makebinaryconfig
#jira UE-161112
#rb trivial
#preflight skip

[CL 21990880 by josh adams in ue5-main branch]
2022-09-13 15:56:41 -04:00
carlmagnus nordin
efeccfe4c7 UnrealPak: Refactor compression code to avoid busy waiting from within a task
#rb per.larsson
#preflight 6315e359da63cdf170d7b13d

[CL 21794638 by carlmagnus nordin in ue5-main branch]
2022-09-05 10:53:47 -04:00
zack neyland
d043077847 UnrealPak: Resolves an extremely rare race condition that happens when Flush() reaches the CompressionThread.Wait() before the CompressionThread has an opportunity to run and check for the flush condition.
#jira UE-162050
#preflight 630be41ce352708d44d1cd54
#rb carlmagnus.nordin

[CL 21701333 by zack neyland in ue5-main branch]
2022-08-30 11:08:24 -04:00
mark lintott
3d47f895e5 Fixed unacceptable words in PakFileUtilities
#jira UE-158611
#rb pj.kack
#preflight 62f383dbbc175ec68c338e38

[CL 21316108 by mark lintott in ue5-main branch]
2022-08-10 06:24:40 -04:00
henrik karlsson
68b551b1d7 [UnrealPak]
* Added -cryptofile documentation line when starting unrealpak without parameters

#rb Erik.Knapik
#preflight skip

#ROBOMERGE-AUTHOR: henrik.karlsson
#ROBOMERGE-SOURCE: CL 21183712 via CL 21195199 via CL 21195379 via CL 21195491
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)

[CL 21196924 by henrik karlsson in ue5-main branch]
2022-07-20 21:51:41 -04:00
marc audy
cd4b7d3c78 Game user settings fix and rollback of 20905839, which was itself a rollback of 20029182
#rb [at]Josh.Adams
#preflight

#ROBOMERGE-OWNER: marc.audy
#ROBOMERGE-AUTHOR: mic.rooney
#ROBOMERGE-SOURCE: CL 20973575 via CL 20978259
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v972-20964824)
#ROBOMERGE-CONFLICT from-shelf

[CL 20980862 by marc audy in ue5-main branch]
2022-07-07 01:55:35 -04:00
mic rooney
f5a58f4e71 Temp backout while Josh is out so that we don't break workflows and he can re-backout/unrevert this when he's back in.
* Contains some selected back outs from other cls that included config context dependent changes, though it's limited to only backing out broken parts as much as possible to minimize surface area.

[Backout] - CL20029182
[FYI] josh.adams
Original CL Desc
-----------------------------------------------------------------
- Adding FConfigContext which is used to repalce LoadExternalIniFile, LoadLocalIniFile, etc, as well as have localized data for all configs read on a thread (like the other platform configs loaded in the editor)
- The Load*IniFile functions will create a Context, but eventually those APIs will go away and the Context will be the only way to load ini files
- Simplified some of the ini loading code, like removing the HierarchyCache (it wasn't helping editor load times, and added much complexity, and was not thread-safe, and it shouldn't actually be helpful because all the calls to Load*IniFile should eventually be replaced with either GConfig or FCOnfigCacheIni::ForPlatform(), which won't need to re-read in files
- Ini reading time actually went down due to the simplification, including Cache removal
- Left in old code for now behing a #define (USE_CONTEXT) in case something goes wrong
- Added in VERIFY_CONTEXT mode which I used to run original and Context modes and compare (including preflighting builds) (I also added a Compare function that we may want to keep around to use for future debugging)
- Added a separate set of config layers for plugins which speeds up plugin parsing, but also will fix the issue with BaseEngine.ini vs DefaultEngine.ini in Engine vs Project plugins (this shows how Contexts can bring useful information down into the guts - however a later change will enable it)
- Once this is all seen to be working, I will clean up the non-Context functions, and some globals vs static members, etc
#rb paul.chipchase
#preflight 62716c1c5e6ce673f452005a


#ROBOMERGE-AUTHOR: josh.adams
#ROBOMERGE-SOURCE: CL 20029165 via CL 20029180 via CL 20905839 via CL 20905880
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v971-20777995)

[CL 20908094 by mic rooney in ue5-main branch]
2022-06-30 20:54:32 -04:00
CarlMagnus Nordin
54f50ee466 UnrealPak: Add support for creating multiple pak files at once instead of running a separate process for each
#jira FORT-457704
#rb pk.kack
#preflight 62b00c75a4631339e9972976
#robomerge EngineMerge

[CL 20734429 by CarlMagnus Nordin in ue5-main branch]
2022-06-20 04:34:49 -04:00
Devin Doucette
ffb60052c5 Removed runtime dependencies on DerivedDataCache
#preflight 6298f3250f6e137393b9dea7
#rb Zousar.Shaker
#rnx

[CL 20472431 by Devin Doucette in ue5-main branch]
2022-06-02 13:44:07 -04:00
Josh Adams
c2b6817353 - Cleaned up old FConfigCacheIni stuff and new FConfigContext, getting rid of duplicated functions, and moving some stuff into FConfigContext and the new UE::ConfigUtilities namespace
- Deprecated some global functions now in ConfigUtilities
- Deleted a couple of old deprecated stuff from 3.24

#rb chris.waters
#preflight 628415e1ba3597a030b3b900

[CL 20259749 by Josh Adams in ue5-main branch]
2022-05-18 08:59:31 -04:00