Example #1
0
    public static bool HaveSVNLock(SVNStatus svnStatus)
    {
        bool isManagedByRepository = ManagedByRepository(svnStatus);
        bool hasLocalLock          = svnStatus.lockStatus == ESVNLockStatus.LockedHere;

        return(isManagedByRepository && hasLocalLock);
    }
Example #2
0
    public static string GetLockStatusMessage(SVNStatus svnStatus)
    {
        string prefabLockMessage = svnStatus.lockStatus.ToString();

        if (svnStatus.lockStatus == ESVNLockStatus.LockedOther)
        {
            prefabLockMessage = SVNTerminoligy.getlock + " by: " + svnStatus.owner;
        }
        if (svnStatus.lockStatus == ESVNLockStatus.LockedHere)
        {
            prefabLockMessage = SVNTerminoligy.getlock + " Here: " + svnStatus.owner;
        }
        if (svnStatus.lockStatus == ESVNLockStatus.NoLock)
        {
            prefabLockMessage = SVNUtility.ManagedByRepository(svnStatus) ? "Not " + SVNTerminoligy.getlock : "Not on SVN";
        }
        if (svnStatus.bypassRevisionControl)
        {
            prefabLockMessage = SVNTerminoligy.bypass;
            if ((svnStatus.lockStatus == ESVNLockStatus.LockedOther))
            {
                prefabLockMessage += " (" + SVNTerminoligy.getlock + " By: " + svnStatus.owner + " )";
            }
        }
        return(prefabLockMessage);
    }
Example #3
0
 public static bool ManagedByRepository(SVNStatus svnStatus)
 {
     return
         ((svnStatus.reflectionLevel == ESVNReflectionLevel.Repository ||
           svnStatus.reflectionLevel == ESVNReflectionLevel.Local) &&
          svnStatus.fileStatus != ESVNFileStatus.Unversioned);
 }
Example #4
0
 public static GUIStyle GetLockStatusStyle(SVNStatus svnStatus)
 {
     return(new GUIStyle(EditorStyles.boldLabel)
     {
         alignment = TextAnchor.MiddleCenter
     });
 }
Example #5
0
    public static GUIStyle GetSVNBox(SVNStatus svnStatus)
    {
        var prefabBoxStyle = new GUIStyle(GUI.skin.box);

        prefabBoxStyle.border            = new RectOffset(2, 2, 2, 2);
        prefabBoxStyle.padding           = new RectOffset(1, 1, 1, 1);
        prefabBoxStyle.normal.background = GetSVNBackgroundTexture(svnStatus);
        return(prefabBoxStyle);
    }
Example #6
0
    static void SVNForceGetLockGameobjectContext(MenuCommand command)
    {
        string    assetPath = SVNUtility.GetAssetPath(command.context);
        SVNStatus svnStatus = SVNCommands.instance.GetAssetStatus(assetPath);

        if (svnStatus.lockStatus == ESVNLockStatus.LockedOther)
        {
            if (EditorUtility.DisplayDialog("Force " + SVNTerminoligy.getlock, "Are you sure you will steal the file from: [" + svnStatus.owner + "]", "Yes", "Cancel"))
            {
                SVNCommands.instance.SVNGetLock(new[] { assetPath }, true, false);
            }
        }
    }
Example #7
0
    static bool DisplayConfirmationDialog(string command, string assetPath, SVNStatus svnStatus)
    {
        bool acceptOperation = true;

        if (svnStatus.lockStatus == ESVNLockStatus.LockedOther)
        {
            acceptOperation = EditorUtility.DisplayDialog(command + " on SVN?", assetPath + "\nis " + SVNTerminoligy.getlock + " by [" + svnStatus.owner + "], are you sure you want to " + command + "?", command, "Cancel");
        }
        if (acceptOperation && svnStatus.fileStatus == ESVNFileStatus.Modified)
        {
            acceptOperation = EditorUtility.DisplayDialog(command + " on SVN?", assetPath + "\nFile is modified on SVN, are you sure you want to " + command + "?", command, "Cancel");
        }
        return(acceptOperation);
    }
