public static bool HaveSVNLock(SVNStatus svnStatus) { bool isManagedByRepository = ManagedByRepository(svnStatus); bool hasLocalLock = svnStatus.lockStatus == ESVNLockStatus.LockedHere; return(isManagedByRepository && hasLocalLock); }
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); }
public static bool ManagedByRepository(SVNStatus svnStatus) { return ((svnStatus.reflectionLevel == ESVNReflectionLevel.Repository || svnStatus.reflectionLevel == ESVNReflectionLevel.Local) && svnStatus.fileStatus != ESVNFileStatus.Unversioned); }
public static GUIStyle GetLockStatusStyle(SVNStatus svnStatus) { return(new GUIStyle(EditorStyles.boldLabel) { alignment = TextAnchor.MiddleCenter }); }
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); }
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); } } }
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); }
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); } } } }
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); }
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); }
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); }
/// <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); }
bool InterrestingStatus(SVNStatus svnStatus) { return(svnStatus.fileStatus != ESVNFileStatus.Normal || svnStatus.owner != null); }
public static bool HaveAssetControl(SVNStatus svnStatus) { return(HaveSVNLock(svnStatus) || svnStatus.bypassRevisionControl); }
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); } } }
public SVNKeyValuePair(string key, SVNStatus svnStatus) { this.key = key; this.svnStatus = svnStatus; }