270 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			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); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |