void FBuildPatchAppManifest::GetOutdatedFiles(FBuildPatchAppManifestPtr OldManifest, FBuildPatchAppManifestRef NewManifest, const FString& InstallDirectory, TArray< FString >& OutDatedFiles) { if (!OldManifest.IsValid()) { // All files are outdated if no OldManifest NewManifest->FileManifestLookup.GetKeys(OutDatedFiles); } else { // Enumerate files in the NewManifest file list, that do not exist, or have different hashes in the OldManifest // to be files no longer required by the build for (const auto& NewFile : NewManifest->Data->FileManifestList) { const int64 ExistingFileSize = IFileManager::Get().FileSize(*(InstallDirectory / NewFile.Filename)); // Check changed if (IsFileOutdated(OldManifest.ToSharedRef(), NewManifest, NewFile.Filename)) { OutDatedFiles.Add(NewFile.Filename); } // Double check an unchanged file is not missing (size will be -1) or is incorrect size else if (ExistingFileSize != NewFile.GetFileSize()) { OutDatedFiles.Add(NewFile.Filename); } } } }
IBuildInstallerPtr FBuildPatchServicesModule::StartBuildInstallStageOnly(IBuildManifestPtr CurrentManifest, IBuildManifestPtr InstallManifest, const FString& InstallDirectory, FBuildPatchBoolManifestDelegate OnCompleteDelegate) { // Using a local bool for this check will improve the assert message that gets displayed const bool bIsCalledFromMainThread = IsInGameThread(); check( bIsCalledFromMainThread ); // Cast manifest parameters FBuildPatchAppManifestPtr CurrentManifestInternal = StaticCastSharedPtr< FBuildPatchAppManifest >( CurrentManifest ); FBuildPatchAppManifestPtr InstallManifestInternal = StaticCastSharedPtr< FBuildPatchAppManifest >( InstallManifest ); if( !InstallManifestInternal.IsValid() ) { // We must have an install manifest to continue return NULL; } // Make sure the http wrapper is already created FBuildPatchHTTP::Initialize(); // Run the install thread BuildPatchInstallers.Add( MakeShareable( new FBuildPatchInstaller( OnCompleteDelegate, CurrentManifestInternal, InstallManifestInternal.ToSharedRef(), InstallDirectory, GetStagingDirectory(), InstallationInfo, true ) ) ); return BuildPatchInstallers.Top(); }