【Unity】svn一键提交,更新

可以在Unity内一键更新,不用再去文件夹点右键提交更新了

using System;
using System.Diagnostics;
using System.IO;
using UnityEditor;
using UnityEngine;

namespace SVNTool
{
    public class SvnEditor : EditorWindow
    {
        #region Setup

        private const string Svnkey = "key_svnroot";
        private const string SvnName = "TortoiseProc.exe";
        private static string s_svnpath = SvnName;

        [MenuItem("SVN/Setup SVN", priority = 0)]
        public static void Setup()
        {
            GetWindow();
        }

        #endregion

        #region Log
        [MenuItem("Assets/SVN/", priority = 10)]
        [MenuItem("Assets/SVN/查看所有提交记录 (Log All) ", priority = 11)]
        [MenuItem("SVN/", priority = 10)]
        [MenuItem("SVN/查看所有提交记录 (Log All) ", priority = 11)]
        public static void SVNLogAll()
        {
            SvnCmdProject(EmSVNCmd.Log);
        }

        [MenuItem("Assets/SVN/查看提交记录 (Log) ", priority = 1)]
        public static void SVNLog()
        {
            SvnCmdSelect(EmSVNCmd.Log);
        }

        #endregion

        #region Update

        [MenuItem("Assets/SVN/更新 (Update) ", priority = 2)]
        public static void SVNUpdate()
        {
            SvnCmdSelect(EmSVNCmd.Update);
        }


        [MenuItem("Assets/SVN/更新全部 (Update All) ", priority = 12)]
        [MenuItem("SVN/更新全部 (Update All) ", priority = 12)]
        public static void SVNUpdateAll()
        {
            SvnCmdProject(EmSVNCmd.Update);
        }

        #endregion

        #region Commit

        [MenuItem("Assets/SVN/提交全部 (Commit All) ", priority = 13)]
        [MenuItem("SVN/提交全部 (Commit All) ", priority = 13)]
        public static void SVNCommitAll()
        {
            SvnCmdProject(EmSVNCmd.Commit);
        }

        [MenuItem("Assets/SVN/提交 (Commit) ", priority = 3)]
        public static void SVNCommit()
        {
            SvnCmdSelect(EmSVNCmd.Commit);
        }

        #endregion

        #region Revert

        [MenuItem("Assets/SVN/还原 (Revert) ", priority = 4)]
        public static void SVNRevert()
        {
            SvnCmdSelect(EmSVNCmd.Revert);
        }

        #endregion

        #region Clearup

        [MenuItem("Assets/SVN/ClearUpAll", priority = 5)]
        [MenuItem("SVN/ClearUpAll", priority = 15)]
        public static void SVNClearUpAll()
        {
            SvnCmdProject(EmSVNCmd.Clearup);
        }

        #endregion

        #region core

        private static void SvnCmdProject(EmSVNCmd cmd)
        {
            var path = Application.dataPath;
            var project = Directory.GetParent(path);
            ProcessStart(cmd, project.FullName);
        }

        private static void SvnCmdSelect(EmSVNCmd cmd)
        {
            var select = Selection.activeObject;
            var path = AssetDatabase.GetAssetPath(select);
            ProcessStart(cmd, path);
        }

        private static void ProcessStart(EmSVNCmd cmd, string path)
        {
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
            try
            {
                var info = new ProcessStartInfo(s_svnpath)
                {
                    Arguments = string.Format("/command:{0} /path:{1} /closeonend:0", cmd.ToString().ToLower(), path)
                };
                Process.Start(info);
            }
            catch (Exception)
            {
                Setup();
            }
#endif
        }

        #endregion

        internal void OnEnable()
        {
            s_svnpath = EditorPrefs.GetString(Svnkey);
        }

        internal void OnGUI()
        {
            EditorGUILayout.LabelField("设置SVN");
            EditorGUILayout.Space();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("SVN程序", GUILayout.Width(50));
            EditorGUILayout.SelectableLabel(s_svnpath, GUILayout.Width(200));
            if (GUILayout.Button("select"))
            {
                var path = EditorUtility.OpenFilePanel("请选择TortoiseProc.exe存储位置", "", "exe");
                if (string.IsNullOrEmpty(path))
                    return;
                s_svnpath = path;
                EditorPrefs.SetString(Svnkey, s_svnpath);
            }
            if (GUILayout.Button("Clear"))
            {
                s_svnpath = SvnName;
                EditorPrefs.SetString(Svnkey, s_svnpath);
            }

            EditorGUILayout.EndHorizontal();
        }

        private enum EmSVNCmd
        {
            Log,
            Update,
            Commit,
            Revert,
            Clearup
        }
    }
}

你可能感兴趣的:(【Unity】svn一键提交,更新)