PO/Library/Artifacts/5d/5d6324fd49b3393a478a6d2609f...

372 lines
16 KiB
Plaintext
Raw Normal View History

2022-01-12 10:06:03 +03:00
<0F>?<3F>2019.4.19f1<00><><EFBFBD><EFBFBD> <00><>f<EFBFBD><66>!<21>5<>9<EFBFBD>4Q<0E><>B<00>7<00><><EFBFBD><EFBFBD><EFBFBD><00><00><00><><00> E<00> <00><00>#<00>.<00>,<00>5a<00> <00><00>#<00>.<00>,<00><00><00>r<00> <00><00># <00>.<00>,
<00>H<00><><00><><EFBFBD><EFBFBD><EFBFBD> <01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD> @<00><00><00> Q<00>j<00><00><00>J<00><><EFBFBD><EFBFBD><00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD><00><00><00><00><00>j<00><><EFBFBD><EFBFBD><EFBFBD><00>\<00><00><><EFBFBD><EFBFBD><EFBFBD><00>H<00>r<00><><EFBFBD><EFBFBD><00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>@<00><00><00>Q<00>j<00>H<00>w<00><><EFBFBD><EFBFBD><00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>@<00><00><00>Q<00>j<00>H<00><><00><><EFBFBD><EFBFBD><00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>@<00><00><00>Q<00>j<00>y<00>
<00> <00><00>#!<00>.<00>,"<00><00><><00><><EFBFBD><EFBFBD>#@1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>$<00><00><00>%.<00>j<00>&<00><00><><00><><EFBFBD><EFBFBD>'<00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>(<00><00><00><00>)<00>j<00><><EFBFBD><EFBFBD><EFBFBD>*<00>H<00><><00><><EFBFBD><EFBFBD><EFBFBD>+<00>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>,@<00><00><00>-Q<00>j<00>.y<00>
<00> /<00><00>#0<00>.<00>,1<00> <00><>2@<00><00><> 3@<00><00>#4<00>.<00>,5<00>H<00><><00><><EFBFBD><EFBFBD>6<01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>7@<00><00><00>8Q<00>j<00>9H<00><><00><><EFBFBD><EFBFBD>:<01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>;@<00><00><00><Q<00>j<00>=H<00><><00><><EFBFBD><EFBFBD>><01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>?@<00><00><00>@Q<00>j<00>AMonoImporterPPtr<EditorExtension>m_FileIDm_PathIDPPtr<PrefabInstance>m_ExternalObjectsSourceAssetIdentifiertypeassemblynamem_UsedFileIDsm_DefaultReferencesexecutionOrdericonm_UserDatam_AssetBundleNamem_AssetBundleVariants<00><><EFBFBD>G<EFBFBD><47>܏Z56<35>:!@i<>J*<00><00>7<00><><EFBFBD><EFBFBD><EFBFBD><00><00><00><><00>E<00> <00><00><00>.<00><00>(a<00> <00><00><00>.<00><00><00><00>r<00> <00><00> <00>.<00>
<00>H<00><><00><><EFBFBD><EFBFBD><EFBFBD> <01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD> @<00><00><00> Q<00>j<00>H<00><><00><><EFBFBD><EFBFBD><EFBFBD><01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>@<00><00><00>Q<00>j<00><00><00>=<00><><EFBFBD><EFBFBD><01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD><01><00><00><00><00>j<00><><EFBFBD><EFBFBD><EFBFBD><01>H<00><><00><><EFBFBD><EFBFBD><EFBFBD><01>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>@<00><00><00>Q<00>j<00>y<00>
<00> <00><00><00>.<00><00>y<00>Q <00><00><00>.<00> <00><00><00>X!H<00>i<00><><EFBFBD><EFBFBD>"<10>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>#@<00><00><00>$Q<00>j<00>%H<00>u<00><><EFBFBD><EFBFBD>&<10>1<00>1<00><><EFBFBD><EFBFBD><EFBFBD>'@<00><00><00>(Q<00>j<00>)PPtr<EditorExtension>m_FileIDm_PathIDPPtr<PrefabInstance>m_DefaultReferencesm_Iconm_ExecutionOrderm_ClassNamem_Namespace\<00>y<EFBFBD>`p/<00>y<EFBFBD>
LaunchTool<00>.using System;
using System.Diagnostics;
using System.IO;
using Codice.Client.BaseCommands.EventTracking;
using Codice.CM.Common;
using Codice.LogWrapper;
using Codice.Utils;
using PlasticGui;
using Unity.PlasticSCM.Editor.Views;
namespace Unity.PlasticSCM.Editor.Tool
{
internal static class LaunchTool
{
internal static void OpenGUIForMode(WorkspaceInfo wkInfo, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Opening GUI on wkPath '{0}'.",
wkInfo.ClientPath);
TrackFeatureUseEvent.For(
PlasticGui.Plastic.API.GetRepositorySpec(wkInfo),
isGluonMode ?
TrackFeatureUseEvent.Features.LaunchGluonTool :
TrackFeatureUseEvent.Features.LaunchPlasticTool);
if (isGluonMode)
{
Process gluonProcess = ExecuteGUI(
PlasticInstallPath.GetGluonExePath(),
string.Format(
ToolConstants.Gluon.GUI_WK_EXPLORER_ARG,
wkInfo.ClientPath),
ToolConstants.Gluon.GUI_COMMAND_FILE_ARG,
ToolConstants.Gluon.GUI_COMMAND_FILE,
mGluonProcessId);
if (gluonProcess != null)
mGluonProcessId = gluonProcess.Id;
return;
}
if (PlatformIdentifier.IsMac())
{
Process plasticProcess = ExecuteGUI(
PlasticInstallPath.GetPlasticExePath(),
string.Format(
ToolConstants.Plastic.GUI_MACOS_WK_EXPLORER_ARG,
wkInfo.ClientPath),
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE_ARG,
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE,
mPlasticProcessId);
if (plasticProcess != null)
mPlasticProcessId = plasticProcess.Id;
return;
}
ExecuteProcess(
PlasticInstallPath.GetPlasticExePath(),
string.Format(
ToolConstants.Plastic.GUI_WINDOWS_WK_ARG,
wkInfo.ClientPath));
}
internal static void OpenBranchExplorer(WorkspaceInfo wkInfo, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Opening Branch Explorer on wkPath '{0}'.",
wkInfo.ClientPath);
TrackFeatureUseEvent.For(
PlasticGui.Plastic.API.GetRepositorySpec(wkInfo),
TrackFeatureUseEvent.Features.LaunchBranchExplorer);
if (PlatformIdentifier.IsMac())
{
Process plasticProcess = ExecuteGUI(
PlasticInstallPath.GetPlasticExePath(),
string.Format(
ToolConstants.Plastic.GUI_MACOS_BREX_ARG,
wkInfo.ClientPath),
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE_ARG,
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE,
mPlasticProcessId);
if (plasticProcess != null)
mPlasticProcessId = plasticProcess.Id;
return;
}
Process brexProcess = ExecuteWindowsGUI(
PlasticInstallPath.GetPlasticExePath(),
string.Format(
ToolConstants.Plastic.GUI_WINDOWS_BREX_ARG,
wkInfo.ClientPath),
mBrexProcessId);
if (brexProcess != null)
mBrexProcessId = brexProcess.Id;
}
internal static void OpenChangesetDiffs(string fullChangesetSpec, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Launching changeset diffs for '{0}'",
fullChangesetSpec);
string exePath = (isGluonMode) ?
PlasticInstallPath.GetGluonExePath() :
PlasticInstallPath.GetPlasticExePath();
string changesetDiffArg = (isGluonMode) ?
ToolConstants.Gluon.GUI_CHANGESET_DIFF_ARG :
ToolConstants.Plastic.GUI_CHANGESET_DIFF_ARG;
ExecuteProcess(exePath,
string.Format(
changesetDiffArg, fullChangesetSpec));
}
internal static void OpenSelectedChangesetsDiffs(
string srcFullChangesetSpec,
string dstFullChangesetSpec,
bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Launching selected changesets diffs for '{0}' and '{1}'",
srcFullChangesetSpec,
dstFullChangesetSpec);
string exePath = (isGluonMode) ?
PlasticInstallPath.GetGluonExePath() :
PlasticInstallPath.GetPlasticExePath();
string selectedChangesetsDiffArgs = (isGluonMode) ?
ToolConstants.Gluon.GUI_SELECTED_CHANGESETS_DIFF_ARGS :
ToolConstants.Plastic.GUI_SELECTED_CHANGESETS_DIFF_ARGS;
ExecuteProcess(exePath,
string.Format(
selectedChangesetsDiffArgs,
srcFullChangesetSpec,
dstFullChangesetSpec));
}
internal static void OpenBranchDiffs(string fullBranchSpec, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Launching branch diffs for '{0}'",
fullBranchSpec);
string exePath = (isGluonMode) ?
PlasticInstallPath.GetGluonExePath() :
PlasticInstallPath.GetPlasticExePath();
string branchDiffArg = (isGluonMode) ?
ToolConstants.Gluon.GUI_BRANCH_DIFF_ARG :
ToolConstants.Plastic.GUI_BRANCH_DIFF_ARG;
ExecuteProcess(exePath,
string.Format(
branchDiffArg, fullBranchSpec));
}
internal static void OpenWorkspaceConfiguration(WorkspaceInfo wkInfo, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Opening Workspace Configuration on wkPath '{0}'.",
wkInfo.ClientPath);
TrackFeatureUseEvent.For(
PlasticGui.Plastic.API.GetRepositorySpec(wkInfo),
TrackFeatureUseEvent.Features.LaunchPartialConfigure);
Process gluonProcess = ExecuteGUI(
PlasticInstallPath.GetGluonExePath(),
string.Format(
ToolConstants.Gluon.GUI_WK_CONFIGURATION_ARG,
wkInfo.ClientPath),
ToolConstants.Gluon.GUI_COMMAND_FILE_ARG,
ToolConstants.Gluon.GUI_COMMAND_FILE,
mGluonProcessId);
if (gluonProcess == null)
return;
mGluonProcessId = gluonProcess.Id;
}
internal static void OpenMerge(string wkPath, bool isGluonMode)
{
if (ShowDownloadPlasticExeWindow(isGluonMode))
return;
mLog.DebugFormat(
"Opening Merge on wkPath '{0}'.",
wkPath);
if (PlatformIdentifier.IsMac())
{
Process plasticProcess = ExecuteGUI(
PlasticInstallPath.GetPlasticExePath(),
string.Format(ToolConstants.Plastic.GUI_MACOS_MERGE_ARG, wkPath),
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE_ARG,
ToolConstants.Plastic.GUI_MACOS_COMMAND_FILE,
mPlasticProcessId);
if (plasticProcess != null)
mPlasticProcessId = plasticProcess.Id;
return;
}
ExecuteProcess(
PlasticInstallPath.GetPlasticExePath(),
string.Format(ToolConstants.Plastic.GUI_WINDOWS_MERGE_ARG, wkPath));
}
internal static bool ShowDownloadPlasticExeWindow(bool isGluonMode)
{
if (IsExeAvailable.ForMode(isGluonMode))
return false;
DownloadPlasticExeWindow.ShowWindow(isGluonMode);
return true;
}
static Process ExecuteGUI(
string program,
string args,
string commandFileArg,
string commandFileName,
int processId)
{
string commandFile = Path.Combine(
Path.GetTempPath(), commandFileName);
Process process = GetGUIProcess(program, processId);
if (process == null)
{
mLog.DebugFormat("Executing {0} (new process).", program);
return ExecuteProcess(
program, args + string.Format(commandFileArg, commandFile));
}
mLog.DebugFormat("Executing {0} (reuse process pid:{1}).", program, processId);
using (StreamWriter writer = new StreamWriter(new FileStream(
commandFile, FileMode.Append, FileAccess.Write, FileShare.Read)))
{
writer.WriteLine(args);
}
return process;
}
static Process ExecuteWindowsGUI(
string program,
string args,
int processId)
{
Process process = GetGUIProcess(program, processId);
if (process == null)
{
mLog.DebugFormat("Executing {0} (new process).", program);
return ExecuteProcess(program, args);
}
mLog.DebugFormat("Not executing {0} (existing process pid:{1}).", program, processId);
BringWindowToFront.ForWindowsProcess(process.Id);
return process;
}
static Process ExecuteProcess(string program, string args)
{
mLog.DebugFormat("Execute process: '{0} {1}'", program, args);
Process process = BuildProcess(program, args);
try
{
process.Start();
return process;
}
catch (Exception ex)
{
mLog.ErrorFormat("Couldn't execute the program {0}: {1}",
program, ex.Message);
mLog.DebugFormat("Stack trace: {0}",
ex.StackTrace);
return null;
}
}
static Process BuildProcess(string program, string args)
{
Process result = new Process();
result.StartInfo.FileName = program;
result.StartInfo.Arguments = args;
result.StartInfo.CreateNoWindow = false;
return result;
}
static Process GetGUIProcess(string program, int processId)
{
if (processId == -1)
return null;
mLog.DebugFormat("Checking {0} process [pid:{1}].", program, processId);
try
{
Process process = Process.GetProcessById(processId);
if (process == null)
return null;
return process.HasExited ? null : process;
}
catch
{
// process is not running
return null;
}
}
static int mPlasticProcessId = -1;
static int mGluonProcessId = -1;
static int mBrexProcessId = -1;
static readonly ILog mLog = LogManager.GetLogger("LaunchTool");
}
}
LaunchToolUnity.PlasticSCM.Editor.Tool