// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. #pragma once #include "ISourceControlRevision.h" class ISourceControlProvider; class ISourceControlState; /** * Delegate used for performing operation on files that may need a checkout, but before they are added to source control * @param InDestFile The filename that was potentially checked out * @param InFileDescription Description of the file to display to the user, e.g. "Text" or "Image" * @param OutFailReason Text describing why the operation failed * @return true if the operation was successful */ DECLARE_DELEGATE_RetVal_ThreeParams(bool, FOnPostCheckOut, const FString& /*InDestFile*/, const FText& /*InFileDescription*/, FText& /*OutFailReason*/); namespace SourceControlHelpers { /** * Helper function to get the ini filename for storing source control settings * @return the filename */ SOURCECONTROL_API extern const FString& GetSettingsIni(); /** * Helper function to get the ini filename for storing global source control settings * @return the filename */ SOURCECONTROL_API extern const FString& GetGlobalSettingsIni(); /** * Helper function to get a filename for a package name. * @param InPackageName The package name to get the filename for * @return the filename */ SOURCECONTROL_API extern FString PackageFilename( const FString& InPackageName ); /** * Helper function to get a filename for a package. * @param InPackage The package to get the filename for * @return the filename */ SOURCECONTROL_API extern FString PackageFilename( const UPackage* InPackage ); /** * Helper function to convert package array into filename array. * @param InPackages The package array * @return an array of filenames */ SOURCECONTROL_API extern TArray PackageFilenames( const TArray& InPackages ); /** * Helper function to convert package name array into a filename array. * @param InPackageNames The package name array * @return an array of filenames */ SOURCECONTROL_API extern TArray PackageFilenames( const TArray& InPackageNames ); /** * Helper function to convert a filename array to absolute paths. * @param InFileNames The filename array * @return an array of filenames, transformed into absolute paths */ SOURCECONTROL_API extern TArray AbsoluteFilenames( const TArray& InFileNames ); /** * Helper function to get a list of files that are unchanged & revert them. This runs synchronous commands. * @param InProvider The provider to use * @param InFiles The files to operate on */ SOURCECONTROL_API extern void RevertUnchangedFiles( ISourceControlProvider& InProvider, const TArray& InFiles ); /** * Helper function to annotate a file * @param InProvider The provider to use * @param InLabel The label to use to retrieve the file * @param InFile The file to annotate * @param OutLines Output array of annotated lines * @returns true if successful */ SOURCECONTROL_API extern bool AnnotateFile( ISourceControlProvider& InProvider, const FString& InLabel, const FString& InFile, TArray& OutLines ); /** * Helper function to check out a file * @param InFile The file path to check in * @return Success or failure of the checkout operation */ SOURCECONTROL_API extern bool CheckOutFile( const FString& InFile ); /** * Helper function perform an operation on files in our 'source controlled' directories, handling checkout/add etc. * @param InDestFile The path to the destination file * @param InFileDescription Description of the file to display to the user, e.g. "Text" or "Image" * @param OnPostCheckOut Delegate used for performing operation on files that may need a checkout, but before they are added to source control * @param OutFailReason Text describing why the operation failed * @return Success or failure of the operation */ SOURCECONTROL_API extern bool CheckoutOrMarkForAdd( const FString& InDestFile, const FText& InFileDescription, const FOnPostCheckOut& OnPostCheckOut, FText& OutFailReason ); /** * Helper function to copy a file into our 'source controlled' directories, handling checkout/add etc. * @param InDestFile The path to the destination file * @param InSourceFile The path to the source file * @param InFileDescription Description of the file to display to the user, e.g. "Text" or "Image" * @param OutFailReason Text describing why the operation failed * @return Success or failure of the operation */ SOURCECONTROL_API extern bool CopyFileUnderSourceControl( const FString& InDestFile, const FString& InSourceFile, const FText& InFileDescription, FText& OutFailReason ); /** * Helper function to branch/integrate packages from one location to another * @param DestPackage The destination package * @param SourcePackage The source package * @return true if the file packages were successfully branched. */ SOURCECONTROL_API extern bool BranchPackage( UPackage* DestPackage, UPackage* SourcePackage ); } /** * Helper class that ensures FSourceControl is properly initialized and shutdown by calling Init/Close in * its constructor/destructor respectively. */ class SOURCECONTROL_API FScopedSourceControl { public: /** Constructor; Initializes Source Control Provider */ FScopedSourceControl(); /** Destructor; Closes Source Control Provider */ ~FScopedSourceControl(); /** Get the provider we are using */ ISourceControlProvider& GetProvider(); };