Example #8
0
    public static void SVNStatusGUI(GUIStyle style, SVNStatus svnStatus, Object obj, bool showAddCommit, bool showLockBypass, bool showRevert)
    {
        bool svnBusy = SVNCommands.instance.svnBusy;

        using (new PushState <bool>(GUI.enabled, !svnBusy, v => GUI.enabled = v))
        {
            if (svnStatus.lockStatus == ESVNLockStatus.LockedHere || svnStatus.bypassRevisionControl || !SVNUtility.ManagedByRepository(svnStatus))
            {
                if (!svnStatus.bypassRevisionControl && SVNUtility.GetAssetPath(obj) != "" && showAddCommit)
                {
                    if (GUILayout.Button((SVNUtility.ManagedByRepository(svnStatus) ? SVNTerminoligy.commit : SVNTerminoligy.add), GetPrefabToolbarStyle(style, true)))
                    {
                        SVNUtility.CommitPrefab(obj, SVNTerminoligy.commit + " from Inspector");
                    }
                }
            }

            if (!SVNUtility.HaveSVNLock(svnStatus) && SVNUtility.ManagedByRepository(svnStatus) && showLockBypass)
            {
                if (svnStatus.lockStatus != ESVNLockStatus.LockedOther)
                {
                    if (GUILayout.Button(SVNTerminoligy.getlock, GetPrefabToolbarStyle(style, true)))
                    {
                        SVNUtility.GetSVNLock(obj);
                    }
                }
                if (!svnStatus.bypassRevisionControl)
                {
                    if (GUILayout.Button(SVNTerminoligy.bypass, GetPrefabToolbarStyle(style, true)))
                    {
                        SVNUtility.SetBypass(obj);
                    }
                }
            }

            if (showRevert)
            {
                if (GUILayout.Button(SVNTerminoligy.revert, GetPrefabToolbarStyle(style, SVNUtility.ShouldSVNRevert(obj))))
                {
                    SVNUtility.Revert(obj);
                }
            }
        }
    }
Example #9
0
 public static Texture2D GetSVNBackgroundTexture(SVNStatus svnStatus)
 {
     if (svnStatus.bypassRevisionControl)
     {
         return(BackgroundTextures.instance.bypassTexture);
     }
     if (SVNUtility.ManagedByRepository(svnStatus))
     {
         if (svnStatus.lockStatus == ESVNLockStatus.NoLock)
         {
             return(BackgroundTextures.instance.noLockTexture);
         }
         if (svnStatus.lockStatus == ESVNLockStatus.LockedHere)
         {
             return(BackgroundTextures.instance.lockedTexture);
         }
         if (svnStatus.lockStatus == ESVNLockStatus.LockedOther)
         {
             return(BackgroundTextures.instance.lockedByOtherTexture);
         }
     }
     return(BackgroundTextures.instance.noSVNTexture);
 }
Example #10
0
 static Color GetStatusColorCode(SVNStatus svnStatus)
 {
     if (svnStatus.fileStatus == ESVNFileStatus.Unversioned)
     {
         return(Color.grey);
     }
     if (svnStatus.fileStatus == ESVNFileStatus.Normal)
     {
         return(Color.black);
     }
     if (svnStatus.fileStatus == ESVNFileStatus.Missing)
     {
         return(new Color(0.6f, 0.0f, 0.2f));
     }
     if (svnStatus.fileStatus == ESVNFileStatus.Conflicted)
     {
         return(Color.red);
     }
     if (svnStatus.fileStatus == ESVNFileStatus.Modified)
     {
         return(Color.blue);
     }
     return(Color.black);
 }
