65 lines
2.5 KiB
C#
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 |