minesweeper_game/Library/PackageCache/com.unity.collab-proxy@50ac96531b63/Editor/Tool/PlasticExeLauncher.cs
2025-03-15 14:30:26 -04:00

270 lines
11 KiB
C#

using Codice.Client.Commands;
using Codice.Client.Common.EventTracking;
using Codice.CM.Common;
namespace Unity.PlasticSCM.Editor.Tool
{
internal class PlasticExeLauncher : IToolLauncher
{
internal interface ICheckIsExeAvailable
{
bool ForMode(bool isGluonMode);
}
internal interface IProcessExecutor
{
bool Execute(string tool, string arguments, bool bWait);
}
internal static PlasticExeLauncher BuildForDiffContributors(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffContributors,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffContributors,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffContributors,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForDiffWorkspaceContent(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffWorkspaceContent,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffWorkspaceContent,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffWorkspaceContent,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForShowDiff(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromShowDiff,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromFromShowDiff,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromFromShowDiff,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForDiffRevision(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffRevision,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffRevision,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffRevision,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForDiffRevision(
RepositorySpec repSpec,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
repSpec,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffRevision,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffRevision,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffRevision,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForDiffSelectedRevisions(
RepositorySpec repSpec,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
repSpec,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromDiffRevision,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromDiffRevision,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromDiffRevision,
false,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForResolveConflicts(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromResolveConflicts,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromResolveConflicts,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromResolveConflicts,
true,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
internal static PlasticExeLauncher BuildForMergeSelectedFiles(
WorkspaceInfo wkInfo,
bool isGluonMode,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable = null,
IProcessExecutor processExecutor = null)
{
return new PlasticExeLauncher(
wkInfo,
isGluonMode,
TrackFeatureUseEvent.Features.InstallPlasticCloudFromMergeSelectedFiles,
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromMergeSelectedFiles,
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromMergeSelectedFiles,
true,
showDownloadPlasticExeWindow,
checkIsExeAvailable ?? new CheckIsExeAvailable(),
processExecutor ?? new ProcessExecutor());
}
PlasticExeLauncher(
WorkspaceInfo wkInfo,
bool isGluonMode,
string installCloudFrom,
string installEnterpriseFrom,
string cancelInstallFrom,
bool bWait,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable,
IProcessExecutor processExecutor)
: this(
PlasticGui.Plastic.API.GetRepositorySpec(wkInfo),
isGluonMode,
installCloudFrom,
installEnterpriseFrom,
cancelInstallFrom,
bWait,
showDownloadPlasticExeWindow,
checkIsExeAvailable,
processExecutor)
{
}
PlasticExeLauncher(
RepositorySpec repSpec,
bool isGluonMode,
string installCloudFrom,
string installEnterpriseFrom,
string cancelInstallFrom,
bool bWait,
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
ICheckIsExeAvailable checkIsExeAvailable,
IProcessExecutor processExecutor)
{
mRepSpec = repSpec;
mIsGluonMode = isGluonMode;
mInstallCloudFrom = installCloudFrom;
mInstallEnterpriseFrom = installEnterpriseFrom;
mCancelInstallFrom = cancelInstallFrom;
mbWait = bWait;
mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
mCheckIsExeAvailable = checkIsExeAvailable;
mProcessExecutor = processExecutor;
}
bool IToolLauncher.Launch(
string tool, string arguments, string fileExtensions)
{
if (mAskedUser)
return false;
if (mCheckIsExeAvailable.ForMode(mIsGluonMode))
return mProcessExecutor.Execute(tool, arguments, mbWait);
mShowDownloadPlasticExeWindow.Show(
mRepSpec,
mIsGluonMode,
mInstallCloudFrom,
mInstallEnterpriseFrom,
mCancelInstallFrom);
mAskedUser = true;
return false;
}
bool mAskedUser = false;
readonly RepositorySpec mRepSpec;
readonly bool mIsGluonMode;
readonly string mInstallCloudFrom;
readonly string mInstallEnterpriseFrom;
readonly string mCancelInstallFrom;
readonly bool mbWait;
readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
readonly ICheckIsExeAvailable mCheckIsExeAvailable;
readonly IProcessExecutor mProcessExecutor;
internal class CheckIsExeAvailable : ICheckIsExeAvailable
{
bool ICheckIsExeAvailable.ForMode(bool isGluonMode)
{
return IsExeAvailable.ForMode(isGluonMode);
}
}
internal class ProcessExecutor : IProcessExecutor
{
bool IProcessExecutor.Execute(string tool, string arguments, bool bWait)
{
return Codice.Client.BaseCommands.ProcessExecutor.Execute(
tool,
arguments,
bWait,
bNoWindow: false);
}
}
}
}