Example #11
0
    void OnGUI()
    {
        EditorGUILayout.BeginVertical();
        GUILayoutOption[] buttonLayout = { GUILayout.MaxWidth(50) };
        {// Buttons at top
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);

            using (new PushState <bool>(GUI.enabled, !mSVNBusy, v => GUI.enabled = v))
            {
                if (GUILayout.Button(SVNTerminoligy.status, EditorStyles.toolbarButton, buttonLayout) || Event.current.keyCode == KeyCode.F5)
                {
                    EditorApplication.SaveAssets();
                    SVNCommands.instance.UpdateSVNStatus();
                }
                if (GUILayout.Button(SVNTerminoligy.update, EditorStyles.toolbarButton, buttonLayout))
                {
                    SVNCommands.SVNUpdate();
                }
                if (GUILayout.Button(SVNTerminoligy.revert, EditorStyles.toolbarButton, buttonLayout))
                {
                    EditorApplication.SaveAssets();
                    SVNCommands.instance.SVNRevert(GetSelectedAssets().ToArray());
                }
                if (GUILayout.Button(SVNTerminoligy.delete, EditorStyles.toolbarButton, buttonLayout))
                {
                    SVNCommands.instance.SVNDelete(GetSelectedAssets().ToArray());
                }
                if (GUILayout.Button(SVNTerminoligy.unlock, EditorStyles.toolbarButton, buttonLayout))
                {
                    SVNCommands.instance.SVNReleaseLock(GetSelectedAssets().ToArray());
                }
                if (GUILayout.Button(SVNTerminoligy.commit, EditorStyles.toolbarButton, buttonLayout))
                {
                    var assetsToBeCommited = GetSelectedAssets();
                    SVNCommands.instance.SVNCommit(assetsToBeCommited, mCommitMessage.Length == 0 ? "Commit from Unity" : mCommitMessage);
                }
            }

            mCommitMessage = GUILayout.TextField(mCommitMessage, EditorStyles.toolbarTextField, GUILayout.MinWidth(100), GUILayout.ExpandWidth(true));
            bool newShowUnversioned = GUILayout.Toggle(mShowUnversioned, "Unversioned", EditorStyles.toolbarButton, new GUILayoutOption[] { GUILayout.MaxWidth(80) });

            if (newShowUnversioned != mShowUnversioned)
            {
                mShowUnversioned = newShowUnversioned;
                UpdateFilteringOfKeys();
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Separator();
        }

        {// SVN elements on scrollable list
            const int columnSpacing = 20;

            GUILayoutOption[] propertyLayout  = { GUILayout.MaxWidth(75), GUILayout.Width(75) };
            GUILayoutOption[] assetPathLayout = { GUILayout.MaxWidth(600), GUILayout.Width(600) };

            var headingStyle = new GUIStyle(GUI.skin.label);
            var labelStyle   = new GUIStyle(GUI.skin.label);
            //labelStyle.normal.textColor = GUI.skin.label.normal new Color(0.2f, 0.2f, 0.2f);

            var selectedLabelStyle = new GUIStyle(labelStyle);
            //selectedLabelStyle.normal.textColor = new Color(0.0f, 0.0f, 0.0f);

            { // Header
                EditorGUILayout.BeginHorizontal();
                headingStyle.fontStyle = FontStyle.Bold;
                if (GUILayout.Button("\tAsset Path", headingStyle, assetPathLayout))
                {
                    if (mSortbyColumn == ColumnTypeEnum.AssetPath)
                    {
                        mReverseColumnSort = !mReverseColumnSort;
                    }
                    else
                    {
                        mReverseColumnSort = false;
                    }
                    mSortbyColumn = ColumnTypeEnum.AssetPath;
                    UpdateFilteringOfKeys();
                }
                GUILayout.Space(columnSpacing);

                //(reverseColumnSort ? "△" : "▽")
                if (GUILayout.Button("File Type", headingStyle, propertyLayout))
                {
                    if (mSortbyColumn == ColumnTypeEnum.FileType)
                    {
                        mReverseColumnSort = !mReverseColumnSort;
                    }
                    else
                    {
                        mReverseColumnSort = false;
                    }
                    mSortbyColumn = ColumnTypeEnum.FileType;
                    UpdateFilteringOfKeys();
                }
                GUILayout.Space(columnSpacing);


                if (GUILayout.Button("File Status", headingStyle, propertyLayout))
                {
                    if (mSortbyColumn == ColumnTypeEnum.FileStatus)
                    {
                        mReverseColumnSort = !mReverseColumnSort;
                    }
                    else
                    {
                        mReverseColumnSort = false;
                    }
                    mSortbyColumn = ColumnTypeEnum.FileStatus;
                    UpdateFilteringOfKeys();
                }
                GUILayout.Space(columnSpacing);


                if (GUILayout.Button("Locked By", headingStyle, propertyLayout))
                {
                    if (mSortbyColumn == ColumnTypeEnum.LockedBy)
                    {
                        mReverseColumnSort = !mReverseColumnSort;
                    }
                    else
                    {
                        mReverseColumnSort = false;
                    }
                    mSortbyColumn = ColumnTypeEnum.LockedBy;
                    UpdateFilteringOfKeys();
                }

                headingStyle.fontStyle = FontStyle.Normal;
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Separator();
            }
            mScrollViewVectorEntries = EditorGUILayout.BeginScrollView(mScrollViewVectorEntries, false, false);

            // List content
            if (mFilteredKeysOfInterrest != null && mFilteredKeysOfInterrest.Count() != 0)
            {
                foreach (SVNKeyValuePair svnStatusKeyIt in mFilteredKeysOfInterrest)
                {
                    if (!mSelectedAssets.ContainsKey(svnStatusKeyIt))
                    {
                        mSelectedAssets[svnStatusKeyIt] = false;
                    }
                    SVNStatus svnStatusValueIt = svnStatusKeyIt.svnStatus;
                    EditorGUILayout.BeginHorizontal();
                    Color previousColor = labelStyle.normal.textColor;
                    var   metaStatus    = mSVNStatusDatabase.GetMetaStatus(svnStatusKeyIt.key);
                    //if (metaStatus == null) Debug.Log("Missing meta file: " + svnStatusKeyIt.key);
                    bool metaModified = metaStatus != null &&
                                        metaStatus.fileStatus != ESVNFileStatus.Normal &&
                                        (metaStatus.fileStatus != ESVNFileStatus.Unversioned || metaStatus.fileStatus != svnStatusValueIt.fileStatus);
                    var tooltip = Path.GetFileName(svnStatusKeyIt.key) + ":\nsvn status :\t[" + svnStatusValueIt.fileStatus + "]";
                    if (metaStatus != null)
                    {
                        tooltip += "\nmeta status:\t[" + metaStatus.fileStatus + "]";
                    }

                    // AssetPath •
                    if (svnStatusValueIt.treeConflictStatus == ESVNTreeConflictStatus.TreeConflict)
                    {
                        labelStyle.normal.textColor = Color.red;
                    }
                    string assetPathText    = (mSelectedAssets[svnStatusKeyIt] ? "+\t" : "\t") + svnStatusKeyIt.key;
                    var    assetPathContent = new GUIContent(assetPathText);
                    if (GUILayout.Button(assetPathContent, (mSelectedAssets[svnStatusKeyIt] ? selectedLabelStyle : labelStyle), assetPathLayout))
                    {
                        mSelectedAssets[svnStatusKeyIt] = !mSelectedAssets[svnStatusKeyIt];
                    }
                    GUILayout.Space(columnSpacing);

                    // FileType
                    GUILayout.Label(GetFileType(svnStatusKeyIt.key), labelStyle, propertyLayout); GUILayout.Space(columnSpacing);
                    labelStyle.normal.textColor = GetStatusColorCode(svnStatusValueIt);

                    // FileStatus
                    var filestatusText    = svnStatusValueIt.fileStatus + (metaModified ? "(m)" : "") + (svnStatusValueIt.bypassRevisionControl ? "*" : "");
                    var filestatusContent = new GUIContent(filestatusText, tooltip);
                    GUILayout.Label(filestatusContent, labelStyle, propertyLayout); GUILayout.Space(columnSpacing);
                    labelStyle.normal.textColor = previousColor;

                    // LockedBy
                    GUILayout.Label(svnStatusValueIt.owner, labelStyle, propertyLayout);

                    EditorGUILayout.EndHorizontal();
                }
            }

            EditorGUILayout.EndScrollView();
        }
        { // SVN message box
            //Debug.Log(messageHistory.Count);
            string allEntries = "";
            if (mCurrentSVNOperation != null)
            {
                allEntries = "Currently executing following command:\n" + mCurrentSVNOperation;
            }
            else
            {
                for (int i = svnCommandHistory.Count - 1; i >= 0; i--)
                {
                    if (!svnCommandHistory[i].arguments.Contains("status --non-interactive --xml"))
                    {
                        allEntries += svnCommandHistory[i].command + " " + svnCommandHistory[i].arguments + ":\n" + svnCommandHistory[i].outputStr + "-----------------------\n";
                    }
                }
            }
            EditorGUILayout.BeginVertical(GUILayout.Height(135));
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label(new GUIContent("SVN Output"));
            EditorGUILayout.EndHorizontal();
            mScrollViewVectorLog = EditorGUILayout.BeginScrollView(mScrollViewVectorLog, false, false);
            float heightOfLogInPixles = Mathf.Max(100.0f, GUI.skin.window.CalcSize(new GUIContent(allEntries)).y);

            GUI.skin.box.alignment = TextAnchor.UpperLeft;
            GUILayout.Box(allEntries, GUILayout.MinHeight(heightOfLogInPixles), GUILayout.ExpandWidth(true));
            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }

        EditorGUILayout.EndVertical();
    }
 void RefreshFromDatabase()
 {
     mAssetpath = SVNUtility.GetAssetPath(mGameObject);
     mSVNStatus = SVNCommands.instance.GetAssetStatus(mAssetpath);
     //Debug.Log("Refresh from database: " + mAssetpath + " " + mSVNStatus.lockStatus);
 }
