美文网首页
【Unity】svn一键提交,更新

【Unity】svn一键提交,更新

作者: 木心Sepith | 来源:发表于2022-05-23 09:49 被阅读0次

    可以在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<SvnEditor>();
            }
    
            #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一键提交,更新

          本文链接:https://www.haomeiwen.com/subject/ruhrprtx.html