// Copyright Epic Games, Inc. All Rights Reserved. #include "ISourceControlProvider.h" #include "SourceControlHelpers.h" #include "SourceControlOperations.h" #define LOCTEXT_NAMESPACE "ISourceControlProvider" ISourceControlProvider::FInitResult ISourceControlProvider::Init(EInitFlags Flags) { // TODO: This implementation is for compatibility. Once all providers have their own // implementation it should be removed. const bool bForceConnection = EnumHasAnyFlags(Flags, EInitFlags::AttemptConnection); Init(bForceConnection); FInitResult Result; Result.bIsAvailable = IsAvailable(); return Result; } ECommandResult::Type ISourceControlProvider::Login(const FString& InPassword, EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { TSharedRef ConnectOperation = ISourceControlOperation::Create(); ConnectOperation->SetPassword(InPassword); return Execute(ConnectOperation, InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::GetState(const TArray& InPackages, TArray& OutState, EStateCacheUsage::Type InStateCacheUsage) { TArray Files = SourceControlHelpers::PackageFilenames(InPackages); return GetState(Files, OutState, InStateCacheUsage); } FSourceControlStatePtr ISourceControlProvider::GetState(const UPackage* InPackage, EStateCacheUsage::Type InStateCacheUsage) { return GetState(SourceControlHelpers::PackageFilename(InPackage), InStateCacheUsage); } FSourceControlStatePtr ISourceControlProvider::GetState(const FString& InFile, EStateCacheUsage::Type InStateCacheUsage) { TArray< FSourceControlStateRef > States; if (GetState( { InFile }, States, InStateCacheUsage) == ECommandResult::Succeeded) { if (!States.IsEmpty()) { FSourceControlStateRef State = States[0]; return State; } } return nullptr; } FSourceControlChangelistStatePtr ISourceControlProvider::GetState(const FSourceControlChangelistRef& InChangelist, EStateCacheUsage::Type InStateCacheUsage) { TArray< FSourceControlChangelistStateRef > States; if (GetState( { InChangelist }, States, InStateCacheUsage) == ECommandResult::Succeeded) { if (!States.IsEmpty()) { FSourceControlChangelistStatePtr State = States[0]; return State; } } return nullptr; } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, const TArray& InFiles, EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { return Execute(InOperation, nullptr, InFiles, InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, const EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { return Execute(InOperation, nullptr, TArray(), InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, const UPackage* InPackage, const EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { return Execute(InOperation, SourceControlHelpers::PackageFilename(InPackage), InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, const FString& InFile, const EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { TArray FileArray; if (!InFile.IsEmpty()) { FileArray.Add(InFile); } return Execute(InOperation, FileArray, InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, const TArray& InPackages, const EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { TArray FileArray = SourceControlHelpers::PackageFilenames(InPackages); return Execute(InOperation, nullptr, FileArray, InConcurrency, InOperationCompleteDelegate); } ECommandResult::Type ISourceControlProvider::Execute(const FSourceControlOperationRef& InOperation, FSourceControlChangelistPtr InChangelist, const EConcurrency::Type InConcurrency, const FSourceControlOperationComplete& InOperationCompleteDelegate) { return Execute(InOperation, InChangelist, TArray(), InConcurrency, InOperationCompleteDelegate); } TSharedPtr ISourceControlProvider::GetLabel(const FString& InLabelName) const { TArray< TSharedRef > Labels = GetLabels(InLabelName); if (Labels.Num() > 0) { return Labels[0]; } return nullptr; } bool ISourceControlProvider::TryToDownloadFileFromBackgroundThread(const TSharedRef& InOperation, const FString& InFile) { TArray FileArray; FileArray.Add(InFile); return TryToDownloadFileFromBackgroundThread(InOperation, FileArray); } bool ISourceControlProvider::TryToDownloadFileFromBackgroundThread(const TSharedRef& InOperation, const TArray& InFiles) { // TryToDownloadFileFromBackgroundThread is unsupported by this source control provider FFormatNamedArguments Arguments; Arguments.Add(TEXT("ProviderName"), FText::FromName(GetName())); FText Message = FText::Format(LOCTEXT("UnsupportedOperationTryToDownloadFileFromBackgroundThread", "TryToDownloadFileFromBackgroundThread is not supported by revision control provider '{ProviderName}'"), Arguments); InOperation->AddErrorMessge(Message); return false; } ECommandResult::Type ISourceControlProvider::SwitchWorkspace(FStringView NewWorkspaceName, FSourceControlResultInfo& OutResultInfo, FString* OutOldWorkspaceName) { FFormatNamedArguments Arguments; Arguments.Add(TEXT("ProviderName"), FText::FromName(GetName())); FText Message = FText::Format(LOCTEXT("UnsupportedOperationSwitchWorkspace", "SwitchWorkspace is not supported by revision control provider '{ProviderName}'"), Arguments); OutResultInfo.ErrorMessages.Add(Message); return ECommandResult::Failed; } #undef LOCTEXT_NAMESPACE