// Copyright Epic Games, Inc. All Rights Reserved. #include "BuildPatchSettings.h" #include "Misc/App.h" #include "HAL/PlatformProcess.h" namespace BuildPatchServices { FBuildPatchServicesInitSettings::FBuildPatchServicesInitSettings() : ApplicationSettingsDir(FPlatformProcess::ApplicationSettingsDir()) , ProjectName(FApp::GetProjectName()) , LocalMachineConfigFileName(TEXT("BuildPatchServicesLocal.ini")) { } enum class EInstallActionIntent : int32 { Install, Update, Repair, Uninstall, Invalid }; BuildPatchServices::FInstallerAction FInstallerAction::MakeInstall(const IBuildManifestRef& Manifest, TSet InstallTags /*= TSet()*/, FString InstallSubdirectory /*= FString()*/, FString CloudSubdirectory /*= FString()*/) { FInstallerAction InstallerAction; InstallerAction.InstallManifest = Manifest; InstallerAction.InstallTags = MoveTemp(InstallTags); InstallerAction.InstallSubdirectory = MoveTemp(InstallSubdirectory); InstallerAction.CloudSubdirectory = MoveTemp(CloudSubdirectory); InstallerAction.ActionIntent = EInstallActionIntent::Install; return InstallerAction; } BuildPatchServices::FInstallerAction FInstallerAction::MakeUpdate(const IBuildManifestRef& CurrentManifest, const IBuildManifestRef& InstallManifest, TSet InstallTags /*= TSet()*/, FString InstallSubdirectory /*= FString()*/, FString CloudSubdirectory /*= FString()*/) { FInstallerAction InstallerAction; InstallerAction.CurrentManifest = CurrentManifest; InstallerAction.InstallManifest = InstallManifest; InstallerAction.InstallTags = MoveTemp(InstallTags); InstallerAction.InstallSubdirectory = MoveTemp(InstallSubdirectory); InstallerAction.CloudSubdirectory = MoveTemp(CloudSubdirectory); InstallerAction.ActionIntent = EInstallActionIntent::Update; return InstallerAction; } BuildPatchServices::FInstallerAction FInstallerAction::MakeRepair(const IBuildManifestRef& Manifest, TSet InstallTags /*= TSet()*/, FString InstallSubdirectory /*= FString()*/, FString CloudSubdirectory /*= FString()*/) { FInstallerAction InstallerAction; InstallerAction.CurrentManifest = Manifest; InstallerAction.InstallManifest = Manifest; InstallerAction.InstallTags = MoveTemp(InstallTags); InstallerAction.InstallSubdirectory = MoveTemp(InstallSubdirectory); InstallerAction.CloudSubdirectory = MoveTemp(CloudSubdirectory); InstallerAction.ActionIntent = EInstallActionIntent::Repair; return InstallerAction; } BuildPatchServices::FInstallerAction FInstallerAction::MakeUninstall(const IBuildManifestRef& Manifest, FString InstallSubdirectory /*= FString()*/, FString CloudSubdirectory /*= FString()*/) { FInstallerAction InstallerAction; InstallerAction.CurrentManifest = Manifest; InstallerAction.InstallSubdirectory = MoveTemp(InstallSubdirectory); InstallerAction.CloudSubdirectory = MoveTemp(CloudSubdirectory); InstallerAction.ActionIntent = EInstallActionIntent::Uninstall; return InstallerAction; } FInstallerAction::FInstallerAction(const FInstallerAction& CopyFrom) : CurrentManifest(CopyFrom.CurrentManifest) , InstallManifest(CopyFrom.InstallManifest) , InstallTags(CopyFrom.InstallTags) , InstallSubdirectory(CopyFrom.InstallSubdirectory) , CloudSubdirectory(CopyFrom.CloudSubdirectory) , ActionIntent(CopyFrom.ActionIntent) { } FInstallerAction::FInstallerAction(FInstallerAction&& MoveFrom) : CurrentManifest(MoveTemp(MoveFrom.CurrentManifest)) , InstallManifest(MoveTemp(MoveFrom.InstallManifest)) , InstallTags(MoveTemp(MoveFrom.InstallTags)) , InstallSubdirectory(MoveTemp(MoveFrom.InstallSubdirectory)) , CloudSubdirectory(MoveTemp(MoveFrom.CloudSubdirectory)) , ActionIntent(MoveFrom.ActionIntent) { } FInstallerAction::FInstallerAction() : ActionIntent(EInstallActionIntent::Invalid) { } bool FInstallerAction::IsInstall() const { return ActionIntent == EInstallActionIntent::Install; } bool FInstallerAction::IsUpdate() const { return ActionIntent == EInstallActionIntent::Update; } bool FInstallerAction::IsRepair() const { return ActionIntent == EInstallActionIntent::Repair; } bool FInstallerAction::IsUninstall() const { return ActionIntent == EInstallActionIntent::Uninstall; } const TSet& FInstallerAction::GetInstallTags() const { return InstallTags; } const FString& FInstallerAction::GetInstallSubdirectory() const { return InstallSubdirectory; } const FString& FInstallerAction::GetCloudSubdirectory() const { return CloudSubdirectory; } IBuildManifestRef FInstallerAction::GetInstallManifest() const { return InstallManifest.ToSharedRef(); } IBuildManifestRef FInstallerAction::GetCurrentManifest() const { return CurrentManifest.ToSharedRef(); } FBuildInstallerConfiguration::FBuildInstallerConfiguration(TArray InInstallerActions) : InstallerActions(MoveTemp(InInstallerActions)) , InstallDirectory() , StagingDirectory() , BackupDirectory() , ChunkDatabaseFiles() , CloudDirectories() , InstallMode(EInstallMode::NonDestructiveInstall) , VerifyMode(EVerifyMode::ShaVerifyAllFiles) , DeltaPolicy(EDeltaPolicy::Skip) , bRunRequiredPrereqs(true) , bAllowConcurrentExecution(false) , bTrackFileOperations(true) { } FChunkBuildConfiguration::FChunkBuildConfiguration() : FeatureLevel(EFeatureLevel::Latest) , AppId(0) , DataAgeThreshold(TNumericLimits::Max()) , bShouldHonorReuseThreshold(false) , OutputChunkWindowSize(1024 * 1024) , bShouldMatchAnyWindowSize(true) , bAllowEmptyBuild(false) { } FChunkDeltaOptimiserConfiguration::FChunkDeltaOptimiserConfiguration() : ScanWindowSize(8191) , OutputChunkSize(1024 * 1024) , DiffAbortThreshold(TNumericLimits::Max()) { } FPatchDataEnumerationConfiguration::FPatchDataEnumerationConfiguration() : bIncludeSizes(false) { } FDiffManifestsConfiguration::FDiffManifestsConfiguration() { } FCompactifyConfiguration::FCompactifyConfiguration() : DataAgeThreshold(7.0f) , bRunPreview(true) { } FPackageChunksConfiguration::FPackageChunksConfiguration() : FeatureLevel(EFeatureLevel::Latest) , MaxOutputFileSize(TNumericLimits::Max()) { } FInstallerConfiguration::FInstallerConfiguration(const IBuildManifestRef& InInstallManifest) : CurrentManifest(nullptr) , InstallManifest(InInstallManifest) , InstallDirectory() , StagingDirectory() , BackupDirectory() , ChunkDatabaseFiles() , CloudDirectories() , InstallTags() , InstallMode(EInstallMode::NonDestructiveInstall) , VerifyMode(EVerifyMode::ShaVerifyAllFiles) , DeltaPolicy(EDeltaPolicy::Skip) , bIsRepair(false) , bRunRequiredPrereqs(true) , bAllowConcurrentExecution(false) { } FInstallerConfiguration::FInstallerConfiguration(FInstallerConfiguration&& MoveFrom) : CurrentManifest(MoveTemp(MoveFrom.CurrentManifest)) , InstallManifest(MoveTemp(MoveFrom.InstallManifest)) , InstallDirectory(MoveTemp(MoveFrom.InstallDirectory)) , StagingDirectory(MoveTemp(MoveFrom.StagingDirectory)) , BackupDirectory(MoveTemp(MoveFrom.BackupDirectory)) , ChunkDatabaseFiles(MoveTemp(MoveFrom.ChunkDatabaseFiles)) , CloudDirectories(MoveTemp(MoveFrom.CloudDirectories)) , InstallTags(MoveTemp(MoveFrom.InstallTags)) , InstallMode(MoveFrom.InstallMode) , VerifyMode(MoveFrom.VerifyMode) , DeltaPolicy(MoveFrom.DeltaPolicy) , bIsRepair(MoveFrom.bIsRepair) , bRunRequiredPrereqs(MoveFrom.bRunRequiredPrereqs) , bAllowConcurrentExecution(MoveFrom.bAllowConcurrentExecution) { } FInstallerConfiguration::FInstallerConfiguration(const FInstallerConfiguration& CopyFrom) : CurrentManifest(CopyFrom.CurrentManifest) , InstallManifest(CopyFrom.InstallManifest) , InstallDirectory(CopyFrom.InstallDirectory) , StagingDirectory(CopyFrom.StagingDirectory) , BackupDirectory(CopyFrom.BackupDirectory) , ChunkDatabaseFiles(CopyFrom.ChunkDatabaseFiles) , CloudDirectories(CopyFrom.CloudDirectories) , InstallTags(CopyFrom.InstallTags) , InstallMode(CopyFrom.InstallMode) , VerifyMode(CopyFrom.VerifyMode) , DeltaPolicy(CopyFrom.DeltaPolicy) , bIsRepair(CopyFrom.bIsRepair) , bRunRequiredPrereqs(CopyFrom.bRunRequiredPrereqs) , bAllowConcurrentExecution(CopyFrom.bAllowConcurrentExecution) { } }