Example #13
0
	/// <summary>
	/// SVNの状態アイコン表示
	/// </summary>
	/// <param name="selectionRect"></param>
	private static void ShowStatusLabel(SVNStatus status, Rect selectionRect)
	{
		// アイコンの位置
		const int size = 15;
		var pos = selectionRect;
		pos.y = selectionRect.position.y;
		pos.x = selectionRect.position.x;
		pos.width = size;
		pos.height = size;
		pos.yMin++;

		// ラベル表示
		string text = "o";
		Color mColor = new Color(0, 1, 0, 0.5f);
		if (status == SVNStatus.ADD)
		{
			text = "+";
			mColor = new Color(0, 0, 1, 0.5f);
		}
		else if (status == SVNStatus.CONFRICT)
		{
			text = "!?";
			mColor = new Color(1, 1, 0, 0.5f);
		}
		else if (status == SVNStatus.EDIT)
		{
			text = "!";
			mColor = new Color(1, 0, 0, 0.5f);
		}
		else if (status == SVNStatus.NONE)
		{
			text = "?";
			mColor = new Color(1, 1, 1, 0.5f);

		}
		else if (status == SVNStatus.DELETE)
		{
			text = "x";
			mColor = new Color(1, 0, 0, 0.5f);
		}
		else if (status == SVNStatus.MOVE)
		{
			text = "!";
			mColor = new Color(0.5f, 0.2f, 0.5f, 0.5f);
		}


		GUIStyleState styleState = new GUIStyleState();
		styleState.textColor = Color.white;

		GUIStyle style = new GUIStyle();
		style.fontSize = 14;
		style.fontStyle = FontStyle.Bold;
		style.normal = styleState;


		float offset = -12 + 3 * (selectionRect.height / 16.0f);
		// 小さいアイコンのときは端っこに寄せる
		pos.y = selectionRect.height > 16.0f ? selectionRect.position.y + offset : selectionRect.position.y+1;
		pos.x = selectionRect.height > 16.0f ? selectionRect.position.x + offset : 0;


		// BG
		var color = GUI.color;
		GUI.color = mColor;
		GUI.DrawTexture(pos, EditorGUIUtility.whiteTexture);
		GUI.color = color;

		// テキストは少し中に寄せる
		pos.y -= 2;
		pos.x += 2;

		// アイコン
		GUI.Label(pos, text, style);



	}
