Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add operations to delete and rename branches #100

Merged
merged 13 commits into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ void IPlasticSourceControlWorker::RegisterWorkers(FPlasticSourceControlProvider&
PlasticSourceControlProvider.RegisterWorker("GetBranches", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticGetBranchesWorker>));
PlasticSourceControlProvider.RegisterWorker("SwitchToBranch", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticSwitchToBranchWorker>));
PlasticSourceControlProvider.RegisterWorker("CreateBranch", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticCreateBranchWorker>));
PlasticSourceControlProvider.RegisterWorker("RenameBranch", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticRenameBranchWorker>));
PlasticSourceControlProvider.RegisterWorker("DeleteBranches", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticDeleteBranchesWorker>));
PlasticSourceControlProvider.RegisterWorker("MakeWorkspace", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticMakeWorkspaceWorker>));
PlasticSourceControlProvider.RegisterWorker("Sync", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticSyncWorker>));
PlasticSourceControlProvider.RegisterWorker("SyncAll", FGetPlasticSourceControlWorker::CreateStatic(&InstantiateWorker<FPlasticSyncWorker>));
Expand Down Expand Up @@ -170,7 +172,28 @@ FName FPlasticCreateBranch::GetName() const

FText FPlasticCreateBranch::GetInProgressString() const
{
return LOCTEXT("SourceControl_Branch", "Creating new child branch...");
return LOCTEXT("SourceControl_CreateBranch", "Creating new child branch...");
}


FName FPlasticRenameBranch::GetName() const
{
return "RenameBranch";
}

FText FPlasticRenameBranch::GetInProgressString() const
{
return LOCTEXT("SourceControl_RenameBranch", "Renaming a branch...");
}

FName FPlasticDeleteBranches::GetName() const
{
return "DeleteBranches";
}

FText FPlasticDeleteBranches::GetInProgressString() const
{
return LOCTEXT("SourceControl_DeleteBranches", "Deleting branch(es)...");
}


Expand Down Expand Up @@ -1101,6 +1124,48 @@ bool FPlasticCreateBranchWorker::UpdateStates()
}


FName FPlasticRenameBranchWorker::GetName() const
{
return "RenameBranch";
}

bool FPlasticRenameBranchWorker::Execute(FPlasticSourceControlCommand& InCommand)
{
TRACE_CPUPROFILER_EVENT_SCOPE(FPlasticRenameBranchWorker::Execute);

check(InCommand.Operation->GetName() == GetName());
TSharedRef<FPlasticRenameBranch, ESPMode::ThreadSafe> Operation = StaticCastSharedRef<FPlasticRenameBranch>(InCommand.Operation);

return PlasticSourceControlUtils::RunRenameBranch(Operation->OldName, Operation->NewName, InCommand.ErrorMessages);
}

bool FPlasticRenameBranchWorker::UpdateStates()
{
return false;
}


FName FPlasticDeleteBranchesWorker::GetName() const
{
return "DeleteBranches";
}

bool FPlasticDeleteBranchesWorker::Execute(FPlasticSourceControlCommand& InCommand)
{
TRACE_CPUPROFILER_EVENT_SCOPE(FPlasticDeleteBranchesWorker::Execute);

check(InCommand.Operation->GetName() == GetName());
TSharedRef<FPlasticDeleteBranches, ESPMode::ThreadSafe> Operation = StaticCastSharedRef<FPlasticDeleteBranches>(InCommand.Operation);

return PlasticSourceControlUtils::RunDeleteBranches(Operation->BranchNames, InCommand.ErrorMessages);
}

bool FPlasticDeleteBranchesWorker::UpdateStates()
{
return false;
}


FName FPlasticUpdateStatusWorker::GetName() const
{
return "UpdateStatus";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,37 @@ class FPlasticCreateBranch final : public ISourceControlOperation
};


/**
* Internal operation used to rename a branch
*/
class FPlasticRenameBranch final : public ISourceControlOperation
{
public:
// ISourceControlOperation interface
virtual FName GetName() const override;

virtual FText GetInProgressString() const override;

FString OldName;
FString NewName;
};


/**
* Internal operation used to deletes branches
*/
class FPlasticDeleteBranches final : public ISourceControlOperation
{
public:
// ISourceControlOperation interface
virtual FName GetName() const override;

virtual FText GetInProgressString() const override;

TArray<FString> BranchNames;
};


/** Called when first activated on a project, and then at project load time.
* Look for the root directory of the Plastic workspace (where the ".plastic/" subdirectory is located). */
class FPlasticConnectWorker final : public IPlasticSourceControlWorker
Expand Down Expand Up @@ -435,6 +466,34 @@ class FPlasticCreateBranchWorker final : public IPlasticSourceControlWorker
virtual bool UpdateStates() override;
};

/** Rename a branch. */
class FPlasticRenameBranchWorker final : public IPlasticSourceControlWorker
{
public:
explicit FPlasticRenameBranchWorker(FPlasticSourceControlProvider& InSourceControlProvider)
: IPlasticSourceControlWorker(InSourceControlProvider)
{}
virtual ~FPlasticRenameBranchWorker() = default;
// IPlasticSourceControlWorker interface
virtual FName GetName() const override;
virtual bool Execute(class FPlasticSourceControlCommand& InCommand) override;
virtual bool UpdateStates() override;
};

