ProjectZ/Assets/SmartMergeRegistrator.cs
2024-02-19 21:00:36 +03:00

65 lines
2.5 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System;
namespace GitIntegration
{
[InitializeOnLoad]
public class SmartMergeRegistrator
{
const string SmartMergeRegistratorEditorPrefsKey = "smart_merge_installed";
const int Version = 1;
static string VersionKey = $"{Version}_{Application.unityVersion}";
public static string ExecuteGitWithParams(string param)
{
var processInfo = new System.Diagnostics.ProcessStartInfo("git");
processInfo.UseShellExecute = false;
processInfo.WorkingDirectory = Environment.CurrentDirectory;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
processInfo.CreateNoWindow = true;
var process = new System.Diagnostics.Process();
process.StartInfo = processInfo;
process.StartInfo.FileName = "git";
process.StartInfo.Arguments = param;
process.Start();
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception(process.StandardError.ReadLine());
return process.StandardOutput.ReadLine();
}
[MenuItem("Tools/Git/SmartMerge registration")]
static void SmartMergeRegister()
{
try
{
var UnityYAMLMergePath = EditorApplication.applicationContentsPath + "/Tools" + "/UnityYAMLMerge.exe";
ExecuteGitWithParams("config merge.unityyamlmerge.name \"Unity SmartMerge (UnityYamlMerge)\"");
ExecuteGitWithParams($"config merge.unityyamlmerge.driver \"\\\"{UnityYAMLMergePath}\\\" merge -h -p --force --fallback none %O %B %A %A\"");
ExecuteGitWithParams("config merge.unityyamlmerge.recursive binary");
EditorPrefs.SetString(SmartMergeRegistratorEditorPrefsKey, VersionKey);
Debug.Log($"Succesfuly registered UnityYAMLMerge with path {UnityYAMLMergePath}");
}
catch (Exception e)
{
Debug.Log($"Fail to register UnityYAMLMerge with error: {e}");
}
}
//Unity calls the static constructor when the engine opens
static SmartMergeRegistrator()
{
var instaledVersionKey = EditorPrefs.GetString(SmartMergeRegistratorEditorPrefsKey);
if (instaledVersionKey != VersionKey)
SmartMergeRegister();
}
}
}
#endif