Example #14
0
 bool InterrestingStatus(SVNStatus svnStatus)
 {
     return(svnStatus.fileStatus != ESVNFileStatus.Normal || svnStatus.owner != null);
 }
Example #15
0
 public static bool HaveAssetControl(SVNStatus svnStatus)
 {
     return(HaveSVNLock(svnStatus) || svnStatus.bypassRevisionControl);
 }
Example #16
0
    public static void RefreshEditableComponent(GameObject gameObject, Component component, SVNStatus svnStatus)
    {
        bool changesStoredInScene       = ChangesStoredInScene(gameObject);
        bool sceneObjectAndNoSVNControl = !HaveAssetControl(svnStatus) && changesStoredInScene;
        bool shouldLock = !(HaveAssetControl(svnStatus) || sceneObjectAndNoSVNControl) && ManagedByRepository(svnStatus);

        SetEditable(component, shouldLock);
        var renderer = component as Renderer;

        if (renderer)
        {
            foreach (var materialIt in renderer.sharedMaterials)
            {
                SetMaterialLock(gameObject, materialIt, shouldLock);
            }
        }
    }
Example #17
0
 public SVNKeyValuePair(string key, SVNStatus svnStatus)
 {
     this.key       = key;
     this.svnStatus = svnStatus;
 }