/** Delete branches. */
class FPlasticDeleteBranchesWorker final : public IPlasticSourceControlWorker
{
public:
explicit FPlasticDeleteBranchesWorker(FPlasticSourceControlProvider& InSourceControlProvider)
: IPlasticSourceControlWorker(InSourceControlProvider)
{}
virtual ~FPlasticDeleteBranchesWorker() = default;
// IPlasticSourceControlWorker interface
virtual FName GetName() const override;
virtual bool Execute(class FPlasticSourceControlCommand& InCommand) override;
virtual bool UpdateStates() override;
};

/** Plastic update the workspace to latest changes */
class FPlasticSyncWorker final : public IPlasticSourceControlWorker
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#pragma once

#include "CoreMinimal.h"
#include "ISourceControlProvider.h" // for EConcurrency

namespace PlasticSourceControlShell
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "Framework/Application/SlateApplication.h"
#include "Interfaces/IPluginManager.h"
#include "Slate/SlateGameResources.h"
#include "Styling/SlateStyle.h"
#if ENGINE_MAJOR_VERSION >= 5
#include "Styling/SlateStyleMacros.h"
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
#pragma once

#include "CoreMinimal.h"
#include "Styling/SlateStyle.h"

class FSlateStyleSet;
class ISlateStyle;

class FPlasticSourceControlStyle
{
Expand All @@ -21,7 +23,7 @@ class FPlasticSourceControlStyle
static FName GetStyleSetName();

private:
static TSharedRef<class FSlateStyleSet> Create();
static TSharedRef<FSlateStyleSet> Create();

private:
static FString InContent(const FString& RelativePath, const ANSICHAR* Extension);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1009,7 +1009,7 @@ bool RunSwitchToBranch(const FString& InBranchName, TArray<FString>& OutUpdatedF
TArray<FString> Parameters;
Parameters.Add(FString::Printf(TEXT("--xml=\"%s\""), *TempFile.GetFilename()));
Parameters.Add(TEXT("--encoding=\"utf-8\""));
Parameters.Add(FString::Printf(TEXT("br:%s"), *InBranchName));
Parameters.Add(FString::Printf(TEXT("\"br:%s\""), *InBranchName));
bResult = PlasticSourceControlUtils::RunCommand(TEXT("switch"), Parameters, TArray<FString>(), InfoMessages, OutErrorMessages);
if (bResult)
{
Expand Down Expand Up @@ -1041,6 +1041,28 @@ bool RunCreateBranch(const FString& InBranchName, const FString& InComment, TArr
return false;
}

bool RunRenameBranch(const FString& InOldName, const FString& InNewName, TArray<FString>& OutErrorMessages)
{
TArray<FString> Parameters;
TArray<FString> InfoMessages;
Parameters.Add(TEXT("rename"));
Parameters.Add(FString::Printf(TEXT("\"br:%s\""), *InOldName));
Parameters.Add(FString::Printf(TEXT("\"%s\""), *InNewName));
return PlasticSourceControlUtils::RunCommand(TEXT("branch"), Parameters, TArray<FString>(), InfoMessages, OutErrorMessages);
}

bool RunDeleteBranches(const TArray<FString>& InBranchNames, TArray<FString>& OutErrorMessages)
{
TArray<FString> Parameters;
TArray<FString> InfoMessages;
Parameters.Add(TEXT("delete"));
for (const FString& BranchName : InBranchNames)
{
Parameters.Add(FString::Printf(TEXT("\"br:%s\""), *BranchName));
}
return PlasticSourceControlUtils::RunCommand(TEXT("branch"), Parameters, TArray<FString>(), InfoMessages, OutErrorMessages);
}

bool UpdateCachedStates(TArray<FPlasticSourceControlState>&& InStates)
{
FPlasticSourceControlProvider& Provider = FPlasticSourceControlModule::Get().GetProvider();
Expand Down
15 changes: 15 additions & 0 deletions Source/PlasticSourceControl/Private/PlasticSourceControlUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,21 @@ bool RunSwitchToBranch(const FString& InBranchName, TArray<FString>& OutUpdatedF
*/
bool RunCreateBranch(const FString& InBranchName, const FString& InComment, TArray<FString>& OutErrorMessages);

/**
* Run branch rename <old name> <new name>
* @param InOldName The old name of the branch to rename
* @param InNewName The new name to rename the branch to
* @param OutErrorMessages Any errors (from StdErr) as an array per-line
*/
bool RunRenameBranch(const FString& InOldName, const FString& InNewName, TArray<FString>& OutErrorMessages);

/**
* Run branch delete <name1> <name2 ...>
* @param InBranchNames The name of the branch(es) to delete
* @param OutErrorMessages Any errors (from StdErr) as an array per-line
*/
bool RunDeleteBranches(const TArray<FString>& InBranchNames, TArray<FString>& OutErrorMessages);

/**
* Helper function for various commands to update cached states.
* @returns true if any states were updated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#pragma once

#include "CoreMinimal.h"

#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Widgets/Views/STableRow.h"
#include "Widgets/Views/STableViewBase.h"

Expand Down