diff --git a/.buginfo b/.buginfo new file mode 100644 index 0000000..4f4754b --- /dev/null +++ b/.buginfo @@ -0,0 +1,2 @@ +project: VCS +package: Unity Version Control package diff --git a/CHANGELOG.md b/CHANGELOG.md index 6446fea..6a1e5db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,32 @@ All notable changes to this package will be documented in this file. +## [2.4.3] - 2024-06-20 + +### Added + +- Changed the default ignore.conf to not ignore itself +- Added "Undo unchanged" and "Undo checkouts keeping changes" options to pending changes view +- Removed focus redirection after Check-in + +### Fixed + +- Moving folders in the Editor now correctly use the UVCS "Move" operation +- Fixed hang on domain reload +- Fixed "item with the same key has already been added" error +- Fixed failure to delete a .meta file when deleting a private folder from the pending changes +- Supported workspace name with non-latin characters in Pending Changes +- Fixed text cut-off in filter rules dialog +- Fixed unexpected error while switching between branches +- Fixed error after renaming a parent branch of the working branch +- Fixed variables's value becoming clear after resolving conflict in inspector +- Removed misleading indication about shelves +- Fixed column sorting in pending changes view +- Fixed missing incoming changes after removing a branch +- Fixed "Collection was modified" error when doing multiple renames in a row +- Fixed undo & check-in operations not working when the current scene was never saved +- Fixed check in error if nothing is selected in the pending changes tree + ## [2.3.1] - 2024-02-27 Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started! @@ -19,7 +45,6 @@ Removing a previously added Plastic SCM Asset Store Plug-In: - Fixed DropdownField not working properly on a ModalUtility window on MacOS. - Fixed issue with existing checkout operations locking the workspace. -- Retained locks prevented to checkout assets. - Reviewed initialization and application lifecycle. - Fixed layout error when switching checkout status in the inspector. - Fixed Diff option unavailable for .prefab. @@ -31,6 +56,7 @@ Removing a previously added Plastic SCM Asset Store Plug-In: - Fixed finding changes operation being firing constantly. - Removed obsolete content in package documentation. - Fixed typo in locks tooltip. +- Replaced the text "plasticscm.com" by a https://unity.com/solutions/version-control in the package.json ## [2.2.0] - 2023-10-06 diff --git a/Documentation~/index.md b/Documentation~/index.md index 49b503d..1969620 100644 --- a/Documentation~/index.md +++ b/Documentation~/index.md @@ -2,7 +2,7 @@ The Version Control package provides an integration of Unity Version Control (Unity VCS, formerly Plastic SCM) in the Unity Editor. -It is installed by default with the Editor, and follows the Unity support schedule. Currently, the minimum supported version of the Unity Editor is 2021.3 LTS. +It is installed by default with the Editor, and follows the Unity support schedule. Currently, the minimum supported version of the Unity Editor is 2020.3 LTS. * [Quick start guide](QuickStartGuide.md) * [Get started with Unity Version Control](GetStarted.md) diff --git a/Editor/PlasticSCM/AssetMenu/AssetMenuItems.cs b/Editor/PlasticSCM/AssetMenu/AssetMenuItems.cs index 606d9a0..64b80b8 100644 --- a/Editor/PlasticSCM/AssetMenu/AssetMenuItems.cs +++ b/Editor/PlasticSCM/AssetMenu/AssetMenuItems.cs @@ -1,8 +1,8 @@ -using UnityEditor; -using UnityEditor.VersionControl; +using UnityEditor.VersionControl; using Codice.CM.Common; using Codice.Client.Common.EventTracking; +using Codice.LogWrapper; using PlasticGui; using PlasticGui.WorkspaceWindow.Items; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; @@ -21,6 +21,8 @@ internal static void Enable( if (mIsEnabled) return; + mLog.Debug("Enable"); + mWkInfo = wkInfo; mAssetStatusCache = assetStatusCache; @@ -37,6 +39,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; RemoveMenuItems(); @@ -63,7 +67,6 @@ internal static void BuildOperations( IMergeViewLauncher mergeViewLauncher, PlasticGui.Gluon.IGluonViewSwitcher gluonViewSwitcher, LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, - EditorWindow parentWindow, bool isGluonMode) { if (!mIsEnabled) @@ -80,7 +83,6 @@ internal static void BuildOperations( mAssetStatusCache, mergeViewLauncher, gluonViewSwitcher, - parentWindow, mAssetSelection, showDownloadPlasticExeWindow, isGluonMode); @@ -304,7 +306,13 @@ static string GetPlasticMenuItemName(PlasticLocalization.Name name) static IAssetStatusCache mAssetStatusCache; static WorkspaceInfo mWkInfo; - const int BASE_MENU_ITEM_PRIORITY = 19; // Puts Plastic SCM right below Create menu +#if UNITY_6000_0_OR_NEWER + // Puts Unity Version Control in a new section, as it precedes the Create menu with the old value + const int BASE_MENU_ITEM_PRIORITY = 71; +#else + // Puts Unity Version Control right below the Create menu + const int BASE_MENU_ITEM_PRIORITY = 19; +#endif // incrementing the "order" param by 11 causes the menu system to add a separator const int PENDING_CHANGES_MENU_ITEM_PRIORITY = BASE_MENU_ITEM_PRIORITY; @@ -316,5 +324,7 @@ static string GetPlasticMenuItemName(PlasticLocalization.Name name) const int HIDDEN_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 26; const int DIFF_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 37; const int HISTORY_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 38; + + static readonly ILog mLog = PlasticApp.GetLogger("AssetMenuItems"); } -} \ No newline at end of file +} diff --git a/Editor/PlasticSCM/AssetMenu/AssetOperations.cs b/Editor/PlasticSCM/AssetMenu/AssetOperations.cs index 17e792d..15ea7c1 100644 --- a/Editor/PlasticSCM/AssetMenu/AssetOperations.cs +++ b/Editor/PlasticSCM/AssetMenu/AssetOperations.cs @@ -51,7 +51,6 @@ internal AssetOperations( IAssetStatusCache assetStatusCache, IMergeViewLauncher mergeViewLauncher, IGluonViewSwitcher gluonViewSwitcher, - EditorWindow parentWindow, IAssetSelection assetSelection, LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, bool isGluonMode) @@ -69,7 +68,6 @@ internal AssetOperations( mAssetSelection = assetSelection; mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow; mIsGluonMode = isGluonMode; - mParentWindow = parentWindow; mGuiMessage = new UnityPlasticGuiMessage(); mProgressControls = new EditorProgressControls(mGuiMessage); @@ -155,7 +153,6 @@ void IAssetMenuOperations.Checkin() selectedPaths, mAssetStatusCache, mIsGluonMode, - mParentWindow, mWorkspaceWindow, mViewHost, mWorkspaceOperationsMonitor, @@ -283,7 +280,7 @@ void IAssetFilesFilterPatternsMenuOperations.AddFilesFilterPatterns( FilterRulesConfirmationData filterRulesConfirmationData = FilterRulesConfirmationDialog.AskForConfirmation( - rules, isAddOperation, isApplicableToAllWorkspaces, mParentWindow); + rules, isAddOperation, isApplicableToAllWorkspaces, null); AddFilesFilterPatternsOperation.Run( mWkInfo, mWorkspaceWindow, type, operation, filterRulesConfirmationData); @@ -324,7 +321,6 @@ static string GetSymbolicName(string selectedPath) readonly bool mIsGluonMode; readonly GuiMessage.IGuiMessage mGuiMessage; readonly EditorProgressControls mProgressControls; - readonly EditorWindow mParentWindow; readonly IAssetSelection mAssetSelection; readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow; } diff --git a/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialog.cs b/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialog.cs index dab59e5..a8e9696 100644 --- a/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialog.cs +++ b/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialog.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; using UnityEditor; @@ -45,7 +44,6 @@ internal static bool CheckinPaths( List paths, IAssetStatusCache assetStatusCache, bool isGluonMode, - EditorWindow parentWindow, IWorkspaceWindow workspaceWindow, ViewHost viewHost, WorkspaceOperationsMonitor workspaceOperationsMonitor, @@ -70,13 +68,12 @@ internal static bool CheckinPaths( mergeViewLauncher, gluonViewSwitcher); - return dialog.RunModal(parentWindow) == ResponseType.Ok; + return dialog.RunModal(null) == ResponseType.Ok; } protected override void OnModalGUI() { - Title(PlasticLocalization.GetString( - PlasticLocalization.Name.CheckinComment)); + Title(PlasticLocalization.GetString(PlasticLocalization.Name.CheckinOnlyComment)); GUI.SetNextControlName(CHECKIN_TEXTAREA_NAME); diff --git a/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialogOperations.cs b/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialogOperations.cs index c636c60..1c9f205 100644 --- a/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialogOperations.cs +++ b/Editor/PlasticSCM/AssetMenu/Dialogs/CheckinDialogOperations.cs @@ -7,6 +7,7 @@ using Codice.Client.Common.Threading; using Codice.Client.GameUI.Checkin; using Codice.CM.Common; +using Codice.CM.Common.Checkin.Partial; using GluonGui; diff --git a/Editor/PlasticSCM/AssetOverlays/Cache/LockStatusCache.cs b/Editor/PlasticSCM/AssetOverlays/Cache/LockStatusCache.cs index e7979c9..890928b 100644 --- a/Editor/PlasticSCM/AssetOverlays/Cache/LockStatusCache.cs +++ b/Editor/PlasticSCM/AssetOverlays/Cache/LockStatusCache.cs @@ -1,18 +1,18 @@ using System; using System.Collections.Generic; -using System.IO; using Codice; using Codice.Client.Commands; -using Codice.Client.Commands.Mount; using Codice.Client.Commands.WkTree; using Codice.Client.Common; using Codice.Client.Common.Locks; using Codice.Client.Common.Threading; using Codice.Client.Common.WkTree; using Codice.CM.Common; +using Codice.CM.Common.Mount; using Codice.Utils; using PlasticGui.WorkspaceWindow; +using PlasticGui.WorkspaceWindow.Items.Locks; namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache { @@ -120,95 +120,6 @@ void AsyncCalculateStatus(CancelToken cancelToken) }); } - static class FillLockCandidates - { - internal static void ForTree( - WorkspaceInfo wkInfo, - Dictionary> lockCandidates) - { - WorkspaceTreeNode rootNode = CmConnection.Get().GetWorkspaceTreeHandler(). - GetWorkspaceTree(wkInfo, wkInfo.ClientPath, true); - - Queue pendingDirectories = new Queue(); - pendingDirectories.Enqueue(new NodeWithPath( - MountPointWithPath.BuildWorkspaceRootMountPoint(rootNode.RepSpec), - rootNode, wkInfo.ClientPath)); - - while (pendingDirectories.Count > 0) - { - NodeWithPath directoryNode = pendingDirectories.Dequeue(); - - ForChildren( - wkInfo.ClientPath, - directoryNode.Mount, - directoryNode.Path, - directoryNode.Node, - pendingDirectories, - lockCandidates); - } - } - - static void ForChildren( - string wkPath, - MountPointWithPath parentMount, - string dirPath, - WorkspaceTreeNode dirNode, - Queue pendingDirectories, - Dictionary> lockCandidates) - { - if (!dirNode.HasChildren) - return; - - foreach (WorkspaceTreeNode child in dirNode.Children) - { - string childPath = Path.Combine(dirPath, child.Name); - - if (CheckWorkspaceTreeNodeStatus.IsDirectory(child)) - { - MountPointWithPath mount = XlinkWorkspaceTreeNode.IsXlinkWkNode(child) ? - new MountPointWithPath( - MountPointId.BuildForXlink( - ((XlinkWorkspaceTreeNode)child).Xlink.GUID, parentMount.Id), - child.RepSpec, - WorkspacePath.CmPathFromWorkspacePath(childPath, wkPath)) : - parentMount; - - pendingDirectories.Enqueue( - new NodeWithPath(mount, child, childPath)); - continue; - } - - if (CheckWorkspaceTreeNodeStatus.IsAdded(child)) - continue; - - List nodes = null; - if (!lockCandidates.TryGetValue(parentMount, out nodes)) - { - nodes = new List(); - lockCandidates.Add(parentMount, nodes); - } - - nodes.Add(child); - } - } - - class NodeWithPath - { - internal readonly MountPointWithPath Mount; - internal readonly WorkspaceTreeNode Node; - internal readonly string Path; - internal NodeWithPath( - MountPointWithPath mount, - WorkspaceTreeNode node, - string path) - { - Mount = mount; - Node = node; - Path = path; - } - } - } - static class BuildStatusByNodeCache { internal static Dictionary ForLocks( diff --git a/Editor/PlasticSCM/AssetOverlays/Cache/RemoteStatusCache.cs b/Editor/PlasticSCM/AssetOverlays/Cache/RemoteStatusCache.cs index 2707c70..d9e1829 100644 --- a/Editor/PlasticSCM/AssetOverlays/Cache/RemoteStatusCache.cs +++ b/Editor/PlasticSCM/AssetOverlays/Cache/RemoteStatusCache.cs @@ -9,6 +9,9 @@ using Codice.Client.GameUI.Update; using Codice.CM.Common; using Codice.CM.Common.Merge; +using Codice.CM.Common.Mount; +using Codice.CM.Common.Partial; +using Codice.CM.Common.Update.Partial; using Codice.Utils; using GluonGui.WorkspaceWindow.Views; @@ -118,7 +121,7 @@ internal static Dictionary ForOutOfDateItems( return result; foreach (OutOfDateItemsByMount diffs in - outOfDateItems.GetOutOfDateItemsByMountList()) + outOfDateItems.GetOutOfDateItemsByMountList(PathHelper.GetPathSorter())) { foreach (Difference diff in diffs.Changed) { diff --git a/Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs b/Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs deleted file mode 100644 index d040de5..0000000 --- a/Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Collections.Generic; - -using Codice.Client.Commands; -using Codice.Client.Commands.WkTree; -using Codice.Client.Common.Locks; -using Codice.Client.Common.WkTree; -using Codice.CM.Common; -using Codice.CM.WorkspaceServer; - -namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache -{ - internal static class SearchLocks - { - internal static Dictionary GetLocksInfo( - WorkspaceInfo wkInfo, - Dictionary> locksCandidates) - { - Dictionary result = - new Dictionary(); - - ServerLocks.ForWorkingBranchOnRepoByItem locksForWorkingBranchOnRepoByItem = - new ServerLocks.ForWorkingBranchOnRepoByItem(); - - foreach (KeyValuePair> each in locksCandidates) - { - FillRepositoryLocks( - wkInfo, each.Key, each.Value, - locksForWorkingBranchOnRepoByItem, result); - } - - return result; - } - - static void FillRepositoryLocks( - WorkspaceInfo wkInfo, - MountPointWithPath mount, - List candidates, - ServerLocks.ForWorkingBranchOnRepoByItem locksForWorkingBranchOnRepoByItem, - Dictionary locks) - { - if (candidates.Count == 0) - return; - - LockRule lockRule = ServerLocks.GetLockRule(mount.RepSpec); - - if (lockRule == null) - return; - - candidates = GetLockableCandidates(candidates, lockRule); - - if (candidates.Count == 0) - return; - - BranchInfo workingBranch = CheckoutBranchSolver.Get(wkInfo). - GetWorkingBranchWithoutBranchExpansionByMount(mount); - - if (workingBranch == null) - return; - - ServerLocks.GetLocksForRepoByItemId( - mount.RepSpec, workingBranch.Id, locksForWorkingBranchOnRepoByItem); - - Dictionary lockByItemCache; - if (!locksForWorkingBranchOnRepoByItem.TryGetLocks( - mount.RepSpec, workingBranch.Id, out lockByItemCache)) - return; - - if (lockByItemCache.Count == 0) - return; - - foreach (WorkspaceTreeNode candidate in candidates) - { - LockInfo serverLock; - if (!lockByItemCache.TryGetValue( - candidate.RevInfo.ItemId, out serverLock)) - continue; - - locks[candidate] = serverLock; - } - } - - static List GetLockableCandidates( - List candidates, - LockRule lockRule) - { - List result = new List(); - - LockedFilesFilter filter = new LockedFilesFilter(lockRule.Rules); - - foreach (WorkspaceTreeNode candidate in candidates) - { - string cmPath = WorkspaceNodeOperations.GetCmPath(candidate); - - if (cmPath == null) - { - //The node could not be on the head tree (like copied items) so when we - //cannot calculate the path we assume that it's lockable. - result.Add(candidate); - continue; - } - - if (filter.IsLockable(cmPath)) - result.Add(candidate); - } - - return result; - } - } -} diff --git a/Editor/PlasticSCM/AssetOverlays/DrawAssetOverlay.cs b/Editor/PlasticSCM/AssetOverlays/DrawAssetOverlay.cs index d25faac..84c35f1 100644 --- a/Editor/PlasticSCM/AssetOverlays/DrawAssetOverlay.cs +++ b/Editor/PlasticSCM/AssetOverlays/DrawAssetOverlay.cs @@ -3,6 +3,7 @@ using UnityEditor; using UnityEngine; +using Codice.LogWrapper; using PlasticGui; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; using Unity.PlasticSCM.Editor.AssetUtils; @@ -19,6 +20,8 @@ internal static void Enable( if (mIsEnabled) return; + mLog.Debug("Enable"); + mWkPath = wkPath; mAssetStatusCache = assetStatusCache; @@ -33,6 +36,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; EditorApplication.projectWindowItemOnGUI -= OnProjectWindowItemGUI; @@ -243,6 +248,8 @@ static Rect GetTooltipRect( static string mWkPath; const float OVERLAY_ICON_OFFSET = 20f; + + static readonly ILog mLog = PlasticApp.GetLogger("DrawAssetOverlay"); } } diff --git a/Editor/PlasticSCM/AssetsUtils/Processor/AssetModificationProcessor.cs b/Editor/PlasticSCM/AssetsUtils/Processor/AssetModificationProcessor.cs index 27597d8..6d5b1a8 100644 --- a/Editor/PlasticSCM/AssetsUtils/Processor/AssetModificationProcessor.cs +++ b/Editor/PlasticSCM/AssetsUtils/Processor/AssetModificationProcessor.cs @@ -1,5 +1,6 @@ using UnityEditor; +using Codice.LogWrapper; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; using Unity.PlasticSCM.Editor.UI; using AssetOverlays = Unity.PlasticSCM.Editor.AssetsOverlays; @@ -26,6 +27,8 @@ internal static void Enable( string wkPath, IAssetStatusCache assetStatusCache) { + mLog.Debug("Enable"); + mWkPath = wkPath; mAssetStatusCache = assetStatusCache; @@ -34,6 +37,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; mWkPath = null; @@ -95,5 +100,7 @@ static bool IsOpenForEdit(string assetPath, out string message) static IAssetStatusCache mAssetStatusCache; static string mWkPath; + + static readonly ILog mLog = PlasticApp.GetLogger("AssetModificationProcessor"); } } diff --git a/Editor/PlasticSCM/AssetsUtils/Processor/AssetPostprocessor.cs b/Editor/PlasticSCM/AssetsUtils/Processor/AssetPostprocessor.cs index 37b6449..68aee38 100644 --- a/Editor/PlasticSCM/AssetsUtils/Processor/AssetPostprocessor.cs +++ b/Editor/PlasticSCM/AssetsUtils/Processor/AssetPostprocessor.cs @@ -1,6 +1,9 @@ using System.Collections.Generic; +using System.Linq; +using Codice.Client.Common; using Codice.Client.Common.FsNodeReaders.Watcher; +using Codice.LogWrapper; namespace Unity.PlasticSCM.Editor.AssetUtils.Processor { @@ -22,6 +25,8 @@ internal static void Enable( string wkPath, PlasticAssetsProcessor plasticAssetsProcessor) { + mLog.Debug("Enable"); + mWkPath = wkPath; mPlasticAssetsProcessor = plasticAssetsProcessor; @@ -30,6 +35,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; mWkPath = null; @@ -58,16 +65,15 @@ static void OnPostprocessAllAssets( RepaintInspector.All(); } - // We need to ensure that the FSWatcher is enabled before processing Plastic operations + // We need to ensure that the MonoFSWatcher is enabled before processing Plastic operations // It fixes the following scenario: // 1. Close PlasticSCM window // 2. Create an asset, it appears with the added overlay // 3. Open PlasticSCM window, the asset should appear as added instead of deleted locally - MonoFileSystemWatcher.IsEnabled = true; + PlasticApp.EnableMonoFsWatcherIfNeeded(); mPlasticAssetsProcessor.MoveOnSourceControl( - GetPathsToMoveContainedOnWorkspace( - mWkPath, movedAssets, movedFromAssetPaths)); + ExtractPathsToMove(movedAssets, movedFromAssetPaths)); mPlasticAssetsProcessor.DeleteFromSourceControl( GetPathsContainedOnWorkspace(mWkPath, deletedAssets)); @@ -75,6 +81,8 @@ static void OnPostprocessAllAssets( mPlasticAssetsProcessor.AddToSourceControl( GetPathsContainedOnWorkspace(mWkPath, importedAssets)); + // We expect modified assets to go through AssetModificationProcessor.OnWillSaveAssets before getting here. + // To fix: there is a known limitation of renamed prefabs not triggering OnWillSaveAssets method. if (AssetModificationProcessor.ModifiedAssets == null) return; @@ -85,13 +93,36 @@ static void OnPostprocessAllAssets( AssetModificationProcessor.ModifiedAssets = null; } + static List ExtractPathsToMove(string[] movedAssets, string[] movedFromAssetPaths) + { + List proposedPathsToMove = GetPathsToMoveContainedOnWorkspace(mWkPath, movedAssets, movedFromAssetPaths); + + // Unity doesn't provide the moved paths ordered. + // We want to enqueue the batched movements in hierarchical order to avoid plastic considering assets as locally moved. + // It also avoid unnecessary children movements when their parents are also moved. + proposedPathsToMove.Sort((x, y) => PathHelper.GetPathMatchSorter().Compare(x.SrcPath, y.SrcPath)); + + List pathsToMove = new List(); + + foreach (PathToMove proposedPathToMove in proposedPathsToMove) + { + if (pathsToMove.Any(pathToMove => PathHelper.IsContainedOn(proposedPathToMove.SrcPath, pathToMove.SrcPath))) + { + continue; + } + + pathsToMove.Add(proposedPathToMove); + } + + return pathsToMove; + } + static List GetPathsToMoveContainedOnWorkspace( string wkPath, string[] movedAssets, string[] movedFromAssetPaths) { - List result = new List( - movedAssets.Length); + List result = new List(movedAssets.Length); for (int i = 0; i < movedAssets.Length; i++) { @@ -139,5 +170,7 @@ static List GetPathsContainedOnWorkspace( static PlasticAssetsProcessor mPlasticAssetsProcessor; static string mWkPath; + + static readonly ILog mLog = PlasticApp.GetLogger("AssetPostprocessor"); } } diff --git a/Editor/PlasticSCM/AssetsUtils/Processor/PlasticAssetsProcessor.cs b/Editor/PlasticSCM/AssetsUtils/Processor/PlasticAssetsProcessor.cs index 8dee291..55e59d2 100644 --- a/Editor/PlasticSCM/AssetsUtils/Processor/PlasticAssetsProcessor.cs +++ b/Editor/PlasticSCM/AssetsUtils/Processor/PlasticAssetsProcessor.cs @@ -102,6 +102,6 @@ bool IsDisableBecauseExceptionHappened(DateTime now) DateTime mLastExceptionDateTime = DateTime.MinValue; WorkspaceOperationsMonitor mWorkspaceOperationsMonitor; - static readonly ILog mLog = LogManager.GetLogger("PlasticAssetsProcessor"); + static readonly ILog mLog = PlasticApp.GetLogger("PlasticAssetsProcessor"); } } \ No newline at end of file diff --git a/Editor/PlasticSCM/AssetsUtils/Processor/WorkspaceOperationsMonitor.cs b/Editor/PlasticSCM/AssetsUtils/Processor/WorkspaceOperationsMonitor.cs index a25c683..a7060ae 100644 --- a/Editor/PlasticSCM/AssetsUtils/Processor/WorkspaceOperationsMonitor.cs +++ b/Editor/PlasticSCM/AssetsUtils/Processor/WorkspaceOperationsMonitor.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; using System.Threading; @@ -9,6 +10,7 @@ using Codice.Client.Commands; using Codice.Client.Commands.WkTree; using Codice.LogWrapper; +using Codice.Utils; using GluonGui; using PlasticGui; using PlasticGui.WorkspaceWindow; @@ -72,16 +74,21 @@ internal void UnRegisterViews() internal void Start() { - mIsRunning = true; + mLog.Debug("Start"); + + mCancelToken = new CancelToken(); mIsEnabled = true; Thread thread = new Thread(TaskLoopThread); thread.IsBackground = true; + thread.Name = "Plastic SCM Workspace Operations Monitor thread"; thread.Start(); } internal void Stop() { + mLog.Debug("Stop"); + SetAsFinished(); } @@ -145,7 +152,7 @@ void TaskLoopThread() { try { - if (!mIsRunning) + if (mCancelToken.IsCancelled()) break; if (!mIsEnabled) @@ -163,11 +170,15 @@ void TaskLoopThread() mAssetsProcessorPathsToCheckout, mAssetsProcessorPathsToMove, mPathsToCheckout, + mCancelToken, mLock, mDisableAssetsProcessor, out hasAssetProcessorOpsPending, out hasCheckoutOpsPending); + if (mCancelToken.IsCancelled()) + break; + if (hasAssetProcessorOpsPending || hasCheckoutOpsPending) continue; @@ -191,11 +202,17 @@ void ProcessOperations( List assetsProcessorPathsToCheckout, List assetsProcessorPathsToMove, List pathsToCheckout, + CancelToken cancelToken, object lockObj, IDisableAssetsProcessor disableAssetsProcessor, out bool hasAssetProcessorOpsPending, out bool hasCheckoutOpsPending) { + hasAssetProcessorOpsPending = false; + hasCheckoutOpsPending = false; + + mLog.Debug("Starting process operations..."); + bool hasAssetProcessorOpsProcessed = ProcessAssetProcessorOperations( plasticApi, @@ -203,15 +220,26 @@ void ProcessOperations( assetsProcessorPathsToDelete, assetsProcessorPathsToCheckout, assetsProcessorPathsToMove, + cancelToken, lockObj, disableAssetsProcessor); + if (cancelToken.IsCancelled()) + return; + bool hasCheckoutOpsProcessed = ProcessCheckoutOperation( plasticApi, pathsToCheckout, + cancelToken, lockObj); + mLog.Debug("ProcessOperations - Processed paths ? " + + (hasAssetProcessorOpsProcessed || hasCheckoutOpsProcessed)); + + if (cancelToken.IsCancelled()) + return; + HasPendingOperationsToProcess( assetsProcessorPathsToAdd, assetsProcessorPathsToDelete, @@ -234,8 +262,13 @@ void ProcessOperations( !isAfterCheckoutOpNeeded) return; + if (cancelToken.IsCancelled()) + return; + EditorDispatcher.Dispatch(() => { + mLog.Debug("AfterProcessOperations"); + RefreshAsset.VersionControlCache(); if (isAfterAssetProcessorOpNeeded) @@ -243,7 +276,7 @@ void ProcessOperations( if (isAfterCheckoutOpNeeded) AfterCheckoutOperation(); - }); + }); } void AfterAssetProcessorOperation() @@ -277,15 +310,17 @@ void AfterCheckoutOperation() void SetAsFinished() { - if (!mIsRunning) + if (mCancelToken.IsCancelled()) return; - mIsRunning = false; + mCancelToken.Cancel(); mResetEvent.Set(); } void SleepUntilNextWorkload() { + mLog.Debug("SleepUntilNextWorkload"); + mResetEvent.Reset(); mResetEvent.WaitOne(); } @@ -296,6 +331,7 @@ static bool ProcessAssetProcessorOperations( List assetsProcessorPathsToDelete, List assetsProcessorPathsToCheckout, List assetsProcessorPathsToMove, + CancelToken cancelToken, object lockObj, IDisableAssetsProcessor disableAssetsProcessor) { @@ -305,24 +341,37 @@ static bool ProcessAssetProcessorOperations( { hasProcessedPaths = AssetsProcessorOperations. AddIfNotControlled( - plasticApi, ExtractPathsToProcess( - assetsProcessorPathsToAdd, lockObj), - FilterManager.Get().GetIgnoredFilter()); + plasticApi, + ExtractPathsToProcess(assetsProcessorPathsToAdd, lockObj), + FilterManager.Get().GetIgnoredFilter(), + cancelToken); + + if (cancelToken.IsCancelled()) + return false; hasProcessedPaths |= AssetsProcessorOperations. DeleteIfControlled( - plasticApi, ExtractPathsToProcess( - assetsProcessorPathsToDelete, lockObj)); + plasticApi, + ExtractPathsToProcess(assetsProcessorPathsToDelete, lockObj), + cancelToken); + + if (cancelToken.IsCancelled()) + return false; hasProcessedPaths |= AssetsProcessorOperations. CheckoutIfControlledAndChanged( - plasticApi, ExtractPathsToProcess( - assetsProcessorPathsToCheckout, lockObj)); + plasticApi, + ExtractPathsToProcess(assetsProcessorPathsToCheckout, lockObj), + cancelToken); + + if (cancelToken.IsCancelled()) + return false; hasProcessedPaths |= AssetsProcessorOperations. MoveIfControlled( - plasticApi, ExtractPathsToMoveToProcess( - assetsProcessorPathsToMove, lockObj)); + plasticApi, + ExtractPathsToMoveToProcess(assetsProcessorPathsToMove, lockObj).AsReadOnly(), + cancelToken); } catch (Exception ex) { @@ -337,6 +386,7 @@ static bool ProcessAssetProcessorOperations( static bool ProcessCheckoutOperation( IPlasticAPI plasticApi, List pathsToProcess, + CancelToken cancelToken, object lockObj) { List paths = ExtractPathsToProcess( @@ -346,6 +396,9 @@ static bool ProcessCheckoutOperation( foreach (string path in paths) { + if (cancelToken.IsCancelled()) + return false; + WorkspaceTreeNode node = plasticApi.GetWorkspaceTreeNode(path); @@ -354,6 +407,9 @@ static bool ProcessCheckoutOperation( result.Add(path); } + if (cancelToken.IsCancelled()) + return false; + bool hasPathsToProcess = result.Count > 0; if (hasPathsToProcess) @@ -529,17 +585,21 @@ static void LogException(Exception ex) Environment.NewLine, ex.StackTrace); } - static class AssetsProcessorOperations + internal static class AssetsProcessorOperations { internal static bool AddIfNotControlled( IPlasticAPI plasticApi, List paths, - IgnoredFilesFilter ignoredFilter) + IgnoredFilesFilter ignoredFilter, + CancelToken cancelToken) { List result = new List(); foreach (string path in paths) { + if (cancelToken.IsCancelled()) + return false; + string metaPath = MetaPath.GetMetaPath(path); if (plasticApi.GetWorkspaceFromPath(path) == null) @@ -555,6 +615,9 @@ internal static bool AddIfNotControlled( result.Add(metaPath); } + if (cancelToken.IsCancelled()) + return false; + bool hasPathsToProcess = result.Count > 0; if (hasPathsToProcess) @@ -573,12 +636,16 @@ internal static bool AddIfNotControlled( internal static bool DeleteIfControlled( IPlasticAPI plasticApi, - List paths) + List paths, + CancelToken cancelToken) { List processedPaths = new List(paths.Count); foreach (string path in paths) { + if (cancelToken.IsCancelled()) + return false; + string metaPath = MetaPath.GetMetaPath(path); if (plasticApi.GetWorkspaceTreeNode(path) != null) @@ -592,6 +659,9 @@ internal static bool DeleteIfControlled( } } + if (cancelToken.IsCancelled()) + return false; + plasticApi.DeleteControlled( processedPaths.ToArray(), DeleteModifiers.None, null); @@ -602,14 +672,15 @@ internal static bool DeleteIfControlled( internal static bool MoveIfControlled( IPlasticAPI plasticApi, - List paths) + ReadOnlyCollection paths, + CancelToken cancelToken) { List processedPaths = new List(paths.Count); foreach (AssetPostprocessor.PathToMove pathToMove in paths) { - string srcMetaPath = MetaPath.GetMetaPath(pathToMove.SrcPath); - string dstMetaPath = MetaPath.GetMetaPath(pathToMove.DstPath); + if (cancelToken.IsCancelled()) + return false; if (plasticApi.GetWorkspaceTreeNode(pathToMove.SrcPath) != null) { @@ -621,6 +692,12 @@ internal static bool MoveIfControlled( pathToMove.SrcPath, pathToMove.DstPath)); } + if (cancelToken.IsCancelled()) + return false; + + string srcMetaPath = MetaPath.GetMetaPath(pathToMove.SrcPath); + string dstMetaPath = MetaPath.GetMetaPath(pathToMove.DstPath); + if (plasticApi.GetWorkspaceTreeNode(srcMetaPath) != null) { plasticApi.Move( @@ -639,12 +716,16 @@ internal static bool MoveIfControlled( internal static bool CheckoutIfControlledAndChanged( IPlasticAPI plasticApi, - List paths) + List paths, + CancelToken cancelToken) { List result = new List(); foreach (string path in paths) { + if (cancelToken.IsCancelled()) + return false; + string metaPath = MetaPath.GetMetaPath(path); WorkspaceTreeNode node = @@ -663,6 +744,9 @@ internal static bool CheckoutIfControlledAndChanged( result.Add(metaPath); } + if (cancelToken.IsCancelled()) + return false; + bool hasPathsToProcess = result.Count > 0; if (hasPathsToProcess) @@ -687,28 +771,27 @@ static AddOptions GetDefaultAddOptions() } object mLock = new object(); - volatile bool mIsRunning; - volatile bool mIsEnabled; - volatile ManualResetEvent mResetEvent = new ManualResetEvent(false); List mAssetsProcessorPathsToAdd = new List(); List mAssetsProcessorPathsToDelete = new List(); List mAssetsProcessorPathsToCheckout = new List(); - List mAssetsProcessorPathsToMove = - new List(); + List mAssetsProcessorPathsToMove = new List(); List mPathsToCheckout = new List(); PendingChangesTab mPendingChangesTab; IIncomingChangesTab mIncomingChangesTab; - - NewIncomingChangesUpdater mNewIncomingChangesUpdater; - ViewHost mViewHost; IWorkspaceWindow mWorkspaceWindow; + ViewHost mViewHost; + NewIncomingChangesUpdater mNewIncomingChangesUpdater; + + volatile bool mIsEnabled; + volatile ManualResetEvent mResetEvent = new ManualResetEvent(false); + CancelToken mCancelToken = new CancelToken(); readonly bool mIsGluonMode = false; readonly IDisableAssetsProcessor mDisableAssetsProcessor; readonly IPlasticAPI mPlasticAPI; - static readonly ILog mLog = LogManager.GetLogger("WorkspaceOperationsMonitor"); + static readonly ILog mLog = PlasticApp.GetLogger("WorkspaceOperationsMonitor"); } } diff --git a/Editor/PlasticSCM/AssetsUtils/RefreshAsset.cs b/Editor/PlasticSCM/AssetsUtils/RefreshAsset.cs index 60d2e9d..8965823 100644 --- a/Editor/PlasticSCM/AssetsUtils/RefreshAsset.cs +++ b/Editor/PlasticSCM/AssetsUtils/RefreshAsset.cs @@ -1,6 +1,8 @@ using UnityEditor.PackageManager; +using UnityEditor; -using Unity.PlasticSCM.Editor.AssetUtils.Processor; +using AssetPostprocessor = Unity.PlasticSCM.Editor.AssetUtils.Processor.AssetPostprocessor; +using Unity.PlasticSCM.Editor.UI; namespace Unity.PlasticSCM.Editor.AssetUtils { @@ -8,43 +10,52 @@ internal static class RefreshAsset { internal static void BeforeLongAssetOperation() { - UnityEditor.AssetDatabase.DisallowAutoRefresh(); + AssetDatabase.DisallowAutoRefresh(); } internal static void AfterLongAssetOperation() { - UnityEditor.AssetDatabase.AllowAutoRefresh(); + AssetDatabase.AllowAutoRefresh(); - UnityAssetDatabase(); - - // Client is an API to interact with package manager - // Client.Resolve() will resolve any pending packages added or removed from the project. - // https://docs.unity3d.com/ScriptReference/PackageManager.Client.html + // Client.Resolve() will resolve any pending packages added or removed from the project + // VCS-1004718 - This is important so the domain gets reloaded first if needed Client.Resolve(); + + mCooldownRefreshAssetsAction.Ping(); } internal static void UnityAssetDatabase() { - UnityEditor.AssetDatabase.Refresh( - UnityEditor.ImportAssetOptions.Default); - - UnityEditor.VersionControl.Provider.ClearCache(); + RefreshUnityAssetDatabase(); + } - if (PlasticPlugin.AssetStatusCache != null) - PlasticPlugin.AssetStatusCache.Clear(); + internal static void VersionControlCache() + { + ClearVersionControlCaches(); - AssetPostprocessor.SetIsRepaintNeededAfterAssetDatabaseRefresh(); + ProjectWindow.Repaint(); + RepaintInspector.All(); } - internal static void VersionControlCache() + static void ClearVersionControlCaches() { UnityEditor.VersionControl.Provider.ClearCache(); if (PlasticPlugin.AssetStatusCache != null) PlasticPlugin.AssetStatusCache.Clear(); + } - ProjectWindow.Repaint(); - RepaintInspector.All(); + static void RefreshUnityAssetDatabase() + { + AssetDatabase.Refresh(ImportAssetOptions.Default); + + ClearVersionControlCaches(); + + AssetPostprocessor.SetIsRepaintNeededAfterAssetDatabaseRefresh(); } + + static CooldownWindowDelayer mCooldownRefreshAssetsAction = new CooldownWindowDelayer( + RefreshUnityAssetDatabase, + UnityConstants.REFRESH_ASSET_DATABASE_DELAYED_INTERVAL); } -} \ No newline at end of file +} diff --git a/Editor/PlasticSCM/AssetsUtils/SaveAssets.cs b/Editor/PlasticSCM/AssetsUtils/SaveAssets.cs index c3aee37..b74f4be 100644 --- a/Editor/PlasticSCM/AssetsUtils/SaveAssets.cs +++ b/Editor/PlasticSCM/AssetsUtils/SaveAssets.cs @@ -133,6 +133,9 @@ static bool Contains( List paths, Scene scene) { + if (string.IsNullOrEmpty(scene.path)) + return false; + foreach (string path in paths) { if (PathHelper.IsSamePath( diff --git a/Editor/PlasticSCM/CollabMigration/MigrateCollabProject.cs b/Editor/PlasticSCM/CollabMigration/MigrateCollabProject.cs index 644e03b..943c756 100644 --- a/Editor/PlasticSCM/CollabMigration/MigrateCollabProject.cs +++ b/Editor/PlasticSCM/CollabMigration/MigrateCollabProject.cs @@ -258,6 +258,6 @@ static string GetCollabSnapshotFile( const int MIGRATED_NOT_CALCULATED = 0; const int MIGRATED_NOTHING_TO_DO = 1; - static readonly ILog mLog = LogManager.GetLogger("MigrateCollabProject"); + static readonly ILog mLog = PlasticApp.GetLogger("MigrateCollabProject"); } } \ No newline at end of file diff --git a/Editor/PlasticSCM/CollabMigration/MigrationDialog.cs b/Editor/PlasticSCM/CollabMigration/MigrationDialog.cs index da92ba2..1a027a1 100644 --- a/Editor/PlasticSCM/CollabMigration/MigrationDialog.cs +++ b/Editor/PlasticSCM/CollabMigration/MigrationDialog.cs @@ -412,6 +412,6 @@ static MigrationDialog Create( string mUnityAccessToken; WorkspaceInfo mWorkspaceInfo; - static readonly ILog mLog = LogManager.GetLogger("MigrationDialog"); + static readonly ILog mLog = PlasticApp.GetLogger("MigrationDialog"); } } diff --git a/Editor/PlasticSCM/CollabMigration/MigrationProgressRender.cs b/Editor/PlasticSCM/CollabMigration/MigrationProgressRender.cs index d3ea801..1c1dd12 100644 --- a/Editor/PlasticSCM/CollabMigration/MigrationProgressRender.cs +++ b/Editor/PlasticSCM/CollabMigration/MigrationProgressRender.cs @@ -68,6 +68,6 @@ internal static string GetProgressString( return details; } - static ILog mLog = LogManager.GetLogger("MigrationProgressRender"); + static ILog mLog = PlasticApp.GetLogger("MigrationProgressRender"); } } diff --git a/Editor/PlasticSCM/Configuration/AutoConfig.cs b/Editor/PlasticSCM/Configuration/AutoConfig.cs index 9185a9c..ec79830 100644 --- a/Editor/PlasticSCM/Configuration/AutoConfig.cs +++ b/Editor/PlasticSCM/Configuration/AutoConfig.cs @@ -11,7 +11,7 @@ internal static class AutoConfig internal static TokenExchangeResponse PlasticCredentials( string unityAccessToken, string serverName, - string projectPath) + string wkPath) { SetupUnityEditionToken.CreateCloudEditionTokenIfNeeded(); @@ -19,7 +19,7 @@ internal static TokenExchangeResponse PlasticCredentials( if (!isClientConfigConfigured) { ConfigureClientConf.FromUnityAccessToken( - unityAccessToken, serverName, projectPath); + unityAccessToken, serverName, wkPath); } TokenExchangeResponse tokenExchangeResponse = WebRestApiClient. @@ -30,8 +30,7 @@ internal static TokenExchangeResponse PlasticCredentials( CloudEditionWelcomeWindow.JoinCloudServer( serverName, - tokenExchangeResponse.User, - tokenExchangeResponse.AccessToken); + tokenExchangeResponse.User); if (!isClientConfigConfigured) return tokenExchangeResponse; @@ -48,7 +47,7 @@ static class ConfigureClientConf internal static void FromUnityAccessToken( string unityAccessToken, string serverName, - string projectPath) + string wkPath) { CredentialsResponse response = WebRestApiClient. PlasticScm.GetCredentials(unityAccessToken); @@ -65,14 +64,14 @@ internal static void FromUnityAccessToken( } ClientConfigData configData = BuildClientConfigData( - serverName, projectPath, response); + serverName, wkPath, response); ClientConfig.Get().Save(configData); } static ClientConfigData BuildClientConfigData( string serverName, - string projectPath, + string wkPath, CredentialsResponse response) { SEIDWorkingMode workingMode = GetWorkingMode(response.Type); @@ -80,7 +79,7 @@ static ClientConfigData BuildClientConfigData( ClientConfigData configData = new ClientConfigData(); configData.WorkspaceServer = serverName; - configData.CurrentWorkspace = projectPath; + configData.CurrentWorkspace = wkPath; configData.WorkingMode = workingMode.ToString(); configData.SecurityConfig = UserInfo.GetSecurityConfigStr( workingMode, diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/AutoLogin.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/AutoLogin.cs index 3ecea47..a304622 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/AutoLogin.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/AutoLogin.cs @@ -7,6 +7,7 @@ using Codice.Client.Common.Threading; using Codice.LogWrapper; using PlasticGui.Configuration.OAuth; +using PlasticGui.WebApi.Responses; using Unity.PlasticSCM.Editor.UI; using Unity.PlasticSCM.Editor.UI.Progress; using Unity.PlasticSCM.Editor.WebApi; @@ -55,8 +56,6 @@ void OAuthSignIn.INotify.SuccessForConfigure( string userName, string accessToken) { - mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ResponseSuccess; - ChooseOrganization(organizations); } void OAuthSignIn.INotify.SuccessForSSO(string organization) @@ -69,6 +68,8 @@ void OAuthSignIn.INotify.SuccessForProfile(string email) void OAuthSignIn.INotify.SuccessForHomeView(string userName) { + mPlasticWindow.GetWelcomeView().autoLoginState = AutoLogin.State.ResponseSuccess; + ChooseOrganization(userName); } void OAuthSignIn.INotify.SuccessForCredentials( @@ -150,10 +151,10 @@ void ExchangeTokensAndJoinOrganization(string unityAccessToken) void GetOrganizationList() { OAuthSignIn.GetOrganizationsFromAccessToken( - string.Empty, - CloudProjectSettings.userName, + SsoProvider.UNITY_URL_ACTION, + UserName, AccessToken, - OAuthSignIn.Mode.Configure, + OAuthSignIn.Mode.HomeView, new ProgressControlsForDialogs(), this, PlasticGui.Plastic.WebRestAPI @@ -161,7 +162,7 @@ void GetOrganizationList() } void ChooseOrganization( - List organizations) + string userName) { mPlasticWindow = GetPlasticWindow(); @@ -170,13 +171,9 @@ void ChooseOrganization( mPlasticWindow.CmConnectionForTesting, null, true); mCloudEditionWelcomeWindow = CloudEditionWelcomeWindow.GetWelcomeWindow(); - mCloudEditionWelcomeWindow.FillUserAndToken(UserName, AccessToken); - if (organizations.Count == 1) - { - mCloudEditionWelcomeWindow.JoinOrganizationAndWelcomePage(organizations[0]); - return; - } - mCloudEditionWelcomeWindow.ShowOrganizationPanelFromAutoLogin(organizations); + mCloudEditionWelcomeWindow.ShowOrganizationPanelFromAutoLogin(); + mCloudEditionWelcomeWindow.Focus(); + mCloudEditionWelcomeWindow.FillUser(userName); } static PlasticWindow GetPlasticWindow() @@ -193,7 +190,7 @@ static PlasticWindow GetPlasticWindow() PlasticWindow mPlasticWindow; CloudEditionWelcomeWindow mCloudEditionWelcomeWindow; - static readonly ILog mLog = LogManager.GetLogger("TokensExchange"); + static readonly ILog mLog = PlasticApp.GetLogger("TokensExchange"); } } \ No newline at end of file diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/CloudEditionWelcomeWindow.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/CloudEditionWelcomeWindow.cs index e25faa0..05534b3 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/CloudEditionWelcomeWindow.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/CloudEditionWelcomeWindow.cs @@ -18,7 +18,7 @@ namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome { internal interface IWelcomeWindowNotify { - void SuccessForConfigure(List organizations); + void SuccessForHomeView(string userName); void Back(); } @@ -54,8 +54,7 @@ internal static CloudEditionWelcomeWindow GetWelcomeWindow() internal static void JoinCloudServer( string cloudServer, - string username, - string accessToken) + string username) { SaveCloudServer.ToPlasticGuiConfig(cloudServer); SaveCloudServer.ToPlasticGuiConfigFile( @@ -66,21 +65,20 @@ internal static void JoinCloudServer( KnownServers.ServersFromCloud.InitializeForWindows( PlasticGuiConfig.Get().Configuration.DefaultCloudServer); - CloudEditionWelcome.WriteToTokensConf( - cloudServer, username, accessToken); - SetupUnityEditionToken.CreateCloudEditionTokenIfNeeded(); + ClientConfigData clientConfigData = ConfigurationChecker.GetClientConfigData(); + if (sAutoLogin) { - ClientConfigData clientConfigData = ConfigurationChecker.GetClientConfigData(); clientConfigData.WorkspaceServer = cloudServer; clientConfigData.WorkingMode = SEIDWorkingMode.SSOWorkingMode.ToString(); clientConfigData.SecurityConfig = username; - ClientConfig.Get().Save(clientConfigData); GetWindow().GetWelcomeView().autoLoginState = AutoLogin.State.OrganizationChoosed; } + + ClientConfig.Get().Save(clientConfigData); } internal static string GetPlasticConfigFileToSaveOrganization() @@ -113,11 +111,7 @@ internal void CancelJoinOrganization() internal void JoinOrganizationAndWelcomePage(string organization) { - JoinCloudServer(organization, - mUserName, - mAccessToken); - - GetWelcomePage.Run(sRestApi, organization); + JoinCloudServer(organization, mUserName); } internal void ReplaceRootPanel(VisualElement panel) @@ -126,33 +120,24 @@ internal void ReplaceRootPanel(VisualElement panel) rootVisualElement.Add(panel); } - internal void ShowOrganizationPanel( - string title, - List organizations) + internal void ShowOrganizationPanel(string title) { mOrganizationPanel = new OrganizationPanel( this, sRestApi, - title, - organizations); + title); ReplaceRootPanel(mOrganizationPanel); } - internal void FillUserAndToken( - string userName, - string accessToken) + internal void FillUser(string userName) { mUserName = userName; - mAccessToken = accessToken; } - internal void ShowOrganizationPanelFromAutoLogin( - List organizations) + internal void ShowOrganizationPanelFromAutoLogin() { - ShowOrganizationPanel( - GetWindowTitle(), - organizations); + ShowOrganizationPanel(GetWindowTitle()); } internal string GetWindowTitle() @@ -171,14 +156,7 @@ void OAuthSignIn.INotify.SuccessForConfigure( string userName, string accessToken) { - ShowOrganizationPanel( - GetWindowTitle(), - organizations); - - Focus(); - - mUserName = userName; - mAccessToken = accessToken; + // empty implementation } void OAuthSignIn.INotify.SuccessForSSO(string organization) @@ -191,9 +169,13 @@ void OAuthSignIn.INotify.SuccessForProfile(string email) // empty implementation } - void OAuthSignIn.INotify.SuccessForHomeView(string homeView) + void OAuthSignIn.INotify.SuccessForHomeView(string userName) { - // empty implementation + ShowOrganizationPanel(GetWindowTitle()); + + Focus(); + + mUserName = userName; } void OAuthSignIn.INotify.SuccessForCredentials( @@ -208,12 +190,15 @@ void OAuthSignIn.INotify.Cancel(string errorMessage) Focus(); } - void IWelcomeWindowNotify.SuccessForConfigure( - List organizations) + void IWelcomeWindowNotify.SuccessForHomeView(string userName) { - ShowOrganizationPanel( - GetWindowTitle(), - organizations); + GetWindow().InitializePlastic(); + + ShowOrganizationPanel(GetWindowTitle()); + + Focus(); + + mUserName = userName; } void IWelcomeWindowNotify.Back() @@ -262,7 +247,6 @@ void BuildComponents() mSignInPanel.SignInWithUnityIdButtonAutoLogin(); } - string mAccessToken; string mUserName; OrganizationPanel mOrganizationPanel; diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/OrganizationPanel.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/OrganizationPanel.cs index 25198cb..f93c091 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/OrganizationPanel.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/OrganizationPanel.cs @@ -19,17 +19,18 @@ internal class OrganizationPanel : VisualElement internal OrganizationPanel( CloudEditionWelcomeWindow parentWindow, IPlasticWebRestApi restApi, - string title, - List organizations) + string title) { mParentWindow = parentWindow; mRestApi = restApi; InitializeLayoutAndStyles(); - BuildComponents(title, organizations); + BuildComponents(title); EditorWindowFocus.OnApplicationActivated += OnEditorActivated; + + OnEditorActivated(); } internal void Dispose() @@ -141,7 +142,7 @@ void OpenUnityDashboardButton_clicked() Application.OpenURL(UnityUrl.UnityDashboard.Plastic.Get()); } - void BuildComponents(string title, List organizations) + void BuildComponents(string title) { mParentWindow.titleContent = new UnityEngine.GUIContent(title); @@ -149,8 +150,6 @@ void BuildComponents(string title, List organizations) mProgressContainer = this.Q("progressContainer"); mProgressContainer.Add((VisualElement)mProgressControls); - - ProcessOrganizations(organizations); } void BuildSingleOrganizationSection(string organizationName) @@ -217,7 +216,7 @@ void BuildNoOrganizationSection() } string mOrganizationToJoin = ""; - bool mReloadOrganizationsNeeded; + bool mReloadOrganizationsNeeded = true; Button mJoinSingleOrganizationButton; Button mJoinMultipleOrganizationsButton; diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInPanel.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInPanel.cs index 5477627..9f1e816 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInPanel.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInPanel.cs @@ -5,6 +5,7 @@ using Codice.Client.Common; using Codice.Client.Common.OAuth; +using Codice.CM.Common; using PlasticGui; using PlasticGui.WebApi; using Unity.PlasticSCM.Editor.UI; @@ -70,9 +71,13 @@ internal void SignInWithUnityIdButton_Clicked() mParentWindow.ReplaceRootPanel(mWaitingSignInPanel); Guid state = Guid.NewGuid(); - mWaitingSignInPanel.OAuthSignInForConfigure( - GetCloudSsoProviders.BuildAuthInfoForUnityId(string.Empty, state).SignInUrl, + GetOauthProviders.AuthInfo provider = + GetCloudSsoProviders.BuildAuthInfoForUnityId(string.Empty, state); + mWaitingSignInPanel.OAuthSignIn( + SEIDWorkingMode.SSOWorkingMode, state, + provider.SignInUrl, + provider.ProviderName, new GetCloudSsoToken(mRestApi)); } diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInWithEmailPanel.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInWithEmailPanel.cs index 921b45c..72e0df8 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInWithEmailPanel.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/SignInWithEmailPanel.cs @@ -42,8 +42,7 @@ void Login.INotify.SuccessForConfigure( string userName, string password) { - mNotify.SuccessForConfigure( - organizations); + // Do nothing } void Login.INotify.SuccessForSSO( @@ -65,7 +64,7 @@ void Login.INotify.SuccessForCredentials(string userName, string password) void Login.INotify.SuccessForHomeView(string userName) { - // Do nothing + mNotify.SuccessForHomeView(userName); } void Login.INotify.ValidationFailed( @@ -124,7 +123,7 @@ void SignInButton_Clicked() mPasswordField.text, string.Empty, string.Empty, - Login.Mode.Configure, + Login.Mode.HomeView, mProgressControls, this); } diff --git a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/WaitingSignInPanel.cs b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/WaitingSignInPanel.cs index 5df3803..dad0441 100644 --- a/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/WaitingSignInPanel.cs +++ b/Editor/PlasticSCM/Configuration/CloudEdition/Welcome/WaitingSignInPanel.cs @@ -2,6 +2,7 @@ using Codice.Client.Common; using Codice.Client.Common.OAuth; +using Codice.CM.Common; using PlasticGui; using PlasticGui.Configuration.OAuth; @@ -30,19 +31,26 @@ internal WaitingSignInPanel( BuildComponents(); } - internal void OAuthSignInForConfigure( - Uri signInUrl, + internal void OAuthSignIn( + SEIDWorkingMode workingMode, Guid state, + Uri signInUrl, + string ssoProviderName, IGetOauthToken getToken) { mSignIn = new OAuthSignIn(); - mSignIn.ForConfigure( + mSignIn.ForHomeView( + string.Empty, + workingMode, signInUrl, state, + ssoProviderName, + string.Empty, mProgressControls, mNotify, mCmConnection, + new OAuthSignIn.Browser(), getToken, mRestApi); diff --git a/Editor/PlasticSCM/Configuration/ConfigurePartialWorkspace.cs b/Editor/PlasticSCM/Configuration/ConfigurePartialWorkspace.cs index 2cf937e..48af8fc 100644 --- a/Editor/PlasticSCM/Configuration/ConfigurePartialWorkspace.cs +++ b/Editor/PlasticSCM/Configuration/ConfigurePartialWorkspace.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; using System.IO; -using Codice.Client.Commands.Mount; using Codice.Client.Commands.WkTree; using Codice.Client.Common; using Codice.Client.Common.GameUI; using Codice.CM.Common; +using Codice.CM.Common.Mount; +using Codice.CM.Common.Partial; using Codice.CM.WorkspaceServer.DataStore.Configuration; namespace Unity.PlasticSCM.Editor.Configuration diff --git a/Editor/PlasticSCM/Configuration/SSOCredentialsDialog.cs b/Editor/PlasticSCM/Configuration/SSOCredentialsDialog.cs index 0eb6c78..9351ed0 100644 --- a/Editor/PlasticSCM/Configuration/SSOCredentialsDialog.cs +++ b/Editor/PlasticSCM/Configuration/SSOCredentialsDialog.cs @@ -118,7 +118,7 @@ void OAuthSignIn.INotify.SuccessForConfigure( } CloudEditionWelcomeWindow.JoinCloudServer( - mServer, userName, accessToken); + mServer, userName); GetWindow().InitializePlastic(); OkButtonAction(); diff --git a/Editor/PlasticSCM/Gluon/UpdateReport/ErrorListViewItem.cs b/Editor/PlasticSCM/Gluon/UpdateReport/ErrorListViewItem.cs index 0fbb466..26619a1 100644 --- a/Editor/PlasticSCM/Gluon/UpdateReport/ErrorListViewItem.cs +++ b/Editor/PlasticSCM/Gluon/UpdateReport/ErrorListViewItem.cs @@ -1,6 +1,6 @@ using UnityEditor.IMGUI.Controls; -using Codice.Client.BaseCommands; +using Codice.CM.Common; namespace Unity.PlasticSCM.Editor.Gluon.UpdateReport { diff --git a/Editor/PlasticSCM/Help/HelpLinkData.cs b/Editor/PlasticSCM/Help/HelpLinkData.cs index ecd3f35..8adbb7c 100644 --- a/Editor/PlasticSCM/Help/HelpLinkData.cs +++ b/Editor/PlasticSCM/Help/HelpLinkData.cs @@ -37,6 +37,6 @@ internal static bool TryGet( return true; } - static readonly ILog mLog = LogManager.GetLogger("HelpLinkData"); + static readonly ILog mLog = PlasticApp.GetLogger("HelpLinkData"); } } diff --git a/Editor/PlasticSCM/Hub/Operations/CreateWorkspace.cs b/Editor/PlasticSCM/Hub/Operations/CreateWorkspace.cs index 5930a7c..bb9b49b 100644 --- a/Editor/PlasticSCM/Hub/Operations/CreateWorkspace.cs +++ b/Editor/PlasticSCM/Hub/Operations/CreateWorkspace.cs @@ -33,11 +33,11 @@ internal static void LaunchOperation( internal static WorkspaceInfo CreateWorkspaceForRepSpec( RepositorySpec repositorySpec, - string projectPath, + string wkPath, ILog log) { CreateWorkspaceDialogUserAssistant assistant = - new CreateWorkspaceDialogUserAssistant( + CreateWorkspaceDialogUserAssistant.ForWkPathAndName( PlasticGuiConfig.Get().Configuration.DefaultWorkspaceRoot, PlasticGui.Plastic.API.GetAllWorkspacesArray()); @@ -47,7 +47,7 @@ internal static WorkspaceInfo CreateWorkspaceForRepSpec( string.Empty); WorkspaceInfo wkInfo = PlasticGui.Plastic.API.CreateWorkspace( - projectPath, + wkPath, assistant.GetProposedWorkspaceName(), repositorySpec.ToString()); @@ -100,7 +100,7 @@ void CreateWorkspaceIfNeeded(object state) try { - if (FindWorkspace.HasWorkspace(parameters.ProjectFullPath)) + if (FindWorkspace.HasWorkspace(parameters.WorkspaceFullPath)) { // each domain reload, the package is reloaded. // way need to check if we already created it @@ -115,7 +115,7 @@ void CreateWorkspaceIfNeeded(object state) AutoConfig.PlasticCredentials( parameters.AccessToken, parameters.RepositorySpec.Server, - parameters.ProjectFullPath); + parameters.WorkspaceFullPath); if (tokenExchangeResponse.Error != null) { @@ -134,7 +134,7 @@ void CreateWorkspaceIfNeeded(object state) WorkspaceInfo wkInfo = CreateWorkspaceForRepSpec( parameters.RepositorySpec, - parameters.ProjectFullPath, + parameters.WorkspaceFullPath, mLog); mStatus = Status.PerformingInitialCheckin; @@ -267,6 +267,6 @@ enum Status : int volatile bool mOperationFailed = false; volatile bool mDisplayProgress; - static readonly ILog mLog = LogManager.GetLogger("CreateWorkspace"); + static readonly ILog mLog = PlasticApp.GetLogger("CreateWorkspace"); } } diff --git a/Editor/PlasticSCM/Hub/Operations/DownloadRepository.cs b/Editor/PlasticSCM/Hub/Operations/DownloadRepository.cs index e1b2a1a..6a9dfd2 100644 --- a/Editor/PlasticSCM/Hub/Operations/DownloadRepository.cs +++ b/Editor/PlasticSCM/Hub/Operations/DownloadRepository.cs @@ -80,7 +80,7 @@ void DownloadRepositoryToPathIfNeeded(object state) try { - if (FindWorkspace.HasWorkspace(parameters.ProjectFullPath)) + if (FindWorkspace.HasWorkspace(parameters.WorkspaceFullPath)) { // each domain reload, the package is reloaded. // way need to check if we already downloaded it @@ -93,7 +93,7 @@ void DownloadRepositoryToPathIfNeeded(object state) AutoConfig.PlasticCredentials( parameters.AccessToken, parameters.RepositorySpec.Server, - parameters.ProjectFullPath); + parameters.WorkspaceFullPath); if (tokenExchangeResponse.Error != null) { @@ -111,7 +111,7 @@ void DownloadRepositoryToPathIfNeeded(object state) WorkspaceInfo wkInfo = CreateWorkspace. CreateWorkspaceForRepSpec( parameters.RepositorySpec, - parameters.ProjectFullPath, + parameters.WorkspaceFullPath, mLog); PlasticGui.Plastic.API.Update( @@ -188,6 +188,6 @@ static void LogException(Exception ex) UpdateNotifier mUpdateNotifier = new UpdateNotifier(); - static readonly ILog mLog = LogManager.GetLogger("DownloadRepository"); + static readonly ILog mLog = PlasticApp.GetLogger("DownloadRepository"); } } diff --git a/Editor/PlasticSCM/Hub/Operations/OperationParams.cs b/Editor/PlasticSCM/Hub/Operations/OperationParams.cs index 1a5d39e..8fd6d50 100644 --- a/Editor/PlasticSCM/Hub/Operations/OperationParams.cs +++ b/Editor/PlasticSCM/Hub/Operations/OperationParams.cs @@ -7,7 +7,7 @@ namespace Unity.PlasticSCM.Editor.Hub.Operations { internal class OperationParams { - internal readonly string ProjectFullPath; + internal readonly string WorkspaceFullPath; internal readonly string Organization; internal readonly string Repository; internal readonly RepositorySpec RepositorySpec; @@ -17,8 +17,12 @@ internal static OperationParams BuildFromCommand( ParseArguments.Command command, string unityAccessToken) { + string workspaceFullPath = command.HasWorkspacePath() ? + Path.GetFullPath(command.WorkspacePath) : + Path.GetFullPath(command.ProjectPath); + return new OperationParams( - Path.GetFullPath(command.ProjectPath), + workspaceFullPath, command.Organization, command.Repository, BuildRepositorySpec( @@ -42,13 +46,13 @@ static RepositorySpec BuildRepositorySpec( } OperationParams( - string projectFullPath, + string workspaceFullPath, string organization, string repository, RepositorySpec repositorySpec, string accessToken) { - ProjectFullPath = projectFullPath; + WorkspaceFullPath = workspaceFullPath; Organization = organization; Repository = repository; RepositorySpec = repositorySpec; diff --git a/Editor/PlasticSCM/Hub/ParseArguments.cs b/Editor/PlasticSCM/Hub/ParseArguments.cs index a5829c5..45e709c 100644 --- a/Editor/PlasticSCM/Hub/ParseArguments.cs +++ b/Editor/PlasticSCM/Hub/ParseArguments.cs @@ -14,17 +14,20 @@ internal enum Operation } internal readonly string ProjectPath; + internal readonly string WorkspacePath; internal readonly string Organization; internal readonly string Repository; internal readonly Operation OperationType; internal Command( string projectPath, + string workspacePath, string organization, string repository, Operation operationType) { ProjectPath = projectPath; + WorkspacePath = workspacePath; Organization = organization; Repository = repository; OperationType = operationType; @@ -37,12 +40,18 @@ internal bool IsValid() && !string.IsNullOrEmpty(Repository) && OperationType != Operation.None; } + + internal bool HasWorkspacePath() + { + return !string.IsNullOrEmpty(WorkspacePath); + } } internal static Command GetCommand(Dictionary args) { return new Command( GetProjectPath(args), + GetWorkspacePath(args), GetOrganization(args), GetRepository(args), GetOperation(args)); @@ -89,6 +98,16 @@ internal static string GetRepository(Dictionary args) return null; } + internal static string GetWorkspacePath(Dictionary args) + { + string data; + + if (args.TryGetValue(UVCSArguments.WORKSPACE_PATH_ARG, out data)) + return data; + + return null; + } + static Command.Operation GetOperation(Dictionary args) { if (IsCreateWorkspaceCommand(args)) @@ -133,7 +152,13 @@ static bool IsCreateWorkspaceCommand(Dictionary args) static bool IsDownloadRepositoryCommand(Dictionary args) { - // Open remote project command: + return IsDownloadRepositoryCommandUsingLegacyArgs(args) + || IsDownloadRepositoryCommandUsingUVCSArgs(args); + } + + static bool IsDownloadRepositoryCommandUsingLegacyArgs(Dictionary args) + { + // Open remote project command using legacy args: // -createProject {project_path} // -cloudProject {plastic_repo} // -cloudOrganization 151d73c7-38cb-4eec-b11e-34764e707226-{plastic_org} @@ -150,10 +175,25 @@ static bool IsDownloadRepositoryCommand(Dictionary args) CloudArguments.PLASTIC_ORG_PREFIX_VALUE); } + static bool IsDownloadRepositoryCommandUsingUVCSArgs(Dictionary args) + { + // Open remote project command using UVCS args: + // -createProject {project_path} + // -uvcsRepository {plastic_repo} + // -uvcsOrganization {plastic_org_name} + + if (!args.ContainsKey(CREATE_PROJECT)) + return false; + + return args.ContainsKey(UVCSArguments.ORGANIZATION_ARG) + && args.ContainsKey(UVCSArguments.REPOSITORY_ARG); + } + static class UVCSArguments { internal const string ORGANIZATION_ARG = "-uvcsOrganization"; internal const string REPOSITORY_ARG = "-uvcsRepository"; + internal const string WORKSPACE_PATH_ARG = "-uvcsWorkspacePath"; internal const string CREATE_WORKSPACE_FLAG = "-uvcsCreateWorkspace"; } diff --git a/Editor/PlasticSCM/Hub/ProcessCommand.cs b/Editor/PlasticSCM/Hub/ProcessCommand.cs index 6cbc0bb..585c9c3 100644 --- a/Editor/PlasticSCM/Hub/ProcessCommand.cs +++ b/Editor/PlasticSCM/Hub/ProcessCommand.cs @@ -61,11 +61,16 @@ internal static void ProcessCommandFromArgs( ParseArguments.GetCommand(args); if (!command.IsValid()) + { + mLog.Debug("There is no valid command to process"); return; + } SessionState.SetBool( IS_PLASTIC_COMMAND_KEY, true); + mLog.DebugFormat("Processing command: {0}", command.OperationType); + OperationParams parameters = OperationParams. BuildFromCommand(command, unityAccessToken); @@ -80,6 +85,6 @@ internal static void ProcessCommandFromArgs( } } - static readonly ILog mLog = LogManager.GetLogger("ProcessCommand"); + static readonly ILog mLog = PlasticApp.GetLogger("ProcessCommand"); } } diff --git a/Editor/PlasticSCM/Inspector/DrawInspectorOperations.cs b/Editor/PlasticSCM/Inspector/DrawInspectorOperations.cs index 2c8f030..b041c3e 100644 --- a/Editor/PlasticSCM/Inspector/DrawInspectorOperations.cs +++ b/Editor/PlasticSCM/Inspector/DrawInspectorOperations.cs @@ -1,11 +1,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; + using UnityEngine; using UnityEditor; using UnityEditor.VersionControl; using Codice.CM.Common; +using Codice.LogWrapper; using PlasticGui; using Unity.PlasticSCM.Editor.AssetMenu; using Unity.PlasticSCM.Editor.AssetsOverlays; @@ -26,6 +28,8 @@ internal static void Enable( if (mIsEnabled) return; + mLog.Debug("Enable"); + mWkPath = wkPath; mAssetStatusCache = assetStatusCache; @@ -41,6 +45,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; UnityEditor.Editor.finishedDefaultHeaderGUI -= @@ -66,7 +72,6 @@ internal static void BuildOperations( IMergeViewLauncher mergeViewLauncher, PlasticGui.Gluon.IGluonViewSwitcher gluonViewSwitcher, LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, - EditorWindow parentWindow, bool isGluonMode) { if (!mIsEnabled) @@ -83,7 +88,6 @@ internal static void BuildOperations( mAssetStatusCache, mergeViewLauncher, gluonViewSwitcher, - parentWindow, mAssetSelection, showDownloadPlasticExeWindow, isGluonMode); @@ -324,5 +328,7 @@ static void GetAssetStatusToDraw( static string mWkPath; const string EXTRA_SPACE = " "; + + static readonly ILog mLog = PlasticApp.GetLogger("DrawInspectorOperations"); } -} \ No newline at end of file +} diff --git a/Editor/PlasticSCM/PlasticApp.cs b/Editor/PlasticSCM/PlasticApp.cs index c908ddc..cf89c8f 100644 --- a/Editor/PlasticSCM/PlasticApp.cs +++ b/Editor/PlasticSCM/PlasticApp.cs @@ -30,6 +30,18 @@ namespace Unity.PlasticSCM.Editor { internal static class PlasticApp { + static PlasticApp() + { + RegisterDomainUnloadHandler(); + + mLog = GetLogger("PlasticApp"); + } + + internal static ILog GetLogger(string name) + { + return LogManager.GetLogger(name); + } + internal static void InitializeIfNeeded() { if (mIsInitialized) @@ -39,10 +51,13 @@ internal static void InitializeIfNeeded() ConfigureLogging(); + mLog.Debug("InitializeIfNeeded"); + if (!PlasticPlugin.IsUnitTesting) GuiMessage.Initialize(new UnityPlasticGuiMessage()); RegisterExceptionHandlers(); + RegisterBeforeAssemblyReloadHandler(); InitLocalization(); @@ -64,19 +79,19 @@ internal static void InitializeIfNeeded() if (!PlasticPlugin.IsUnitTesting) { - sEventSenderScheduler = EventTracking.Configure( + mEventSenderScheduler = EventTracking.Configure( (PlasticWebRestApi)PlasticGui.Plastic.WebRestAPI, ApplicationIdentifier.UnityPackage, IdentifyEventPlatform.Get()); } - if (sEventSenderScheduler != null) + if (mEventSenderScheduler != null) { UVCPackageVersion.AsyncGetVersion(); - sPingEventLoop = new PingEventLoop( + mPingEventLoop = new PingEventLoop( BuildGetEventExtraInfoFunction.ForPingEvent()); - sPingEventLoop.Start(); + mPingEventLoop.Start(); } PlasticMethodExceptionHandling.InitializeAskCredentialsUi( @@ -88,74 +103,78 @@ internal static void InitializeIfNeeded() internal static void SetWorkspace(WorkspaceInfo wkInfo) { RegisterApplicationFocusHandlers(); - RegisterAssemblyReloadHandlers(); - if (sEventSenderScheduler == null) + if (mEventSenderScheduler == null) return; - sPingEventLoop.SetWorkspace(wkInfo); + mPingEventLoop.SetWorkspace(wkInfo); PlasticGui.Plastic.WebRestAPI.SetToken( CmConnection.Get().BuildWebApiTokenForCloudEditionDefaultUser()); } - internal static void Dispose() + internal static void EnableMonoFsWatcherIfNeeded() { - mIsInitialized = false; - - UnRegisterExceptionHandlers(); - - UnRegisterApplicationFocusHandlers(); - UnRegisterAssemblyReloadHandlers(); - - if (sEventSenderScheduler != null) - { - sPingEventLoop.Stop(); - // Launching and forgetting to avoid a timeout when sending events files and no - // network connection is available. - // This will be refactored once a better mechanism to send event is in place - sEventSenderScheduler.EndAndSendEventsAsync(); - } + if (PlatformIdentifier.IsMac()) + return; - WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath( - ApplicationDataPath.Get(), PlasticGui.Plastic.API); + MonoFileSystemWatcher.IsEnabled = true; + } - if (wkInfo == null) + internal static void DisableMonoFsWatcherIfNeeded() + { + if (PlatformIdentifier.IsMac()) return; - WorkspaceFsNodeReaderCachesCleaner.CleanWorkspaceFsNodeReader(wkInfo); + MonoFileSystemWatcher.IsEnabled = false; } - static void InitLocalization() + internal static void Dispose(WorkspaceInfo wkInfo) { - string language = null; + if (!mIsInitialized) + return; + try { - language = ClientConfig.Get().GetLanguage(); + mLog.Debug("Dispose"); + + UnRegisterExceptionHandlers(); + UnRegisterApplicationFocusHandlers(); + + if (mEventSenderScheduler != null) + { + mPingEventLoop.Stop(); + // Launching and forgetting to avoid a timeout when sending events files and no + // network connection is available. + // This will be refactored once a better mechanism to send event is in place + mEventSenderScheduler.EndAndSendEventsAsync(); + } + + if (wkInfo == null) + return; + + WorkspaceFsNodeReaderCachesCleaner.CleanWorkspaceFsNodeReader(wkInfo); } - catch + finally { - language = string.Empty; + mIsInitialized = false; } + } - Localization.Init(language); - PlasticLocalization.SetLanguage(language); + static void RegisterDomainUnloadHandler() + { + AppDomain.CurrentDomain.DomainUnload += AppDomainUnload; } - static void ConfigureLogging() + static void RegisterBeforeAssemblyReloadHandler() { - try - { - string log4netpath = ToolConfig.GetUnityPlasticLogConfigFile(); + AssemblyReloadEvents.beforeAssemblyReload += BeforeAssemblyReload; + } - if (!File.Exists(log4netpath)) - WriteLogConfiguration.For(log4netpath); + static void RegisterApplicationFocusHandlers() + { + EditorWindowFocus.OnApplicationActivated += OnApplicationActivated; - XmlConfigurator.Configure(new FileInfo(log4netpath)); - } - catch - { - //it failed configuring the logging info; nothing to do. - } + EditorWindowFocus.OnApplicationDeactivated += OnApplicationDeactivated; } static void RegisterExceptionHandlers() @@ -165,37 +184,35 @@ static void RegisterExceptionHandlers() Application.logMessageReceivedThreaded += HandleLog; } - static void RegisterApplicationFocusHandlers() + static void UnRegisterDomainUnloadHandler() { - EditorWindowFocus.OnApplicationActivated += EnableFsWatcher; - - EditorWindowFocus.OnApplicationDeactivated += DisableFsWatcher; + AppDomain.CurrentDomain.DomainUnload -= AppDomainUnload; } - static void UnRegisterExceptionHandlers() + static void UnRegisterBeforeAssemblyReloadHandler() { - AppDomain.CurrentDomain.UnhandledException -= HandleUnhandledException; - - Application.logMessageReceivedThreaded -= HandleLog; + AssemblyReloadEvents.beforeAssemblyReload -= BeforeAssemblyReload; } static void UnRegisterApplicationFocusHandlers() { - EditorWindowFocus.OnApplicationActivated -= EnableFsWatcher; + EditorWindowFocus.OnApplicationActivated -= OnApplicationActivated; - EditorWindowFocus.OnApplicationDeactivated -= DisableFsWatcher; + EditorWindowFocus.OnApplicationDeactivated -= OnApplicationDeactivated; } - static void RegisterAssemblyReloadHandlers() + static void UnRegisterExceptionHandlers() { - AssemblyReloadEvents.beforeAssemblyReload += DisableFsWatcher; - AssemblyReloadEvents.afterAssemblyReload += EnableFsWatcher; + AppDomain.CurrentDomain.UnhandledException -= HandleUnhandledException; + + Application.logMessageReceivedThreaded -= HandleLog; } - static void UnRegisterAssemblyReloadHandlers() + static void AppDomainUnload(object sender, EventArgs e) { - AssemblyReloadEvents.beforeAssemblyReload -= DisableFsWatcher; - AssemblyReloadEvents.afterAssemblyReload -= EnableFsWatcher; + mLog.Debug("AppDomainUnload"); + + UnRegisterDomainUnloadHandler(); } static void HandleUnhandledException(object sender, UnhandledExceptionEventArgs args) @@ -231,16 +248,62 @@ static void HandleLog(string logString, string stackTrace, LogType type) }); } - static void EnableFsWatcher() + static void OnApplicationActivated() { - MonoFileSystemWatcher.IsEnabled = true; + mLog.Debug("OnApplicationActivated"); + + EnableMonoFsWatcherIfNeeded(); } - static void DisableFsWatcher() + static void OnApplicationDeactivated() { - MonoFileSystemWatcher.IsEnabled = false; + mLog.Debug("OnApplicationDeactivated"); + + DisableMonoFsWatcherIfNeeded(); + } + + static void BeforeAssemblyReload() + { + mLog.Debug("BeforeAssemblyReload"); + + UnRegisterBeforeAssemblyReloadHandler(); + + PlasticShutdown.Shutdown(); } + static void ConfigureLogging() + { + try + { + string log4netpath = ToolConfig.GetUnityPlasticLogConfigFile(); + + if (!File.Exists(log4netpath)) + WriteLogConfiguration.For(log4netpath); + + XmlConfigurator.Configure(new FileInfo(log4netpath)); + } + catch + { + //it failed configuring the logging info; nothing to do. + } + } + + static void InitLocalization() + { + string language = null; + try + { + language = ClientConfig.Get().GetLanguage(); + } + catch + { + language = string.Empty; + } + + Localization.Init(language); + PlasticLocalization.SetLanguage(language); + } + static void SetupFsWatcher() { if (!PlatformIdentifier.IsMac()) @@ -270,10 +333,8 @@ static bool IsExitGUIException(Exception ex) } static bool mIsInitialized; - - static EventSenderScheduler sEventSenderScheduler; - static PingEventLoop sPingEventLoop; - - static readonly ILog mLog = LogManager.GetLogger("PlasticApp"); + static EventSenderScheduler mEventSenderScheduler; + static PingEventLoop mPingEventLoop; + static ILog mLog; } } \ No newline at end of file diff --git a/Editor/PlasticSCM/PlasticConnectionMonitor.cs b/Editor/PlasticSCM/PlasticConnectionMonitor.cs index f25005b..c7e6579 100644 --- a/Editor/PlasticSCM/PlasticConnectionMonitor.cs +++ b/Editor/PlasticSCM/PlasticConnectionMonitor.cs @@ -32,6 +32,11 @@ internal void SetAsConnected() internal void Stop() { + if (!mIsMonitoringServerConnection) + return; + + mLog.Debug("Stop"); + mIsMonitoringServerConnection = false; mResetEvent.Set(); } @@ -43,17 +48,19 @@ internal void SetRepositorySpecForEventTracking(RepositorySpec repSpec) internal void OnConnectionError(Exception ex, string server) { - if (!mIsConnected) + lock (mOnConnectionErrorLock) { - mLog.WarnFormat("A network exception happened while the plugin was offline!"); - ExceptionsHandler.LogException("PlasticConnectionMonitor", ex); - return; - } + LogConnectionError(ex, mIsConnected); - mLog.Debug("A network exception will cause the Plugin to go offline"); - ExceptionsHandler.LogException("PlasticConnectionMonitor", ex); + if (!mIsConnected) + return; + + mIsConnected = false; + } - OnConnectionLost(server); + HandleConnectionLost( + mRepSpecForEventTracking, + () => StartMonitoring(server)); } void HandleCredsAliasAndServerCert.IHostUnreachableExceptionListener.OnHostUnreachableException( @@ -65,10 +72,13 @@ void HandleCredsAliasAndServerCert.IHostUnreachableExceptionListener.OnHostUnrea void StartMonitoring(string server) { + mLog.Debug("StartMonitoring"); + mIsMonitoringServerConnection = true; Thread thread = new Thread(MonitorServerConnection); thread.IsBackground = true; + thread.Name = "Plastic SCM Connection Monitor thread"; thread.Start(server); } @@ -83,27 +93,16 @@ void MonitorServerConnection(object obj) try { - bool isConnected; - mResetEvent.Reset(); - isConnected = HasConnectionToServer(server); - - mIsTryingReconnection = false; - - if (isConnected) + if (HasConnectionToServer(server)) { - OnConnectionRestored(); + mIsConnected = true; + HandleConnectionRestored(mRepSpecForEventTracking); break; } - EditorDispatcher.Dispatch(() => - { - PlasticWindow window = GetPlasticWindowIfOpened(); - - if (window != null) - window.Repaint(); - }); + RepaintPlasticWindowIfOpened(); mResetEvent.WaitOne(CONNECTION_POLL_TIME_MS); } @@ -112,20 +111,24 @@ void MonitorServerConnection(object obj) mLog.Error("Error checking network connectivity", ex); mLog.DebugFormat("Stacktrace: {0}", ex.StackTrace); } + finally + { + mIsTryingReconnection = false; + } } } - void OnConnectionLost(string server) + static void HandleConnectionLost( + RepositorySpec repSpecForEventTracking, + Action startMonitoringAction) { - TrackConnectionLostEvent(mRepSpecForEventTracking); - - mIsConnected = false; + TrackConnectionLostEvent(repSpecForEventTracking); EditorDispatcher.Dispatch(() => { PlasticPlugin.Disable(); - StartMonitoring(server); + startMonitoringAction(); PlasticWindow window = GetPlasticWindowIfOpened(); @@ -134,11 +137,10 @@ void OnConnectionLost(string server) }); } - void OnConnectionRestored() + static void HandleConnectionRestored( + RepositorySpec repSpecForEventTracking) { - TrackConnectionRestoredEvent(mRepSpecForEventTracking); - - mIsConnected = true; + TrackConnectionRestoredEvent(repSpecForEventTracking); EditorDispatcher.Dispatch(() => { @@ -151,21 +153,24 @@ void OnConnectionRestored() }); } - static bool HasConnectionToServer(string server) + static void RepaintPlasticWindowIfOpened() { - try + EditorDispatcher.Dispatch(() => { - mLog.DebugFormat("Checking connection to {0}...", server); + PlasticWindow window = GetPlasticWindowIfOpened(); - return PlasticGui.Plastic.API.CheckServerConnection(server); - } - catch (Exception ex) - { - mLog.DebugFormat("Checking connection to {0} failed: {1}", - server, - ex.Message); - return false; - } + if (window != null) + window.Repaint(); + }); + } + + static void LogConnectionError(Exception ex, bool isConnected) + { + mLog.WarnFormat(isConnected ? + "A network exception will cause the plugin to go offline" : + "A network exception happened while the plugin was offline!"); + + ExceptionsHandler.LogException("PlasticConnectionMonitor", ex); } static void TrackConnectionLostEvent(RepositorySpec repSpec) @@ -196,16 +201,34 @@ static PlasticWindow GetPlasticWindowIfOpened() return EditorWindow.GetWindow(null, false); } - RepositorySpec mRepSpecForEventTracking; + static bool HasConnectionToServer(string server) + { + try + { + mLog.DebugFormat("Checking connection to {0}...", server); + + return PlasticGui.Plastic.API.CheckServerConnection(server); + } + catch (Exception ex) + { + mLog.DebugFormat("Checking connection to {0} failed: {1}", + server, + ex.Message); + return false; + } + } volatile bool mIsMonitoringServerConnection; volatile bool mIsTryingReconnection; volatile bool mIsConnected = true; - ManualResetEvent mResetEvent = new ManualResetEvent(false); + RepositorySpec mRepSpecForEventTracking; + + readonly object mOnConnectionErrorLock = new object(); + readonly ManualResetEvent mResetEvent = new ManualResetEvent(false); const int CONNECTION_POLL_TIME_MS = 30000; - static readonly ILog mLog = LogManager.GetLogger("PlasticConnectionMonitor"); + static readonly ILog mLog = PlasticApp.GetLogger("PlasticConnectionMonitor"); } } diff --git a/Editor/PlasticSCM/PlasticPlugin.cs b/Editor/PlasticSCM/PlasticPlugin.cs index 345db93..2d24799 100644 --- a/Editor/PlasticSCM/PlasticPlugin.cs +++ b/Editor/PlasticSCM/PlasticPlugin.cs @@ -5,7 +5,10 @@ using UnityEngine; using Codice.Client.Common.Connection; +using Codice.Client.Common.FsNodeReaders; using Codice.CM.Common; +using Codice.LogWrapper; +using PlasticPipe.Client; using Unity.PlasticSCM.Editor.AssetMenu; using Unity.PlasticSCM.Editor.AssetsOverlays; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; @@ -100,6 +103,8 @@ internal static void Enable() PlasticApp.InitializeIfNeeded(); + mLog.Debug("Enable"); + if (!FindWorkspace.HasWorkspace(ApplicationDataPath.Get())) return; @@ -119,6 +124,8 @@ internal static void EnableForWorkspace() mIsEnabledForWorkspace = true; + mLog.Debug("EnableForWorkspace " + wkInfo.ClientPath); + PlasticApp.SetWorkspace(wkInfo); HandleCredsAliasAndServerCert.InitializeHostUnreachableExceptionListener( @@ -148,6 +155,16 @@ internal static void EnableForWorkspace() Task.Run(() => EnsureServerConnection(wkInfo, mPlasticConnectionMonitor)); } + internal static void Shutdown() + { + mLog.Debug("Shutdown"); + + HandleCredsAliasAndServerCert.CleanHostUnreachableExceptionListener(); + mPlasticConnectionMonitor.Stop(); + + Disable(); + } + internal static void Disable() { if (!mIsEnabled) @@ -155,23 +172,18 @@ internal static void Disable() try { - PlasticApp.Dispose(); + mLog.Debug("Disable"); - if (!mIsEnabledForWorkspace) - return; + DisableForWorkspace(); - mWorkspaceOperationsMonitor.Stop(); + WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath( + ApplicationDataPath.Get(), PlasticGui.Plastic.API); - AssetsProcessors.Disable(); - AssetMenuItems.Disable(); - DrawAssetOverlay.Disable(); - DrawInspectorOperations.Disable(); - DrawSceneOperations.Disable(); + PlasticApp.Dispose(wkInfo); } finally { mIsEnabled = false; - mIsEnabledForWorkspace = false; } } @@ -187,6 +199,27 @@ internal static void SetNotificationStatus( OnNotificationUpdated.Invoke(); } + static void DisableForWorkspace() + { + if (!mIsEnabledForWorkspace) + return; + + try + { + mWorkspaceOperationsMonitor.Stop(); + + AssetsProcessors.Disable(); + AssetMenuItems.Disable(); + DrawAssetOverlay.Disable(); + DrawInspectorOperations.Disable(); + DrawSceneOperations.Disable(); + } + finally + { + mIsEnabledForWorkspace = false; + } + } + static WorkspaceOperationsMonitor BuildWorkspaceOperationsMonitor( PlasticAssetsProcessor plasticAssetsProcessor, bool isGluonMode) @@ -232,5 +265,7 @@ static void EnsureServerConnection( static PlasticConnectionMonitor mPlasticConnectionMonitor = new PlasticConnectionMonitor(); static bool mIsEnabled; static bool mIsEnabledForWorkspace; + + static readonly ILog mLog = PlasticApp.GetLogger("PlasticPlugin"); } } diff --git a/Editor/PlasticSCM/PlasticProjectSettingsProvider.cs b/Editor/PlasticSCM/PlasticProjectSettingsProvider.cs index eacdd4d..d00dfd9 100644 --- a/Editor/PlasticSCM/PlasticProjectSettingsProvider.cs +++ b/Editor/PlasticSCM/PlasticProjectSettingsProvider.cs @@ -163,10 +163,9 @@ void DoIsEnabledButton() PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo), TrackFeatureUseEvent.Features.UnityPackage.DisableManually); - PlasticPlugin.ConnectionMonitor.Stop(); PlasticPluginIsEnabledPreference.Disable(); CloseWindowIfOpened.Plastic(); - PlasticPlugin.Disable(); + PlasticShutdown.Shutdown(); return; } } @@ -354,6 +353,7 @@ PendingChangesOptions GetOptions() resultWkStatusOptions, matchingOptions, mUseChangeLists, + true, false, mAutoRefresh, false, diff --git a/Editor/PlasticSCM/PlasticShutdown.cs b/Editor/PlasticSCM/PlasticShutdown.cs new file mode 100644 index 0000000..2e5b84a --- /dev/null +++ b/Editor/PlasticSCM/PlasticShutdown.cs @@ -0,0 +1,27 @@ +using Codice.Client.Common.FsNodeReaders; +using Codice.CM.Common; +using Codice.LogWrapper; +using PlasticPipe.Client; + +namespace Unity.PlasticSCM.Editor +{ + internal static class PlasticShutdown + { + internal static void Shutdown() + { + mLog.Debug("Shutdown"); + + WorkspaceInfo wkInfo = FindWorkspace.InfoForApplicationPath( + ApplicationDataPath.Get(), PlasticGui.Plastic.API); + + WorkspaceFsNodeReaderCachesCleaner.Shutdown(); + + PlasticPlugin.Shutdown(); + PlasticApp.Dispose(wkInfo); + + ClientConnectionPool.Shutdown(); + } + + static readonly ILog mLog = PlasticApp.GetLogger("PlasticShutdown"); + } +} diff --git a/Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs.meta b/Editor/PlasticSCM/PlasticShutdown.cs.meta similarity index 83% rename from Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs.meta rename to Editor/PlasticSCM/PlasticShutdown.cs.meta index 5b37b16..e0f6343 100644 --- a/Editor/PlasticSCM/AssetOverlays/Cache/SearchLocks.cs.meta +++ b/Editor/PlasticSCM/PlasticShutdown.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cef27b0c65987be4384e16c988465aca +guid: 21c48a9c4396ce94eb4a38975f725e8c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Editor/PlasticSCM/PlasticWindow.cs b/Editor/PlasticSCM/PlasticWindow.cs index 444be5e..32245ee 100644 --- a/Editor/PlasticSCM/PlasticWindow.cs +++ b/Editor/PlasticSCM/PlasticWindow.cs @@ -97,6 +97,8 @@ internal void RefreshWorkspaceUI() void OnEnable() { + mLog.Debug("OnEnable"); + wantsMouseMove = true; if (mException != null) @@ -119,9 +121,11 @@ void OnEnable() void OnDisable() { - // We need to disable FSWatcher because otherwise it hangs + mLog.Debug("OnDisable"); + + // We need to disable MonoFSWatcher because otherwise it hangs // when you move the window between monitors with different scale - MonoFileSystemWatcher.IsEnabled = false; + PlasticApp.DisableMonoFsWatcherIfNeeded(); if (mException != null) return; @@ -139,6 +143,8 @@ void OnDisable() void OnDestroy() { + mLog.Debug("OnDestroy"); + if (mException != null) return; @@ -156,12 +162,18 @@ void OnDestroy() if (bCloseWindow) return; + mLog.Debug( + "Show window again because the user doesn't want " + + "to quit it due to there is an operation running"); + mForceToOpen = true; ShowPlasticWindow(this); } void OnFocus() { + mLog.Debug("OnFocus"); + if (mException != null) return; @@ -179,8 +191,7 @@ void OnFocus() if (Mouse.IsRightMouseButtonPressed(Event.current)) return; - mViewSwitcher.AutoRefreshPendingChangesView(); - mViewSwitcher.AutoRefreshIncomingChangesView(); + mCooldownAutoRefreshChangesAction.Ping(); } void OnGUI() @@ -248,6 +259,7 @@ void OnGUI() mShowDownloadPlasticExeWindow, mProcessExecutor, mIsGluonMode, + mIsCloudOrganization, mIsUGOSubscription, mUpgradePlanUrl); @@ -359,9 +371,23 @@ internal void InitializePlastic() InitializeNewIncomingChanges(mWkInfo, mIsGluonMode, mViewSwitcher); - mCooldownAutoRefreshPendingChangesAction = new CooldownWindowDelayer( - mViewSwitcher.AutoRefreshPendingChangesView, - UnityConstants.AUTO_REFRESH_PENDING_CHANGES_DELAYED_INTERVAL); + // Create a CooldownWindowDelayer to make the auto-refresh changes delayed. + // In this way, we cover the following scenario: + // * When Unity Editor window is activated it writes some files to its Temp + // folder. This causes the fswatcher to process those events. + // * We need to wait until the fswatcher finishes processing the events, + // otherwise the NewChangesInWk method will return TRUE because there + // are pending events to process, which causes an unwanted 'get pending + // changes' operation when there are no new changes. + // * So, we need to delay the auto-refresh call in order + // to give the fswatcher enough time to process the events. + mCooldownAutoRefreshChangesAction = new CooldownWindowDelayer( + () => + { + mViewSwitcher.AutoRefreshPendingChangesView(); + mViewSwitcher.AutoRefreshIncomingChangesView(); + }, + UnityConstants.AUTO_REFRESH_CHANGES_DELAYED_INTERVAL); mWorkspaceWindow = new WorkspaceWindow( mWkInfo, @@ -393,7 +419,6 @@ internal void InitializePlastic() mViewSwitcher, mViewSwitcher, mShowDownloadPlasticExeWindow, - this, mIsGluonMode); DrawInspectorOperations.BuildOperations( @@ -408,7 +433,6 @@ internal void InitializePlastic() mViewSwitcher, mViewSwitcher, mShowDownloadPlasticExeWindow, - this, mIsGluonMode); mLastUpdateTime = EditorApplication.timeSinceStartup; @@ -473,6 +497,7 @@ void InitializeNotificationBarUpdater( void GetSubscriptionDetails(WorkspaceInfo wkInfo) { + mIsCloudOrganization = false; mIsUGOSubscription = false; mUpgradePlanUrl = string.Empty; @@ -483,6 +508,8 @@ void GetSubscriptionDetails(WorkspaceInfo wkInfo) return; } + mIsCloudOrganization = PlasticGui.Plastic.API.IsCloud(repSpec.Server); + string organizationName = ServerOrganizationParser.GetOrganizationFromServer(repSpec.Server); Task.Run( @@ -519,6 +546,8 @@ void GetSubscriptionDetails(WorkspaceInfo wkInfo) void OnApplicationActivated() { + mLog.Debug("OnApplicationActivated"); + if (mException != null) return; @@ -538,21 +567,13 @@ void OnApplicationActivated() mDeveloperNewIncomingChangesUpdater, mGluonNewIncomingChangesUpdater); - // When Unity Editor window is activated it writes some files to its Temp folder. - // This causes the fswatcher to process those events. - // We need to wait until the fswatcher finishes processing the events, - // otherwise the NewChangesInWk method will return TRUE, causing - // the pending changes view to unwanted auto-refresh. - // So, we need to delay the auto-refresh call in order - // to give the fswatcher enough time to process the events. - // Note that the OnFocus event is not affected by this issue. - mCooldownAutoRefreshPendingChangesAction.Ping(); - - mViewSwitcher.AutoRefreshIncomingChangesView(); + mCooldownAutoRefreshChangesAction.Ping(); } void OnApplicationDeactivated() { + mLog.Debug("OnApplicationDeactivated"); + if (mException != null) return; @@ -658,6 +679,7 @@ static void DoTabToolbar( LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, LaunchTool.IProcessExecutor processExecutor, bool isGluonMode, + bool isCloudOrganization, bool isUGOSubscription, string upgradePlanUrl) { @@ -675,6 +697,7 @@ static void DoTabToolbar( showDownloadPlasticExeWindow, processExecutor, isGluonMode, + isCloudOrganization, isUGOSubscription, upgradePlanUrl); @@ -778,6 +801,7 @@ static void DoToolbarButtons( LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow, LaunchTool.IProcessExecutor processExecutor, bool isGluonMode, + bool isCloudOrganization, bool isUGOSubscription, string upgradePlanUrl) { @@ -851,15 +875,13 @@ static void DoToolbarButtons( OpenLocksViewAndSendEvent(wkInfo, viewSwitcher); } - RepositorySpec repSpec = PlasticGui.Plastic.API.GetRepositorySpec(wkInfo); - - if (PlasticGui.Plastic.API.IsCloud(repSpec.Server)) + if (isCloudOrganization) { if (DrawToolbarButton( Images.GetInviteUsersIcon(), PlasticLocalization.Name.InviteMembers.GetString())) { - InviteMembersToOrganization(repSpec); + InviteMembersToOrganization(wkInfo); } if (isUGOSubscription) @@ -903,8 +925,10 @@ static void UpgradePlan(string upgradePlanUrl) Application.OpenURL(upgradePlanUrl); } - static void InviteMembersToOrganization(RepositorySpec repSpec) + static void InviteMembersToOrganization(WorkspaceInfo wkInfo) { + RepositorySpec repSpec = PlasticGui.Plastic.API.GetRepositorySpec(wkInfo); + string organizationName = ServerOrganizationParser. GetOrganizationFromServer(repSpec.Server); @@ -975,7 +999,8 @@ static void InviteMembersToOrganization(RepositorySpec repSpec) static void OpenUnityDashboardInviteUsersUrl(string organization) { - Application.OpenURL(UnityUrl.UnityDashboard.Plastic.GetForInviteUsers(organization)); + Application.OpenURL(UnityUrl.UnityDashboard.Plastic.GetForInviteUsers( + organization, UnityUrl.UnityDashboard.UnityCloudRequestSource.Editor)); } static void ForceCheckout_Clicked(object obj) @@ -1098,7 +1123,7 @@ static PlasticWindow InstantiateFrom(PlasticWindow window) result.mWkInfo = window.mWkInfo; result.mWorkspaceWindow = window.mWorkspaceWindow; result.mViewSwitcher = window.mViewSwitcher; - result.mCooldownAutoRefreshPendingChangesAction = window.mCooldownAutoRefreshPendingChangesAction; + result.mCooldownAutoRefreshChangesAction = window.mCooldownAutoRefreshChangesAction; result.mDeveloperNewIncomingChangesUpdater = window.mDeveloperNewIncomingChangesUpdater; result.mGluonNewIncomingChangesUpdater = window.mGluonNewIncomingChangesUpdater; result.mException = window.mException; @@ -1181,7 +1206,7 @@ static bool IsWorkspaceConfigChanged( double mLastUpdateTime = 0f; - CooldownWindowDelayer mCooldownAutoRefreshPendingChangesAction; + CooldownWindowDelayer mCooldownAutoRefreshChangesAction; internal ViewSwitcher mViewSwitcher; WelcomeView mWelcomeView; @@ -1195,6 +1220,7 @@ static bool IsWorkspaceConfigChanged( bool mIsGluonMode; bool mDisableCollabIfEnabledWhenLoaded; + bool mIsCloudOrganization; bool mIsUGOSubscription; string mUpgradePlanUrl; @@ -1206,6 +1232,6 @@ static bool IsWorkspaceConfigChanged( const string UGO_CONSUMPTION_URL_KEY = "consumptionUrl"; const string UGO_ORDER_SOURCE = "UGO"; - static readonly ILog mLog = LogManager.GetLogger("PlasticWindow"); + static readonly ILog mLog = PlasticApp.GetLogger("PlasticWindow"); } } diff --git a/Editor/PlasticSCM/SceneView/DrawSceneOperations.cs b/Editor/PlasticSCM/SceneView/DrawSceneOperations.cs index 908936a..dced2dd 100644 --- a/Editor/PlasticSCM/SceneView/DrawSceneOperations.cs +++ b/Editor/PlasticSCM/SceneView/DrawSceneOperations.cs @@ -2,6 +2,7 @@ using UnityEditor.VersionControl; +using Codice.LogWrapper; using Unity.PlasticSCM.Editor.AssetUtils; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; using Unity.PlasticSCM.Editor.AssetMenu; @@ -19,6 +20,8 @@ internal static void Enable( if (mIsEnabled) return; + mLog.Debug("Enable"); + mWkPath = wkPath; mWorkspaceOperationsMonitor = workspaceOperationsMonitor; mAssetStatusCache = assetStatusCache; @@ -30,6 +33,8 @@ internal static void Enable( internal static void Disable() { + mLog.Debug("Disable"); + mIsEnabled = false; Provider.preCheckoutCallback -= Provider_preCheckoutCallback; @@ -68,5 +73,7 @@ static bool Provider_preCheckoutCallback( static IAssetStatusCache mAssetStatusCache; static WorkspaceOperationsMonitor mWorkspaceOperationsMonitor; static string mWkPath; + + static readonly ILog mLog = PlasticApp.GetLogger("DrawSceneOperations"); } } diff --git a/Editor/PlasticSCM/Tool/LaunchTool.cs b/Editor/PlasticSCM/Tool/LaunchTool.cs index 714ce3a..c675576 100644 --- a/Editor/PlasticSCM/Tool/LaunchTool.cs +++ b/Editor/PlasticSCM/Tool/LaunchTool.cs @@ -337,7 +337,7 @@ internal static void OpenMerge( static int mGluonProcessId = -1; static int mBrexProcessId = -1; - static readonly ILog mLog = LogManager.GetLogger("LaunchTool"); + static readonly ILog mLog = PlasticApp.GetLogger("LaunchTool"); internal class ShowDownloadPlasticExeWindow : LaunchTool.IShowDownloadPlasticExeWindow { @@ -488,7 +488,7 @@ Process GetGUIProcess(string program, int processId) } } - readonly ILog mLog = LogManager.GetLogger("ProcessExecutor"); + readonly ILog mLog = PlasticApp.GetLogger("ProcessExecutor"); } } } diff --git a/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs b/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs new file mode 100644 index 0000000..5e7823a --- /dev/null +++ b/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs @@ -0,0 +1,50 @@ +using System; + +using UnityEditor; +using UnityEngine; + +namespace Unity.PlasticSCM.Editor.UI +{ + internal static class DrawActionButtonWithMenu + { + internal static void For(string buttonText, Action buttonAction, GenericMenu actionMenu) + { + // Action button + GUIContent buttonContent = new GUIContent(buttonText); + + GUIStyle buttonStyle = new GUIStyle(EditorStyles.miniButtonLeft); + buttonStyle.stretchWidth = false; + + float width = MeasureMaxWidth.ForTexts(buttonStyle, buttonText); + + Rect rt = GUILayoutUtility.GetRect( + buttonContent, + buttonStyle, + GUILayout.MinWidth(width), + GUILayout.MaxWidth(width)); + + if (GUI.Button(rt, buttonContent, buttonStyle)) + { + buttonAction(); + } + + // Menu dropdown + GUIStyle dropDownStyle = new GUIStyle(EditorStyles.miniButtonRight); + + GUIContent dropDownContent = new GUIContent(string.Empty, Images.GetDropDownIcon()); + + Rect dropDownRect = GUILayoutUtility.GetRect( + dropDownContent, + dropDownStyle, + GUILayout.MinWidth(DROPDOWN_BUTTON_WIDTH), + GUILayout.MaxWidth(DROPDOWN_BUTTON_WIDTH)); + + if (EditorGUI.DropdownButton(dropDownRect, dropDownContent, FocusType.Passive, dropDownStyle)) + { + actionMenu.DropDown(dropDownRect); + } + } + + const int DROPDOWN_BUTTON_WIDTH = 16; + } +} diff --git a/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs.meta b/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs.meta new file mode 100644 index 0000000..da1e568 --- /dev/null +++ b/Editor/PlasticSCM/UI/DrawActionButtonWithMenu.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 640fd06dff6f43498693eeda77683e6e +timeCreated: 1715597188 \ No newline at end of file diff --git a/Editor/PlasticSCM/UI/DrawSearchField.cs b/Editor/PlasticSCM/UI/DrawSearchField.cs index aa0a289..137ad62 100644 --- a/Editor/PlasticSCM/UI/DrawSearchField.cs +++ b/Editor/PlasticSCM/UI/DrawSearchField.cs @@ -1,7 +1,4 @@ -using System; -using System.Reflection; - -using UnityEditor; +using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine; @@ -37,39 +34,8 @@ static string Draw( Rect searchFieldRect, string searchString) { -#if UNITY_2019 - if (!mIsToolbarSearchFieldSearched) - { - mIsToolbarSearchFieldSearched = true; - InternalToolbarSearchField = FindToolbarSearchField(); - } - - if (InternalToolbarSearchField != null) - { - return (string)InternalToolbarSearchField.Invoke( - null, - new object[] { searchFieldRect, searchString, false }); - } -#endif return searchField.OnToolbarGUI( searchFieldRect, searchString); } - -#if UNITY_2019 - static MethodInfo FindToolbarSearchField() - { - return EditorGUIType.GetMethod( - "ToolbarSearchField", - BindingFlags.Static | BindingFlags.NonPublic, - null, - new Type[] { typeof(Rect), typeof(string), typeof(bool) }, - null); - } - - static bool mIsToolbarSearchFieldSearched; - static MethodInfo InternalToolbarSearchField; - - static readonly Type EditorGUIType = typeof(EditorGUI); -#endif } } diff --git a/Editor/PlasticSCM/UI/EditorVersion.cs b/Editor/PlasticSCM/UI/EditorVersion.cs index 59060fd..71831b8 100644 --- a/Editor/PlasticSCM/UI/EditorVersion.cs +++ b/Editor/PlasticSCM/UI/EditorVersion.cs @@ -30,7 +30,6 @@ internal static bool IsCurrentEditorOlderThan(string version) internal static bool IsEditorOlderThan(string versionA, string versionB) { -#if UNITY_2017_1_OR_NEWER var editorA = Parse(versionA); var editorB = Parse(versionB); if (editorA.Year == editorB.Year) @@ -42,9 +41,6 @@ internal static bool IsEditorOlderThan(string versionA, string versionB) return editorA.Release < editorB.Release; } return editorA.Year < editorB.Year; -#else - return false; -#endif } static int ParseUpdateString(string version) diff --git a/Editor/PlasticSCM/UI/GUIActionRunner.cs b/Editor/PlasticSCM/UI/GUIActionRunner.cs index 9109263..8d7d9ba 100644 --- a/Editor/PlasticSCM/UI/GUIActionRunner.cs +++ b/Editor/PlasticSCM/UI/GUIActionRunner.cs @@ -44,6 +44,6 @@ internal static void RunGUIAction(ActionDelegate action) static object mLock = new object(); - static readonly ILog mLog = LogManager.GetLogger("GUIActionRunner"); + static readonly ILog mLog = PlasticApp.GetLogger("GUIActionRunner"); } } diff --git a/Editor/PlasticSCM/UI/GUISpace.cs b/Editor/PlasticSCM/UI/GUISpace.cs deleted file mode 100644 index baafea7..0000000 --- a/Editor/PlasticSCM/UI/GUISpace.cs +++ /dev/null @@ -1,14 +0,0 @@ -using UnityEngine; - -namespace Unity.PlasticSCM.Editor.UI -{ - internal static class GUISpace - { - internal static void ForToolbar() - { -#if UNITY_2019_1_OR_NEWER - GUILayout.Space(5); -#endif - } - } -} diff --git a/Editor/PlasticSCM/UI/GUISpace.cs.meta b/Editor/PlasticSCM/UI/GUISpace.cs.meta deleted file mode 100644 index 700a483..0000000 --- a/Editor/PlasticSCM/UI/GUISpace.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f9e9ce5a8dd0eb74fa5f90576a7fab4d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Editor/PlasticSCM/UI/Images.cs b/Editor/PlasticSCM/UI/Images.cs index 21b3a80..e123804 100644 --- a/Editor/PlasticSCM/UI/Images.cs +++ b/Editor/PlasticSCM/UI/Images.cs @@ -745,6 +745,6 @@ static Texture2D LoadTextureFromFile(string path) static Texture2D mMovedIcon; static Texture2D mRepositoryIcon; - static readonly ILog mLog = LogManager.GetLogger("Images"); + static readonly ILog mLog = PlasticApp.GetLogger("Images"); } } diff --git a/Editor/PlasticSCM/UI/RunModal.cs b/Editor/PlasticSCM/UI/RunModal.cs index 5afae1a..ad7f443 100644 --- a/Editor/PlasticSCM/UI/RunModal.cs +++ b/Editor/PlasticSCM/UI/RunModal.cs @@ -67,36 +67,18 @@ static void ApplySavedGUIState(object savedGUIState) static void PopDispatcherContext(EditorWindow window) { -#if UNITY_2020_1_OR_NEWER //UnityEngine.UIElements.EventDispatcher.editorDispatcher.PopDispatcherContext(); object editorDispatcher = mEditorDispatcherProp2020.GetValue(null); mPopContextMethod2020.Invoke(editorDispatcher, null); -#else - // m_Parent.visualTree.panel.dispatcher?.PopDispatcherContext(); - - object dispatcher = GetDispatcher(window); - - if (dispatcher != null) - mPopContextMethod.Invoke(dispatcher, null); -#endif } static void PushDispatcherContext(EditorWindow window) { -#if UNITY_2020_1_OR_NEWER //UnityEngine.UIElements.EventDispatcher.editorDispatcher.PushDispatcherContext(); object editorDispatcher = mEditorDispatcherProp2020.GetValue(null); mPushContextMethod2020.Invoke(editorDispatcher, null); -#else - // m_Parent.visualTree.panel.dispatcher?.PushDispatcherContext(); - - object dispatcher = GetDispatcher(window); - - if (dispatcher != null) - mPushContextMethod.Invoke(dispatcher, null); -#endif } static object GetDispatcher(EditorWindow window) @@ -142,11 +124,10 @@ static void InitializeInfo() mCreateSavedGUIState = savedGUIStateType.GetMethod("Create", flags); mApplyAndForgetMethod = savedGUIStateType.GetMethod("ApplyAndForget", flags); -#if UNITY_2020_1_OR_NEWER mEditorDispatcherProp2020 = typeof(UnityEngine.UIElements.EventDispatcher).GetProperty("editorDispatcher", flags); mPushContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PushDispatcherContext", flags); mPopContextMethod2020 = mEditorDispatcherProp2020.PropertyType.GetMethod("PopDispatcherContext", flags); -#endif + flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public; @@ -185,9 +166,6 @@ static void InitializeInfo() static MethodInfo BuildMakeModalMethodInfo(BindingFlags flags) { - if (EditorVersion.IsCurrentEditorOlderThan("2019.3.10f1")) - return typeof(EditorWindow).GetMethod("MakeModal", flags); - return typeof(EditorWindow).GetMethod("Internal_MakeModal", flags); } @@ -204,11 +182,9 @@ static MethodInfo BuildMakeModalMethodInfo(BindingFlags flags) static PropertyInfo mPanelProp; static PropertyInfo mDispatcherProp; -#if UNITY_2020_1_OR_NEWER static PropertyInfo mEditorDispatcherProp2020; static MethodInfo mPushContextMethod2020; static MethodInfo mPopContextMethod2020; -#endif // // How ContainerWindows are visualized. Used with ContainerWindow.Show // internal enum ShowMode diff --git a/Editor/PlasticSCM/UI/Tree/GetChangesOverlayIcon.cs b/Editor/PlasticSCM/UI/Tree/GetChangesOverlayIcon.cs index 7091a5d..d6356ae 100644 --- a/Editor/PlasticSCM/UI/Tree/GetChangesOverlayIcon.cs +++ b/Editor/PlasticSCM/UI/Tree/GetChangesOverlayIcon.cs @@ -2,6 +2,7 @@ using Codice.Client.BaseCommands; using Codice.Client.Commands; +using Codice.CM.Common; using Codice.ThemeImages; using PlasticGui.WorkspaceWindow.Merge; using PlasticGui.WorkspaceWindow.PendingChanges; diff --git a/Editor/PlasticSCM/UI/Tree/TreeHeaderSettings.cs b/Editor/PlasticSCM/UI/Tree/TreeHeaderSettings.cs index de83e65..924f302 100644 --- a/Editor/PlasticSCM/UI/Tree/TreeHeaderSettings.cs +++ b/Editor/PlasticSCM/UI/Tree/TreeHeaderSettings.cs @@ -134,6 +134,6 @@ static string GetSettingKey(string treeSettingsName, string key) static string SORT_COLUMN_INDEX_KEY = "SortColumnIdx"; static string SORT_ASCENDING_KEY = "SortAscending"; - static readonly ILog mLog = LogManager.GetLogger("TreeHeaderSettings"); + static readonly ILog mLog = PlasticApp.GetLogger("TreeHeaderSettings"); } } \ No newline at end of file diff --git a/Editor/PlasticSCM/UI/UIElements/LoadingSpinner.cs b/Editor/PlasticSCM/UI/UIElements/LoadingSpinner.cs index b6d0835..4ba367c 100644 --- a/Editor/PlasticSCM/UI/UIElements/LoadingSpinner.cs +++ b/Editor/PlasticSCM/UI/UIElements/LoadingSpinner.cs @@ -62,11 +62,7 @@ void UpdateProgress() double currentTime = EditorApplication.timeSinceStartup; double deltaTime = currentTime - mLastRotationTime; -#if UNITY_2021_2_OR_NEWER mSpinner.transform.rotation = Quaternion.Euler(0, 0, mRotation); -#else - transform.rotation = Quaternion.Euler(0, 0, mRotation); -#endif mRotation += (int)(ROTATION_SPEED * deltaTime); mRotation = mRotation % 360; diff --git a/Editor/PlasticSCM/UI/UnityConstants.cs b/Editor/PlasticSCM/UI/UnityConstants.cs index bc5dd16..8677632 100644 --- a/Editor/PlasticSCM/UI/UnityConstants.cs +++ b/Editor/PlasticSCM/UI/UnityConstants.cs @@ -29,35 +29,16 @@ public static class UnityConstants internal const int STATUS_BAR_ICON_SIZE = 16; internal const int STATUS_BAR_NOTIFICATION_SPACING = 8; -#if UNITY_2019_1_OR_NEWER internal const float DROPDOWN_ICON_Y_OFFSET = 2f; internal const float TREEVIEW_FOLDOUT_Y_OFFSET = 0f; internal const float TREEVIEW_ROW_HEIGHT = 24f; internal const float TREEVIEW_HEADER_CHECKBOX_Y_OFFSET = 0f; internal const float TREEVIEW_CHECKBOX_Y_OFFSET = 0f; internal static float DIR_CONFLICT_VALIDATION_WARNING_LABEL_HEIGHT = 21f; -#else - internal const float DROPDOWN_ICON_Y_OFFSET = 5f; - internal const float TREEVIEW_FOLDOUT_Y_OFFSET = 1f; - internal const float TREEVIEW_ROW_HEIGHT = 20f; - internal const float TREEVIEW_PENDING_CHANGES_ROW_HEIGHT = 24f; - internal const float TREEVIEW_HEADER_CHECKBOX_Y_OFFSET = 6f; - internal const float TREEVIEW_CHECKBOX_Y_OFFSET = 2f; - internal static float DIR_CONFLICT_VALIDATION_WARNING_LABEL_HEIGHT = 18f; -#endif - -#if UNITY_2020_1_OR_NEWER + internal const float INSPECTOR_ACTIONS_BACK_RECTANGLE_TOP_MARGIN = -2f; -#else - internal const float INSPECTOR_ACTIONS_BACK_RECTANGLE_TOP_MARGIN = 0f; -#endif -#if UNITY_2019 - internal const int INSPECTOR_ACTIONS_HEADER_BACK_RECTANGLE_HEIGHT = 24; -#else internal const int INSPECTOR_ACTIONS_HEADER_BACK_RECTANGLE_HEIGHT = 7; -#endif - internal const int LEFT_MOUSE_BUTTON = 0; internal const int RIGHT_MOUSE_BUTTON = 1; @@ -77,8 +58,9 @@ public static class UnityConstants internal const double SEARCH_DELAYED_INPUT_ACTION_INTERVAL = 0.25; internal const double SELECTION_DELAYED_INPUT_ACTION_INTERVAL = 0.25; internal const double AUTO_REFRESH_DELAYED_INTERVAL = 0.25; - internal const double AUTO_REFRESH_PENDING_CHANGES_DELAYED_INTERVAL = 0.1; + internal const double AUTO_REFRESH_CHANGES_DELAYED_INTERVAL = 0.1; public const double PLUGIN_DELAYED_INITIALIZE_INTERVAL = 0.25; + internal const double REFRESH_ASSET_DATABASE_DELAYED_INTERVAL = 0.25; internal const double NOTIFICATION_CLEAR_INTERVAL = 5; diff --git a/Editor/PlasticSCM/UI/UnityStyles.cs b/Editor/PlasticSCM/UI/UnityStyles.cs index 9ebb0f0..c8c9596 100644 --- a/Editor/PlasticSCM/UI/UnityStyles.cs +++ b/Editor/PlasticSCM/UI/UnityStyles.cs @@ -36,22 +36,13 @@ internal static class Colors internal static Color BarBorder = EditorGUIUtility.isProSkin ? (Color)new Color32(35, 35, 35, 255) : (Color)new Color32(153, 153, 153, 255); -#if UNITY_2019 - internal static Color InspectorHeaderBackground = EditorGUIUtility.isProSkin ? - new Color(60f / 255, 60f / 255, 60f / 255) : - new Color(203f / 255, 203f / 255, 203f / 255); -#else + internal static Color InspectorHeaderBackground = Transparent; -#endif -#if UNITY_2019_1_OR_NEWER + internal static Color InspectorHeaderBackgroundDisabled = EditorGUIUtility.isProSkin ? new Color(58f / 255, 58f / 255, 58f / 255) : new Color(199f / 255, 199f / 255, 199f / 255); -#else - internal static Color InspectorHeaderBackgroundDisabled = EditorGUIUtility.isProSkin ? - new Color(60f / 255, 60f / 255, 60f / 255) : - new Color(210f / 255, 210f / 255, 210f / 255); -#endif + internal static Color TabUnderline = new Color(58f / 255, 121f / 255, 187f / 255); internal static Color Link = new Color(0f, 120f / 255, 218f / 255); internal static Color SecondaryLabel = EditorGUIUtility.isProSkin ? @@ -390,9 +381,7 @@ internal static class DiffPanel var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; style.fontStyle = FontStyle.Bold; -#if UNITY_2019_1_OR_NEWER style.contentOffset = new Vector2(0, 1.5f); -#endif return style; }); } @@ -420,9 +409,6 @@ internal static class PendingChangesTab { var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; -#if !UNITY_2019_1_OR_NEWER - style.margin = new RectOffset(0, 0, 0, 0); -#endif return style; }); @@ -431,9 +417,7 @@ internal static class PendingChangesTab var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; style.fontStyle = FontStyle.Bold; -#if UNITY_2019_1_OR_NEWER style.contentOffset = new Vector2(0, 1.5f); -#endif return style; }); @@ -485,9 +469,6 @@ internal readonly static LazyStyle HeaderWarningLabel { var style = new GUIStyle(EditorStyles.label); style.fontSize = 11; -#if !UNITY_2019_1_OR_NEWER - style.margin = new RectOffset(0, 0, 0, 0); -#endif return style; }); } @@ -499,9 +480,7 @@ internal static class ChangesetsTab var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; style.fontStyle = FontStyle.Bold; -#if UNITY_2019_1_OR_NEWER style.contentOffset = new Vector2(0, 1.5f); -#endif return style; }); } @@ -513,9 +492,7 @@ internal static class HistoryTab var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; style.fontStyle = FontStyle.Bold; -#if UNITY_2019_1_OR_NEWER style.contentOffset = new Vector2(0, 1.5f); -#endif return style; }); } @@ -527,9 +504,6 @@ internal readonly static LazyStyle WarningLabel { var style = new GUIStyle(EditorStyles.label); style.alignment = TextAnchor.MiddleLeft; -#if !UNITY_2019_1_OR_NEWER - style.margin = new RectOffset(0, 0, 0, 0); -#endif return style; }); } @@ -539,9 +513,6 @@ internal static class Notification internal static readonly LazyStyle Label = new LazyStyle(() => { var style = new GUIStyle(EditorStyles.label); -#if !UNITY_2019_1_OR_NEWER - style.fontSize = 10; -#endif style.normal = new GUIStyleState() { textColor = Color.white }; return style; }); @@ -643,9 +614,6 @@ internal static class DirectoryConflicts { var style = new GUIStyle(EditorStyles.label); style.fontSize = 10; -#if !UNITY_2019_1_OR_NEWER - style.margin = new RectOffset(0, 0, 0, 0); -#endif return style; }); diff --git a/Editor/PlasticSCM/UVCPackageVersion.cs b/Editor/PlasticSCM/UVCPackageVersion.cs index b9770a2..e0b7640 100644 --- a/Editor/PlasticSCM/UVCPackageVersion.cs +++ b/Editor/PlasticSCM/UVCPackageVersion.cs @@ -60,6 +60,6 @@ static void AsyncFindPackage( const string UVCS_PACKAGE_NAME = "com.unity.collab-proxy"; - static readonly ILog mLog = LogManager.GetLogger("UVCPackageVersion"); + static readonly ILog mLog = PlasticApp.GetLogger("UVCPackageVersion"); } } diff --git a/Editor/PlasticSCM/VCSPlugin.cs b/Editor/PlasticSCM/VCSPlugin.cs index ddadc00..931b7e2 100644 --- a/Editor/PlasticSCM/VCSPlugin.cs +++ b/Editor/PlasticSCM/VCSPlugin.cs @@ -18,20 +18,12 @@ internal static void Disable() static string GetVersionControl() { -#if UNITY_2020_1_OR_NEWER return VersionControlSettings.mode; -#else - return EditorSettings.externalVersionControl; -#endif } static void SetVersionControl(string versionControl) { -#if UNITY_2020_1_OR_NEWER VersionControlSettings.mode = versionControl; -#else - EditorSettings.externalVersionControl = versionControl; -#endif } } } diff --git a/Editor/PlasticSCM/ViewSwitcher.cs b/Editor/PlasticSCM/ViewSwitcher.cs index b60bf9c..507c0b5 100644 --- a/Editor/PlasticSCM/ViewSwitcher.cs +++ b/Editor/PlasticSCM/ViewSwitcher.cs @@ -427,6 +427,7 @@ void OpenBranchesTab() this, mWorkspaceWindow, mDeveloperNewIncomingChangesUpdater, + mGluonNewIncomingChangesUpdater, mParentWindow); mViewHost.AddRefreshableView( diff --git a/Editor/PlasticSCM/Views/Branch/BranchesTab.cs b/Editor/PlasticSCM/Views/Branch/BranchesTab.cs index dca5831..4e35f2c 100644 --- a/Editor/PlasticSCM/Views/Branch/BranchesTab.cs +++ b/Editor/PlasticSCM/Views/Branch/BranchesTab.cs @@ -20,6 +20,8 @@ using Unity.PlasticSCM.Editor.Views.Branches.Dialogs; using Unity.PlasticSCM.Editor.Views.Changesets; +using GluonNewIncomingChangesUpdater = PlasticGui.Gluon.WorkspaceWindow.NewIncomingChangesUpdater; + namespace Unity.PlasticSCM.Editor.Views.Branches { internal class BranchesTab : @@ -37,13 +39,15 @@ internal BranchesTab( IMergeViewLauncher mergeViewLauncher, IUpdateReport updateReport, NewIncomingChangesUpdater developerNewIncomingChangesUpdater, + GluonNewIncomingChangesUpdater gluonNewIncomingChangesUpdater, EditorWindow parentWindow) { mWkInfo = wkInfo; mParentWindow = parentWindow; mProgressControls = new ProgressControlsForViews(); - mProgressControls = new ProgressControlsForViews(); + mDeveloperNewIncomingChangesUpdater = developerNewIncomingChangesUpdater; + mGluonNewIncomingChangesUpdater = gluonNewIncomingChangesUpdater; BuildComponents( wkInfo, @@ -118,11 +122,18 @@ internal void OnDisable() void IRefreshableView.Refresh() { + // VCS-1005209 - There are scenarios where the list of branches need to check for incoming changes. + // For example, deleting the active branch will automatically switch your workspace to the parent changeset, + // which might have incoming changes. + if (mDeveloperNewIncomingChangesUpdater != null) + mDeveloperNewIncomingChangesUpdater.Update(DateTime.Now); + + if (mGluonNewIncomingChangesUpdater != null) + mGluonNewIncomingChangesUpdater.Update(DateTime.Now); + string query = GetBranchesQuery(mDateFilter); - FillBranches(mWkInfo, - query, - BranchesSelection.GetSelectedRepObjectInfos(mBranchesListView)); + FillBranches(mWkInfo, query, BranchesSelection.GetSelectedRepObjectInfos(mBranchesListView)); } //IQueryRefreshableView @@ -439,5 +450,7 @@ void IBranchMenuOperations.ViewPermissions() { } readonly WorkspaceInfo mWkInfo; readonly ProgressControlsForViews mProgressControls; readonly EditorWindow mParentWindow; + readonly NewIncomingChangesUpdater mDeveloperNewIncomingChangesUpdater; + readonly GluonNewIncomingChangesUpdater mGluonNewIncomingChangesUpdater; } } \ No newline at end of file diff --git a/Editor/PlasticSCM/Views/Changesets/ChangesetsTab.cs b/Editor/PlasticSCM/Views/Changesets/ChangesetsTab.cs index a08203d..0cd50a7 100644 --- a/Editor/PlasticSCM/Views/Changesets/ChangesetsTab.cs +++ b/Editor/PlasticSCM/Views/Changesets/ChangesetsTab.cs @@ -10,6 +10,7 @@ using Codice.Client.Common.EventTracking; using Codice.Client.Common.Threading; using Codice.CM.Common; +using Codice.CM.Common.Mount; using PlasticGui; using PlasticGui.WorkspaceWindow; using PlasticGui.WorkspaceWindow.Update; diff --git a/Editor/PlasticSCM/Views/CreateWorkspace/CreateWorkspaceView.cs b/Editor/PlasticSCM/Views/CreateWorkspace/CreateWorkspaceView.cs index 1aced59..6a3b125 100644 --- a/Editor/PlasticSCM/Views/CreateWorkspace/CreateWorkspaceView.cs +++ b/Editor/PlasticSCM/Views/CreateWorkspace/CreateWorkspaceView.cs @@ -117,7 +117,7 @@ void Initialize(IPlasticAPI plasticApi, IPlasticWebRestApi plasticWebRestApi) serverSpecPart, string.Empty); - mDialogUserAssistant = new CreateWorkspaceDialogUserAssistant( + mDialogUserAssistant = CreateWorkspaceDialogUserAssistant.ForWkPathAndName( mWorkspacePath, allWorkspaces); diff --git a/Editor/PlasticSCM/Views/CreateWorkspace/PerformInitialCheckin.cs b/Editor/PlasticSCM/Views/CreateWorkspace/PerformInitialCheckin.cs index c3b2ce7..4bbb6c5 100644 --- a/Editor/PlasticSCM/Views/CreateWorkspace/PerformInitialCheckin.cs +++ b/Editor/PlasticSCM/Views/CreateWorkspace/PerformInitialCheckin.cs @@ -9,6 +9,7 @@ using Codice.Client.Common; using Codice.Client.Common.Threading; using Codice.CM.Common; +using Codice.CM.Common.Checkin.Partial; using Codice.Client.GameUI.Checkin; using PlasticGui; using PlasticGui.Help.Conditions; diff --git a/Editor/PlasticSCM/Views/Diff/DiffPanel.cs b/Editor/PlasticSCM/Views/Diff/DiffPanel.cs index e7276d4..042aae9 100644 --- a/Editor/PlasticSCM/Views/Diff/DiffPanel.cs +++ b/Editor/PlasticSCM/Views/Diff/DiffPanel.cs @@ -10,6 +10,7 @@ using Codice.Client.Common.EventTracking; using Codice.Client.Common.Threading; using Codice.CM.Common; +using Codice.CM.Common.Mount; using PlasticGui; using PlasticGui.WorkspaceWindow; using PlasticGui.WorkspaceWindow.BrowseRepository; diff --git a/Editor/PlasticSCM/Views/History/HistoryListView.cs b/Editor/PlasticSCM/Views/History/HistoryListView.cs index a257a47..363787e 100644 --- a/Editor/PlasticSCM/Views/History/HistoryListView.cs +++ b/Editor/PlasticSCM/Views/History/HistoryListView.cs @@ -148,7 +148,7 @@ internal void Refilter() return; Filter filter = new Filter(searchString); - mRevisionsList.Filter(filter, mColumnNames, null); + mRevisionsList.Filter(filter, mColumnNames, null, null); } internal void Sort() diff --git a/Editor/PlasticSCM/Views/History/HistoryTab.cs b/Editor/PlasticSCM/Views/History/HistoryTab.cs index 4c1ca39..b1d738e 100644 --- a/Editor/PlasticSCM/Views/History/HistoryTab.cs +++ b/Editor/PlasticSCM/Views/History/HistoryTab.cs @@ -12,9 +12,11 @@ using GluonGui; using PlasticGui; using PlasticGui.WorkspaceWindow; +using PlasticGui.WorkspaceWindow.BranchExplorer; using PlasticGui.WorkspaceWindow.Diff; using PlasticGui.WorkspaceWindow.History; using PlasticGui.WorkspaceWindow.Open; +using PlasticGui.WorkspaceWindow.Configuration; using GluonRevertOperation = GluonGui.WorkspaceWindow.Views.Details.History.RevertOperation; using HistoryDescriptor = GluonGui.WorkspaceWindow.Views.Details.History.HistoryDescriptor; @@ -142,10 +144,13 @@ void HistoryViewLogic.IHistoryView.SelectRevisions( } void HistoryViewLogic.IHistoryView.UpdateData( + List resolvedUsers, + ResolvedUser currentUser, Dictionary branchesAndChangesets, BranchInfo workingBranch, HistoryRevisionList list, - long loadedRevisionId) + long loadedRevisionId, + WorkspaceUIConfiguration config) { mHistoryListView.BuildModel(list, loadedRevisionId); diff --git a/Editor/PlasticSCM/Views/IncomingChanges/Developer/IncomingChangesTab.cs b/Editor/PlasticSCM/Views/IncomingChanges/Developer/IncomingChangesTab.cs index be126e3..b818942 100644 --- a/Editor/PlasticSCM/Views/IncomingChanges/Developer/IncomingChangesTab.cs +++ b/Editor/PlasticSCM/Views/IncomingChanges/Developer/IncomingChangesTab.cs @@ -210,7 +210,7 @@ void IIncomingChangesTab.AutoRefresh() if (workingBranch == null) return; - mMergeController.UpdateMergeObjectInfoIfNeeded(workingBranch); + mMergeController.UpdateMergeObjectInfoAndCleanStateIfNeeded(workingBranch); mMergeViewLogic.AutoRefresh(); }); } @@ -238,7 +238,7 @@ void IRefreshableView.Refresh() if (workingBranch == null) return; - mMergeController.UpdateMergeObjectInfoIfNeeded(workingBranch); + mMergeController.UpdateMergeObjectInfoAndCleanStateIfNeeded(workingBranch); mMergeViewLogic.Refresh(); }); } diff --git a/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorListViewItem.cs b/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorListViewItem.cs index b6266ae..15fdca8 100644 --- a/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorListViewItem.cs +++ b/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorListViewItem.cs @@ -1,6 +1,6 @@ using UnityEditor.IMGUI.Controls; -using Codice.Client.BaseCommands; +using Codice.CM.Common; namespace Unity.PlasticSCM.Editor.Views.IncomingChanges.Gluon.Errors { diff --git a/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorsListView.cs b/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorsListView.cs index da21b53..2cbf23d 100644 --- a/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorsListView.cs +++ b/Editor/PlasticSCM/Views/IncomingChanges/Gluon/Errors/ErrorsListView.cs @@ -4,6 +4,7 @@ using UnityEditor.IMGUI.Controls; using Codice.Client.BaseCommands; +using Codice.CM.Common; using Unity.PlasticSCM.Editor.UI; using Unity.PlasticSCM.Editor.UI.Tree; diff --git a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/CheckinConflictsDialog.cs b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/CheckinConflictsDialog.cs index 32d6c30..0ff2e67 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/CheckinConflictsDialog.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/CheckinConflictsDialog.cs @@ -6,6 +6,7 @@ using UnityEngine; using Codice.Client.GameUI.Checkin; +using Codice.CM.Common.Checkin.Partial; using PlasticGui; using Unity.PlasticSCM.Editor.UI; diff --git a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/FilterRulesConfirmationDialog.cs b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/FilterRulesConfirmationDialog.cs index cba665e..e534652 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/FilterRulesConfirmationDialog.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/FilterRulesConfirmationDialog.cs @@ -79,7 +79,7 @@ void RulesArea() mApplyRulesToAllWorkspace = EditorGUILayout.ToggleLeft( PlasticLocalization.GetString(PlasticLocalization.Name.ApplyRulesToAllWorkspaceCheckButton), - mApplyRulesToAllWorkspace, GUILayout.Width(200)); + mApplyRulesToAllWorkspace, GUILayout.ExpandWidth(true)); } void DoButtonsArea() diff --git a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/LaunchCheckinConflictsDialog.cs b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/LaunchCheckinConflictsDialog.cs index 6ee29ab..f1624d6 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/Dialogs/LaunchCheckinConflictsDialog.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/Dialogs/LaunchCheckinConflictsDialog.cs @@ -3,6 +3,7 @@ using UnityEditor; using Codice.Client.GameUI.Checkin; +using Codice.CM.Common.Checkin.Partial; using GluonGui.Dialog; using GluonGui.WorkspaceWindow.Views.Checkin.Operations; using PlasticGui; diff --git a/Editor/PlasticSCM/Views/PendingChanges/DrawCommentTextArea.cs b/Editor/PlasticSCM/Views/PendingChanges/DrawCommentTextArea.cs index ad49f17..1554319 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/DrawCommentTextArea.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/DrawCommentTextArea.cs @@ -37,8 +37,7 @@ internal static void For( if (string.IsNullOrEmpty(pendingChangesTab.CommentText)) { - DoPlaceholderIfNeeded(PlasticLocalization.GetString( - PlasticLocalization.Name.CheckinComment), + DoPlaceholderIfNeeded(PlasticLocalization.GetString(PlasticLocalization.Name.CheckinOnlyComment), textAreaRect); } diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesSelection.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesSelection.cs index eefe2f0..f5674ad 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesSelection.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesSelection.cs @@ -4,6 +4,7 @@ using Codice.Client.BaseCommands; using Codice.Client.Commands; +using Codice.CM.Common; using PlasticGui; using PlasticGui.WorkspaceWindow.PendingChanges; using PlasticGui.WorkspaceWindow.PendingChanges.Changelists; diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab.cs index b6afc0f..710df1c 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab.cs @@ -14,6 +14,7 @@ using Codice.CM.Client.Gui; using Codice.CM.Common; using Codice.CM.Common.Merge; +using Codice.CM.Common.Mount; using Codice.LogWrapper; using GluonGui; using GluonGui.WorkspaceWindow.Views.Checkin.Operations; @@ -26,7 +27,6 @@ using PlasticGui.WorkspaceWindow.Open; using PlasticGui.WorkspaceWindow.PendingChanges; using PlasticGui.WorkspaceWindow.PendingChanges.Changelists; -using Unity.PlasticSCM.Editor.AssetsOverlays; using Unity.PlasticSCM.Editor.AssetsOverlays.Cache; using Unity.PlasticSCM.Editor.AssetUtils; using Unity.PlasticSCM.Editor.AssetUtils.Processor; @@ -53,6 +53,7 @@ internal partial class PendingChangesTab : IPendingChangesMenuOperations, IChangelistMenuOperations, IOpenMenuOperations, + PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations, IFilesFilterPatternsMenuOperations, PendingChangesViewMenu.IGetSelectedNodes, ChangesetsTab.IRevertToChangesetListener @@ -571,13 +572,13 @@ void IChangelistMenuOperations.Undo() true, out changesToUndo, out dependenciesCandidates); UndoChangesForMode( - mWkInfo, mIsGluonMode, + mWkInfo, mIsGluonMode, changesToUndo, dependenciesCandidates); } void IChangelistMenuOperations.CreateNew() { - ChangelistCreationData changelistCreationData = + ChangelistCreationData changelistCreationData = CreateChangelistDialog.CreateChangelist(mWkInfo, mParentWindow); ChangelistOperations.CreateNew(mWkInfo, this, changelistCreationData); @@ -594,7 +595,7 @@ void IChangelistMenuOperations.MoveToNewChangelist(List changes) ChangelistOperations.CreateNew(mWkInfo, this, changelistCreationData); ChangelistOperations.MoveToChangelist( - mWkInfo, this, changes, + mWkInfo, this, changes, changelistCreationData.ChangelistInfo.Name); } @@ -679,7 +680,7 @@ void IFilesFilterPatternsMenuOperations.AddFilesFilterPatterns( bool isApplicableToAllWorkspaces = !mIsGluonMode; bool isAddOperation = operation == FilterOperationType.Add; - FilterRulesConfirmationData filterRulesConfirmationData = + FilterRulesConfirmationData filterRulesConfirmationData = FilterRulesConfirmationDialog.AskForConfirmation( rules, isAddOperation, isApplicableToAllWorkspaces, mParentWindow); @@ -687,6 +688,16 @@ void IFilesFilterPatternsMenuOperations.AddFilesFilterPatterns( mWkInfo, mWorkspaceWindow, type, operation, filterRulesConfirmationData); } + void PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations.UndoUnchanged() + { + UndoUnchangedFor(PendingChangesSelection.GetSelectedChanges(mPendingChangesTreeView)); + } + + void PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations.UndoCheckoutsKeepingChanges() + { + UndoCheckoutsKeepingChangesFor(PendingChangesSelection.GetSelectedChanges(mPendingChangesTreeView)); + } + List PendingChangesViewMenu.IGetSelectedNodes.GetSelectedNodes() { return mPendingChangesTreeView.GetSelectedNodes(); @@ -837,7 +848,7 @@ void DoCommentsSection() DoOperationsToolbar( mWkInfo, mIsGluonMode, - mAdvancedDropdownMenu, + mUndoDropdownMenu, mProgressControls.IsOperationRunning()); GUILayout.FlexibleSpace(); EditorGUILayout.EndVertical(); @@ -854,7 +865,7 @@ void DoCommentsSection() void DoOperationsToolbar( WorkspaceInfo wkInfo, bool isGluonMode, - GenericMenu advancedDropdownMenu, + GenericMenu undoDropdownMenu, bool isOperationRunning) { EditorGUILayout.BeginHorizontal(); @@ -867,14 +878,13 @@ void DoOperationsToolbar( CheckinForMode(wkInfo, isGluonMode, mKeepItemsLocked); } - else if (DrawActionButton.ForCommentSection( + if (DrawActionButton.ForCommentSection( PlasticLocalization.GetString( PlasticLocalization.Name.CheckinChanges))) { UpdateIsCommentWarningNeeded(CommentText); - if (!mIsEmptyCheckinCommentWarningNeeded && - mPendingChangesTreeView.GetCheckedItemCount() > 0) + if (!mIsEmptyCheckinCommentWarningNeeded) { CheckinForMode(wkInfo, isGluonMode, mKeepItemsLocked); } @@ -882,13 +892,7 @@ void DoOperationsToolbar( GUILayout.Space(2); - if (DrawActionButton.ForCommentSection(PlasticLocalization.GetString( - PlasticLocalization.Name.UndoChanges))) - { - TrackFeatureUseEvent.For(PlasticGui.Plastic.API.GetRepositorySpec(wkInfo), - TrackFeatureUseEvent.Features.UndoTextButton); - UndoForMode(wkInfo, isGluonMode); - } + DoUndoButton(wkInfo, isGluonMode, undoDropdownMenu); if (isGluonMode) { @@ -897,22 +901,39 @@ void DoOperationsToolbar( mKeepItemsLocked, GUILayout.Width(UnityConstants.EXTRA_LARGE_BUTTON_WIDTH)); } - //TODO: Codice - beta: hide the advanced menu until the behavior is implemented - /*else - { - var dropDownContent = new GUIContent(string.Empty); - var dropDownRect = GUILayoutUtility.GetRect( - dropDownContent, EditorStyles.toolbarDropDown); - - if (EditorGUI.DropdownButton(dropDownRect, dropDownContent, - FocusType.Passive, EditorStyles.toolbarDropDown)) - advancedDropdownMenu.DropDown(dropDownRect); - }*/ } EditorGUILayout.EndHorizontal(); } + void DoUndoButton(WorkspaceInfo wkInfo, bool isGluonMode, GenericMenu undoDropdownMenu) + { + string undoText = PlasticLocalization.GetString(PlasticLocalization.Name.UndoChanges); + + if (isGluonMode) + { + if (DrawActionButton.ForCommentSection(undoText)) + { + UndoChangesAction(wkInfo, true); + } + } + else + { + DrawActionButtonWithMenu.For( + undoText, + () => UndoChangesAction(wkInfo, false), + undoDropdownMenu); + } + } + + void UndoChangesAction(WorkspaceInfo wkInfo, bool isGluonMode) + { + TrackFeatureUseEvent.For(PlasticGui.Plastic.API.GetRepositorySpec(wkInfo), + TrackFeatureUseEvent.Features.UndoTextButton); + + UndoForMode(wkInfo, isGluonMode); + } + void UpdateChangesTree(List changes) { mPendingChangesTreeView.BuildModel(changes, mCheckedStateManager); @@ -1038,7 +1059,8 @@ static void DrawInviteOtherTeamMembersEmptyState(Rect rect, string organizationT ExternalLink inviteUsersLink = new ExternalLink { Label = PlasticLocalization.GetString(PlasticLocalization.Name.InviteOtherTeamMembers), - Url = UnityUrl.UnityDashboard.Plastic.GetForInviteUsers(organizationToInviteUsers) + Url = UnityUrl.UnityDashboard.Plastic.GetForInviteUsers( + organizationToInviteUsers, UnityUrl.UnityDashboard.UnityCloudRequestSource.Editor) }; DrawTreeViewEmptyState.For( @@ -1081,10 +1103,13 @@ void BuildComponents( { mHelpPanel = new HelpPanel(plasticWindow); - mAdvancedDropdownMenu = new GenericMenu(); - mAdvancedDropdownMenu.AddItem(new GUIContent( - PlasticLocalization.GetString(PlasticLocalization.Name.UndoUnchangedButton)), - false, () => { }); + mUndoDropdownMenu = new GenericMenu(); + mUndoDropdownMenu.AddItem( + new GUIContent(PlasticLocalization.GetString(PlasticLocalization.Name.UndoUnchangedButton)), + false, UndoUnchanged); + mUndoDropdownMenu.AddItem( + new GUIContent(PlasticLocalization.GetString(PlasticLocalization.Name.UndoCheckoutsKeepingChanges)), + false, UndoCheckoutsKeepingChanges); mSearchField = new SearchField(); mSearchField.downOrUpArrowKeyPressed += SearchField_OnDownOrUpArrowKeyPressed; @@ -1098,15 +1123,16 @@ void BuildComponents( mPendingChangesTreeView = new PendingChangesTreeView( mWkInfo, mIsGluonMode, headerState, PendingChangesTreeHeaderState.GetColumnNames(), - new PendingChangesViewMenu(mWkInfo, this, this, this, this, this, this, mIsGluonMode), + new PendingChangesViewMenu(mWkInfo, this, this, this, this, this, this, this, mIsGluonMode), mAssetStatusCache); mPendingChangesTreeView.Reload(); mMergeLinksListView = new MergeLinksListView(); mMergeLinksListView.Reload(); } + INewChangesInWk mNewChangesInWk; - GenericMenu mAdvancedDropdownMenu; + GenericMenu mUndoDropdownMenu; void ClearComments() { @@ -1158,6 +1184,6 @@ void ClearComments() readonly ViewHost mViewHost; readonly WorkspaceInfo mWkInfo; - static readonly ILog mLog = LogManager.GetLogger("PendingChangesTab"); + static readonly ILog mLog = PlasticApp.GetLogger("PendingChangesTab"); } } diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab_Operations.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab_Operations.cs index 359c55e..b9d1023 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab_Operations.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTab_Operations.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Threading.Tasks; using Codice.Client.Commands.CheckIn; using Codice.Client.BaseCommands; @@ -35,7 +34,7 @@ internal void UndoForMode( return; } - Undo(); + Undo(false); } void UndoChangesForMode( @@ -57,8 +56,7 @@ void UndoChangesForMode( return; } - UndoChanges( - changesToUndo, dependenciesCandidates); + UndoChanges(changesToUndo, dependenciesCandidates, false); } void CheckinForMode( @@ -281,7 +279,7 @@ void PartialUndoChanges( RefreshAsset.UnityAssetDatabase); } - void Undo() + void Undo(bool keepLocalChanges) { List changesToUndo; List dependenciesCandidates; @@ -290,12 +288,13 @@ void Undo() null, true, out changesToUndo, out dependenciesCandidates); - UndoChanges(changesToUndo, dependenciesCandidates); + UndoChanges(changesToUndo, dependenciesCandidates, keepLocalChanges); } void UndoChanges( List changesToUndo, - List dependenciesCandidates) + List dependenciesCandidates, + bool keepLocalChanges) { if (CheckEmptyOperation(changesToUndo, HasPendingMergeLinks())) { @@ -311,11 +310,51 @@ void UndoChanges( changesToUndo, dependenciesCandidates, mPendingMergeLinks.Count, - false, + keepLocalChanges, RefreshAsset.UnityAssetDatabase, null); } + void UndoUnchanged() + { + List changesToUndo; + List dependenciesCandidates; + + mPendingChangesTreeView.GetCheckedChanges( + null, true, + out changesToUndo, out dependenciesCandidates); + + UndoUnchangedFor(changesToUndo); + } + + void UndoUnchangedFor(List changesToUndo) + { + if (CheckEmptyOperation(changesToUndo, HasPendingMergeLinks())) + { + ((IProgressControls) mProgressControls).ShowWarning( + PlasticLocalization.GetString(PlasticLocalization.Name.NoItemsToUndo)); + + return; + } + + SaveAssets.ForChangesWithoutConfirmation(changesToUndo, mWorkspaceOperationsMonitor); + + mPendingChangesOperations.UndoUnchanged( + changesToUndo, + RefreshAsset.UnityAssetDatabase, + null); + } + + void UndoCheckoutsKeepingChanges() + { + Undo(true); + } + + void UndoCheckoutsKeepingChangesFor(List changesToUndo) + { + UndoChanges(changesToUndo, new List(), true); + } + void EndCheckin() { ShowCheckinSuccess(); diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTreeView.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTreeView.cs index fbe115c..59b5424 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTreeView.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesTreeView.cs @@ -283,14 +283,19 @@ in mTreeViewItemIds.GetInfoItems()) if (changeInfo.IsDirectory) { dirChanges.Add(changeInfo); - continue; + } + else + { + fileChanges.Add(changeInfo); } - fileChanges.Add(changeInfo); - } + ChangeInfo metaChangeInfo = mPendingChangesTree.GetMetaChange(changeInfo); - mPendingChangesTree.FillWithMeta(fileChanges); - mPendingChangesTree.FillWithMeta(dirChanges); + if (metaChangeInfo != null) + { + fileChanges.Add(metaChangeInfo); + } + } privateDirectories = dirChanges.Select( d => d.GetFullPath()).ToList(); diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewMenu.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewMenu.cs index fb1d9fe..876f29d 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewMenu.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewMenu.cs @@ -24,6 +24,7 @@ internal PendingChangesViewMenu( IFilesFilterPatternsMenuOperations filterMenuOperations, IOpenMenuOperations openMenuOperations, PendingChangesViewPendingChangeMenu.IMetaMenuOperations metaMenuOperations, + PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations advancedUndoMenuOperations, IChangelistMenuOperations changelistMenuOperations, IGetSelectedNodes getSelectedNodes, bool isGluonMode) @@ -33,6 +34,7 @@ internal PendingChangesViewMenu( mFilterMenuOperations = filterMenuOperations; mOpenMenuOperations = openMenuOperations; mMetaMenuOperations = metaMenuOperations; + mAdvancedUndoMenuOperations = advancedUndoMenuOperations; mChangelistMenuOperations = changelistMenuOperations; mGetSelectedNodes = getSelectedNodes; mIsGluonMode = isGluonMode; @@ -82,7 +84,9 @@ PendingChangesViewPendingChangeMenu GetPendingChangeMenu() mChangelistMenuOperations, mOpenMenuOperations, mMetaMenuOperations, - mFilterMenuOperations); + mAdvancedUndoMenuOperations, + mFilterMenuOperations, + mIsGluonMode); } return mPendingChangeMenu; @@ -126,6 +130,7 @@ static bool AreAllPendingChanges(List selectedNodes) readonly IFilesFilterPatternsMenuOperations mFilterMenuOperations; readonly IOpenMenuOperations mOpenMenuOperations; readonly PendingChangesViewPendingChangeMenu.IMetaMenuOperations mMetaMenuOperations; + readonly PendingChangesViewPendingChangeMenu.IAdvancedUndoMenuOperations mAdvancedUndoMenuOperations; readonly IChangelistMenuOperations mChangelistMenuOperations; readonly IGetSelectedNodes mGetSelectedNodes; readonly bool mIsGluonMode; diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewPendingChangeMenu.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewPendingChangeMenu.cs index 7bb44a6..73f0b5b 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewPendingChangeMenu.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingChangesViewPendingChangeMenu.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; - +using System.Linq; +using Codice.Client.BaseCommands; using UnityEditor; using UnityEngine; @@ -27,18 +28,28 @@ internal interface IMetaMenuOperations bool SelectionHasMeta(); } + internal interface IAdvancedUndoMenuOperations + { + void UndoUnchanged(); + void UndoCheckoutsKeepingChanges(); + } + internal PendingChangesViewPendingChangeMenu( WorkspaceInfo wkInfo, IPendingChangesMenuOperations pendingChangesMenuOperations, IChangelistMenuOperations changelistMenuOperations, IOpenMenuOperations openMenuOperations, IMetaMenuOperations metaMenuOperations, - IFilesFilterPatternsMenuOperations filterMenuOperations) + IAdvancedUndoMenuOperations advancedUndoMenuOperations, + IFilesFilterPatternsMenuOperations filterMenuOperations, + bool isGluonMode) { mPendingChangesMenuOperations = pendingChangesMenuOperations; mChangelistMenuOperations = changelistMenuOperations; mOpenMenuOperations = openMenuOperations; mMetaMenuOperations = metaMenuOperations; + mAdvancedUndoMenuOperations = advancedUndoMenuOperations; + mIsGluonMode = isGluonMode; mFilterMenuBuilder = new FilesFilterPatternsMenuBuilder(filterMenuOperations); mMoveToChangelistMenuBuilder = new MoveToChangelistMenuBuilder( @@ -120,6 +131,16 @@ void DiffMetaMenuItem_Click() mMetaMenuOperations.DiffMeta(); } + void UndoUnchangedMenuItem_Click() + { + mAdvancedUndoMenuOperations.UndoUnchanged(); + } + + void UndoCheckoutsKeepingChangesMenuItem_Click() + { + mAdvancedUndoMenuOperations.UndoCheckoutsKeepingChanges(); + } + void UndoChangesMenuItem_Click() { mPendingChangesMenuOperations.UndoChanges(); @@ -198,10 +219,7 @@ void UpdateMenuItems(GenericMenu menu) menu.AddSeparator(string.Empty); - if (operations.HasFlag(PendingChangesMenuOperations.UndoChanges)) - menu.AddItem(mUndoChangesMenuItemContent, false, UndoChangesMenuItem_Click); - else - menu.AddDisabledItem(mUndoChangesMenuItemContent); + UpdateUndoMenuItems(operations, menu, info.SelectedChanges); menu.AddSeparator(string.Empty); @@ -293,6 +311,38 @@ void UpdateOpenMenuItems(GenericMenu menu, OpenMenuOperations operations) menu.AddDisabledItem(mOpenMetaInExplorerMenuItemContent); } + void UpdateUndoMenuItems(PendingChangesMenuOperations operations, GenericMenu menu, List changes) + { + if (!operations.HasFlag(PendingChangesMenuOperations.UndoChanges)) + { + menu.AddDisabledItem(mUndoChangesMenuItemContent); + return; + } + + if (mIsGluonMode) + { + menu.AddItem(mUndoChangesMenuItemContent, false, UndoChangesMenuItem_Click); + return; + } + + if (changes.Any(change => !ChangeTypesOperator.AreEquals(change.ChangeTypes, ChangeTypes.CheckedOut))) + { + menu.AddItem(mUndoChangesMenuItemContent, false, UndoChangesMenuItem_Click); + } + + if (changes.Any(change => ChangeTypesOperator.AreEquals(change.ChangeTypes, ChangeTypes.CheckedOut))) + { + menu.AddItem(mUndoUnchangedMenuItemContent, false, UndoUnchangedMenuItem_Click); + } + + if (changes.Any(change => + ChangeTypesOperator.ContainsAny(change.ChangeTypes, ChangeTypes.CheckedOut) && + ChangeTypesOperator.ContainsOther(change.ChangeTypes, ChangeTypes.CheckedOut))) + { + menu.AddItem(mUndoCheckoutsKeepingChangesMenuItemContent, false, UndoCheckoutsKeepingChangesMenuItem_Click); + } + } + GUIContent GetNoActionMenuItemContent() { if (mNoActionMenuItemContent == null) @@ -341,6 +391,10 @@ void BuildComponents() PlasticLocalization.GetString(PlasticLocalization.Name.DiffMetaMenuItem)); mUndoChangesMenuItemContent = new GUIContent( PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesMenuItemUndoChanges)); + mUndoUnchangedMenuItemContent = new GUIContent( + PlasticLocalization.GetString(PlasticLocalization.Name.UndoUnchangedButton)); + mUndoCheckoutsKeepingChangesMenuItemContent = new GUIContent( + PlasticLocalization.GetString(PlasticLocalization.Name.UndoCheckoutsKeepingChanges)); mCheckoutMenuItemContent = new GUIContent( PlasticLocalization.GetString(PlasticLocalization.Name.PendingChangesMenuItemCheckout)); mDeleteMenuItemContent = new GUIContent(string.Format("{0} {1}", @@ -460,6 +514,8 @@ static OpenMenuOperations GetOpenMenuOperation(Event e) GUIContent mDiffMenuItemContent; GUIContent mDiffMetaMenuItemContent; GUIContent mUndoChangesMenuItemContent; + GUIContent mUndoUnchangedMenuItemContent; + GUIContent mUndoCheckoutsKeepingChangesMenuItemContent; GUIContent mCheckoutMenuItemContent; GUIContent mDeleteMenuItemContent; GUIContent mViewHistoryMenuItemContent; @@ -470,6 +526,7 @@ static OpenMenuOperations GetOpenMenuOperation(Event e) readonly IOpenMenuOperations mOpenMenuOperations; readonly IChangelistMenuOperations mChangelistMenuOperations; readonly IPendingChangesMenuOperations mPendingChangesMenuOperations; + readonly IAdvancedUndoMenuOperations mAdvancedUndoMenuOperations; readonly FilesFilterPatternsMenuBuilder mFilterMenuBuilder; readonly MoveToChangelistMenuBuilder mMoveToChangelistMenuBuilder; readonly bool mIsGluonMode; diff --git a/Editor/PlasticSCM/Views/PendingChanges/PendingMergeLinks/MergeLinksListView.cs b/Editor/PlasticSCM/Views/PendingChanges/PendingMergeLinks/MergeLinksListView.cs index 34127a2..b66b941 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/PendingMergeLinks/MergeLinksListView.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/PendingMergeLinks/MergeLinksListView.cs @@ -7,6 +7,7 @@ using Codice.Client.Common; using Codice.CM.Common; using Codice.CM.Common.Merge; +using Codice.CM.Common.Mount; using PlasticGui.WorkspaceWindow.PendingChanges; using Unity.PlasticSCM.Editor.UI; using Unity.PlasticSCM.Editor.UI.Tree; diff --git a/Editor/PlasticSCM/Views/PendingChanges/UnityPendingChangesTree.cs b/Editor/PlasticSCM/Views/PendingChanges/UnityPendingChangesTree.cs index e6b58ca..59b6183 100644 --- a/Editor/PlasticSCM/Views/PendingChanges/UnityPendingChangesTree.cs +++ b/Editor/PlasticSCM/Views/PendingChanges/UnityPendingChangesTree.cs @@ -79,7 +79,7 @@ internal List GetDependenciesCandidates( bool bExcludePrivates) { return mInnerTree.GetDependenciesCandidates( - selectedChanges, bExcludePrivates); + new HashSet(selectedChanges), bExcludePrivates); } internal void BuildChangeCategories( @@ -92,7 +92,10 @@ internal void BuildChangeCategories( mInnerTree = BuildPendingChangesTree.FromChanges( wkInfo, changes, - checkedStateManager); + checkedStateManager, + PlasticGuiConfig.Get().Configuration.CommitUseChangeLists, + PlasticGuiConfig.Get().Configuration.CommitGroupInCategories, + PlasticGuiConfig.Get().Configuration.CommitViewAsATree); } internal ChangeInfo GetChangedForMoved(ChangeInfo moved) diff --git a/Editor/PlasticSCM/Views/Welcome/WelcomeView.cs b/Editor/PlasticSCM/Views/Welcome/WelcomeView.cs index 952698c..0412871 100644 --- a/Editor/PlasticSCM/Views/Welcome/WelcomeView.cs +++ b/Editor/PlasticSCM/Views/Welcome/WelcomeView.cs @@ -165,6 +165,10 @@ void DoConfigureButton(ProgressControlsForViews configureProgress) autoLoginState = AutoLogin.State.Running; AutoLogin autoLogin = new AutoLogin(); autoLogin.Run(); + } + + if (autoLoginState != AutoLogin.State.ErrorNoToken) + { return; } diff --git a/Editor/PlasticSCM/WebApi/WebRestApiClient.cs b/Editor/PlasticSCM/WebApi/WebRestApiClient.cs index 36a1ee1..c4ee55f 100644 --- a/Editor/PlasticSCM/WebApi/WebRestApiClient.cs +++ b/Editor/PlasticSCM/WebApi/WebRestApiClient.cs @@ -329,6 +329,6 @@ static void LogException(Exception ex, Uri endpoint) Environment.NewLine, ex.StackTrace); } - static readonly ILog mLog = LogManager.GetLogger("WebRestApiClient"); + static readonly ILog mLog = PlasticApp.GetLogger("WebRestApiClient"); } } diff --git a/Lib/Editor/PlasticSCM/Localization.meta b/Lib/Editor/PlasticSCM/Localization.meta index 4214806..3aba28c 100644 --- a/Lib/Editor/PlasticSCM/Localization.meta +++ b/Lib/Editor/PlasticSCM/Localization.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ec1133cd6a08cfa44b56058e36773d18 +guid: 2eb5ea14def0c1b4c8f1f287f85cab43 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt b/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt index d34c995..95bf008 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt @@ -1,3 +1,21 @@ +== AccessTokenId == +Id + +== AccessTokenDescription == +Description + +== AccessTokenOwner == +Owner + +== AccessTokenCreatedAt == +Created at + +== AccessTokenExpiresAt == +Expires at + +== AccessTokenLastUsedAt == +Last used at + == WrongRevFormat3D == The revision format specified is not valid @@ -25,9 +43,6 @@ Keep source changes (preserve the add and discard the move) == AddMoveConflictAction3 == Keep destination changes (preserve the move and discard the add) -== AddNotApplicable == -The new item cannot be loaded in the workspace. Probably, the path is already used. Please unload the item (from the configuration view) and retry the operation: '{0}'. - == Added == Added @@ -338,7 +353,7 @@ Warn pushing cs:{0}. {1}\n{2} Wrong branch name == BisyncWrongFileFormat == -The file '{0} is corrupt. The format of the line '{1}' is wrong. +The file '{0}' is corrupt. The format of the line '{1}' is wrong. == Branch == Branch @@ -1155,9 +1170,6 @@ An item has been deleted on the source and it was moved on the destination. == DeleteMoveConflictSourceOperation == Deleted {0} -== DeleteNotApplicable == -The item cannot be unloaded because the item wasn't found in the workspace. Your workspace might be corrupt. Please contact support: '{0}'. - == DeletePrivateDeletesSummary == Deleted {0} individual files and {1} directory trees. @@ -1528,129 +1540,9 @@ from == FsProtectionCannotBeApplied == The item '{0}' FS protections can't be applied because of the error: '{1}'. -== GameuiCheckinAddedMissingParentConflictAction == -Please undo the add operation or move it to an existing location in the server. - -== GameuiCheckinAddedMissingParentConflictDescription == -The item '{0}' cannot be added because its parent directory is not loaded anymore in the server. - -== GameuiCheckinAddedPathInUseConflictAction == -Please undo the add operation or move it to a free location in the server. - -== GameuiCheckinAddedPathInUseConflictDescription == -The item '{0}' cannot be added because there is another item loaded in the same location in the server. - == GameuiCheckinChangedFileConflictAction == Please undo your local changes, download the latest version and reapply your local changes. -== GameuiCheckinChangedFileConflictDescription == -'{0}' requires merge. - -== GameuiCheckinChangedMissingConflictAction == -Please undo your local changes or restore the item in an existing location in the server. - -== GameuiCheckinChangedMissingConflictDescription == -The item '{0}' cannot be changed because it is not loaded anymore in the server. - -== GameuiCheckinChangedXlinkConflictAction == -Please undo your local changes, download the latest version and edit the Xlink again. - -== GameuiCheckinChangedXlinkConflictDescription == -The target of the Xlink '{0}' cannot be changed because it was changed in the server. - -== GameuiCheckinCopiedLoadedConflictAction == -Please undo your local changes, download the latest version and reapply your local changes. - -== GameuiCheckinCopiedLoadedConflictDescription == -The item '{0}' cannot be copied because it is already loaded in the server. - -== GameuiCheckinCopiedMissingParentConflictAction == -Please undo the copy operation or move it to an existing location in the server. - -== GameuiCheckinCopiedMissingParentConflictDescription == -The item '{0}' cannot be copied because its parent directory is not loaded anymore in the server. - -== GameuiCheckinCopiedPathInUseConflictAction == -Please undo the copy operation or move it to a free location in the server. - -== GameuiCheckinCopiedPathInUseConflictDescription == -The item '{0}' cannot be copied because there is another item loaded in the same location in the server. - -== GameuiCheckinDeletedAlreadyDeletedConflictAction == -Please undo the delete operation and update to the latest version. - -== GameuiCheckinDeletedAlreadyDeletedConflictDescription == -The item '{0}' cannot be deleted because the item is not loaded anymore in the server. - -== GameuiCheckinDeletedChangedWarningDescription == -The deleted item '{0}' has been changed in the server. If the deleted is applied, the server change will be lost. - -== GameuiCheckinDeletedMovedWarningDescription == -The deleted item '{0}' has been moved in the server. If the deleted is applied, the server move will be lost. - -== GameuiCheckinDeletedWarningAction == -Are you sure that you want to delete the item '{0}'? - -== GameuiCheckinDirReplacedChangedConflictDescription == -The item '{0}' cannot be reverted because it was already changed in the server. - -== GameuiCheckinFileReplacedChangedConflictDescription == -'{0}' requires merge. - -== GameuiCheckinFsProtectionMissingConflictAction == -Please undo your local changes or restore the item in an existing location in the server. - -== GameuiCheckinFsProtectionMissingConflictDescription == -The permissions for item '{0}' cannot be changed because it is not loaded anymore in the server. - -== GameuiCheckinMovedAlreadyMovedConflictAction == -Please undo the move operation and update to the latest version. - -== GameuiCheckinMovedAlreadyMovedConflictDescription == -The item '{0}' cannot be moved to '{1}' because it is already loaded in the destination in the server. - -== GameuiCheckinMovedDivergentConflictAction == -Do you want to move the item '{0}' to '{1}' anyway? - -== GameuiCheckinMovedDivergentConflictDescription == -The moved item '{0}' has been moved to a different place in the server. If move is applied the server move will be lost. - -== GameuiCheckinMovedDstInUseConflictAction == -Please undo the move operation or move it to a free location in the server. - -== GameuiCheckinMovedDstInUseConflictDescription == -The item '{0}' cannot be moved to '{1}' because there is another item loaded in the same location in the server. - -== GameuiCheckinMovedInsideItselfConflictAction == -Please undo the move operation or move it to valid location in the server. - -== GameuiCheckinMovedInsideItselfConflictDescription == -The item '{0}' cannot be moved inside '{1}' because '{1}' is loaded inside '{0}' in the server. - -== GameuiCheckinMovedMissingDstConflictAction == -Please undo the move operation or move the item to an existing location in the server. - -== GameuiCheckinMovedMissingDstConflictDescription == -The item '{0}' cannot be moved to '{1}' because the destination is not loaded anymore in the server. - -== GameuiCheckinMovedMissingItemConflictAction == -Please undo the move operation or restore the item in an existing location in the server. - -== GameuiCheckinMovedMissingItemConflictDescription == -The item '{0}' cannot be moved because it is not loaded anymore in the server. - -== GameuiCheckinReplacedChangedConflictAction == -Please undo your revert operation, download the latest version and revert it. - -== GameuiCheckinReplacedMissingConflictAction == -Please undo your revert operation. - -== GameuiCheckinReplacedMissingConflictDescription == -The item '{0}' cannot be reverted because it is not loaded anymore in the server. - -== GameuiOutOfDateUnresolvedXlink == -The xlink '{0}' cannot be resolved. The items under an unresolved xlink cannot be updated. - == GetfileRevdatanotfound == No data found for the given spec @@ -1996,9 +1888,6 @@ The item '{0}' won't be moved because it wasn't selected although the destinatio == MoveItemAlreadyChanged == The item won't be moved because it is already changed (checked-out, locally changed, deleted, moved or reverted) in the workspace: '{0}'. Please undo or checkin the local change and retry the operation. -== MoveNotApplicable == -The item cannot be moved to '{0}'. Probably, the destination path is already used. Please unload the item (from the configuration view) and retry the operation. - == MoveSourceDelete == Move out of delete conflict @@ -2126,6 +2015,9 @@ The file that contains the name {0} does not allow neither empty nor multiline t == NameNotValid == The name {0} is not valid anymore +== Never == +Never + == NewBrNameParamNotBrspec == The new name parameter must contain a branch name and not a branch specification diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt.meta index 5c48f1c..b0232b0 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9531f2b5d7a492241933c2553712d944 +guid: e91f9e1e88dcd244e96ca49b97e21f08 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt b/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt index 0824373..efc0267 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt @@ -1,3 +1,21 @@ +== AccessTokenId == +Id + +== AccessTokenDescription == +Descripción + +== AccessTokenOwner == +Usuario + +== AccessTokenCreatedAt == +Creación + +== AccessTokenExpiresAt == +Expiración + +== AccessTokenLastUsedAt == +Último uso + == WrongRevFormat3D == El formato de la revision especificado no es valido @@ -25,9 +43,6 @@ Mantener los cambios en origen (preservar el añadido y descartar el movido) == AddMoveConflictAction3 == Mantener los cambios en destino (preservar el movido y descartar el añadido) -== AddNotApplicable == -El ítem no puede ser descargado en el workspace. Posiblemente, el path ya está en uso. Por favor, desmarque el ítem (desde la vista de configuración) y reintente la operación: '{0}'. - == Added == Añadido @@ -1168,9 +1183,6 @@ Un ítem ha sido borrado en el origen y también fue movido en el destino. == DeleteMoveConflictSourceOperation == Borrado {0} -== DeleteNotApplicable == -El ítem no puede ser borrado porque no ha sido encontrado. Su workspace podría estar corrupto. Por favor, contacte con el equipo de soporte: '{0}'. - == DeletePrivateDeletesSummary == Se borraron {0} ficheros individuales y {1} árboles de directorio. @@ -1541,129 +1553,9 @@ de == FsProtectionCannotBeApplied == Al ítem '{0}' no se le pueden fijar los permisos del sistema de ficheros debido al error:'{1}'. -== GameuiCheckinAddedMissingParentConflictAction == -Por favor, deshaga el añadido o muévalo a una ruta que exista en el servidor. - -== GameuiCheckinAddedMissingParentConflictDescription == -El ítem '{0}' no se puede añadir porque su directorio padre ya no está cargado en el servidor. - -== GameuiCheckinAddedPathInUseConflictAction == -Por favor, deshaga el añadido o muévalo a una ruta que este libre en el servidor. - -== GameuiCheckinAddedPathInUseConflictDescription == -El ítem '{0}' no se puede añadir porque hay otro ítem cargado en el mismo sitio en el servidor. - == GameuiCheckinChangedFileConflictAction == Por favor, deshaga su cambio local, descargue la última versión y reaplique sus cambios locales. -== GameuiCheckinChangedFileConflictDescription == -'{0}' necesita merge. - -== GameuiCheckinChangedMissingConflictAction == -Por favor, deshaga el cambio o restaure el ítem en una ruta que exista en el servidor. - -== GameuiCheckinChangedMissingConflictDescription == -El ítem '{0}' no se puede modificar porque ya no está cargado en el servidor. - -== GameuiCheckinChangedXlinkConflictAction == ->Por favor, deshaga su cambio local, descargue la última versión y vuelva a editar el Xlink. - -== GameuiCheckinChangedXlinkConflictDescription == -El destino del Xlink '{0}' no se puede cambiar porque fue modificado en el servidor. - -== GameuiCheckinCopiedLoadedConflictAction == -Por favor, deshaga su cambio local, descargue la última versión y reaplique sus cambios locales. - -== GameuiCheckinCopiedLoadedConflictDescription == -El ítem '{0}' no se puede copiar porque ese ítem ya esta cargado en el servidor. - -== GameuiCheckinCopiedMissingParentConflictAction == -Por favor, deshaga el copiado o muévalo a una ruta que exista en el servidor. - -== GameuiCheckinCopiedMissingParentConflictDescription == -El ítem '{0}' no se puede copiar porque su directorio padre ya no está cargado en el servidor. - -== GameuiCheckinCopiedPathInUseConflictAction == -Por favor, deshaga el copiado o muévalo a una ruta que este libre en el servidor. - -== GameuiCheckinCopiedPathInUseConflictDescription == -El ítem '{0}' no se puede copiar porque hay otro ítem cargado en el mismo sitio en el servidor. - -== GameuiCheckinDeletedAlreadyDeletedConflictAction == -Por favor, deshaga el borrado y actualícese a la última versión. - -== GameuiCheckinDeletedAlreadyDeletedConflictDescription == -El ítem '{0}' no se puede borrar porque ya no está cargado en el servidor. - -== GameuiCheckinDeletedChangedWarningDescription == -El ítem borrado '{0}' ha sido modificado en el servidor. Si se borra el ítem, el cambio del servidor se perderá. - -== GameuiCheckinDeletedMovedWarningDescription == -El ítem borrado '{0}' ha sido movido en el servidor. Si se borra el ítem, el movido del servidor se perderá. - -== GameuiCheckinDeletedWarningAction == -¿Está seguro que desea borrar el ítem '{0}'? - -== GameuiCheckinDirReplacedChangedConflictDescription == -El ítem '{0}' no se puede reemplazar (revert) porque fue modificado en el servidor. - -== GameuiCheckinFileReplacedChangedConflictDescription == -'{0}' necesita merge. - -== GameuiCheckinFsProtectionMissingConflictAction == -Por favor, deshaga el cambio o restaure el ítem en una ruta que exista en el servidor. - -== GameuiCheckinFsProtectionMissingConflictDescription == -Los permisos del ítem '{0}' no se puede modificar porque ya no está cargado en el servidor. - -== GameuiCheckinMovedAlreadyMovedConflictAction == -Por favor, deshaga el movido y actualícese a la última versión. - -== GameuiCheckinMovedAlreadyMovedConflictDescription == -El ítem '{0}' no se puede mover a '{1}' porque ya está cargado en el destino en el servidor. - -== GameuiCheckinMovedDivergentConflictAction == -¿Está seguro que desea mover el ítem '{0}' a '{1}'? - -== GameuiCheckinMovedDivergentConflictDescription == -El ítem movido '{0}' ha sido movido en el servidor a otra ruta. Si se aplica el movido local, el movido del servidor se perderá. - -== GameuiCheckinMovedDstInUseConflictAction == -Por favor, deshaga el movido o muévalo a una ruta que este libre en el servidor. - -== GameuiCheckinMovedDstInUseConflictDescription == -El ítem '{0}' no se puede mover a '{1}' porque hay otro ítem cargado en el mismo sitio en el servidor. - -== GameuiCheckinMovedInsideItselfConflictAction == -Por favor, deshaga el movido o muévalo a una ruta valida en el servidor. - -== GameuiCheckinMovedInsideItselfConflictDescription == -El ítem '{0}' no se puede mover dentro de '{1}' porque '{1}' está cargado dentro '{0}' en el servidor. - -== GameuiCheckinMovedMissingDstConflictAction == -Por favor, deshaga el movido o mueva el ítem a una ruta que exista en el servidor. - -== GameuiCheckinMovedMissingDstConflictDescription == -El ítem '{0}' no se puede mover a '{1}' porque el destino ya no está cargado en el servidor. - -== GameuiCheckinMovedMissingItemConflictAction == -Por favor, deshaga el movido o restaure el ítem en una ruta que exista en el servidor. - -== GameuiCheckinMovedMissingItemConflictDescription == -El ítem '{0}' no se puede mover porque ya no está cargado en el servidor. - -== GameuiCheckinReplacedChangedConflictAction == -Por favor, deshaga el reemplazo (revert), descargue la última versión y reemplácela (revert) de nuevo. - -== GameuiCheckinReplacedMissingConflictAction == -Por favor, deshaga el reemplazo (revert). - -== GameuiCheckinReplacedMissingConflictDescription == -El ítem '{0}' no se puede reemplazar (revert) porque ya no está cargado en el servidor. - -== GameuiOutOfDateUnresolvedXlink == -El xlink '{0}' no pudo resolverse. Los ítems debajo de un xlink no resuelto no pueden actualizarse. - == GetfileRevdatanotfound == No hay datos para la especificación dada @@ -2009,9 +1901,6 @@ El ítem '{0}' no será movido porque no fue seleccionado aunque el destino del == MoveItemAlreadyChanged == El ítem no será movido porque se encuentra cambiado (checked-out, cambiado, borrado o movido) en el workspace: '{0}'. Por favor, deshaga o confirme el cambio local y reintente la operación. -== MoveNotApplicable == -El ítem no puede ser movido a '{0}'. Posiblemente, el path ya está en uso. Por favor, descargue el ítem del workspace y reintente la operación. - == MoveSourceDelete == Conflicto de movido fuera de borrado @@ -2137,6 +2026,9 @@ El archivo que contiene el nombre {0} no permite textos formados sólo por espac == NameNotValid == El nombre {0} no es válido +== Never == +Nunca + == NewBrNameParamNotBrspec == El parametro nuevo nombre debe ser un nombre de rama y no una especificación de rama diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt.meta index a75092e..0435316 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2425bd43346823e43bf8f8cc47c59b3a +guid: fb9cb462525fd0a4192f80be82f05cdb TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.ja.txt.meta index 78d04aa..92bee5d 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 44a72f01eca979445811543de726f924 +guid: 393f1611a17563c44a5f4b7451512cbb TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.ko.txt.meta index 314f274..409c21b 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0fe8a36e2376a384597a2a3533683150 +guid: 333464e3b2edea145baf9f37af07864f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hans.txt.meta index f22474d..4d904ed 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9c51bf7c83fb9a340a97c6ddab4e5d1b +guid: a2846335ef7d18649b53733b067c5f4c TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hant.txt.meta index 87746da..d6e091b 100644 --- a/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/basecommands.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a3c88f08c8310834b90242d4e39ec117 +guid: fafa8998fb8bb82408932f7d698dee7f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.en.txt.meta index 4444033..c98dac2 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2f45212865c7f894f8ebf31f7074aeeb +guid: 5d86559a6a7fa294fa1733b7bb3c25d2 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.es.txt.meta index 50387a6..10af20a 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 60d599dccb7f16b42baa6084bb4615db +guid: c3a5c66d3d0bccc41b59ea4b1ed18f13 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.ja.txt.meta index 4693024..77b18d0 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c030f38e213ed544d8133dd94798715e +guid: 6259d325038a6a74f81c52f5a0e68a06 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.ko.txt.meta index 9d2c2c2..a37f4e7 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9869c1245ddb63b4d8974b7d64236e0e +guid: 2747668b3f983774e90dde894629321c TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hans.txt.meta index 470c0e2..057cd4e 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ae450e51e557a64cbe1f1ac2422d9db +guid: 622a1cc9631405142b604cf028b289ce TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hant.txt.meta index d8d69da..c99794d 100644 --- a/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/binmergetool.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 103f098d447c1b14ab34b296bf9a46c1 +guid: a2aacc9bece173f41b90b7aaa1131737 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt b/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt index 866a207..9dd9ad0 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt @@ -1,7 +1,4 @@ -== AddNotAllowedPathIsFreeByTransformerRule == -The item '{0}' cannot be added. The path '{0}' is already in use in the server but it's free on the client because of the transformer rule '{1}'. - -== AddedItemCannotBeLocked == +== AddedItemCannotBeLocked == The item '{0}' cannot be locked because it's an added item. (Note: if the item doesn't appear as an added item then the workspace could be corrupted. Please contact with support) == AdminReadonlyNotSupported == @@ -231,9 +228,6 @@ The changeset '{0}' content cannot be loaded. == OneDayAgo == 1 day ago -== DeleteNotAllowedTransfomerRuleInside == -The item '{0}' cannot be deleted because it contains the transformer rule '{1}'. - == DestinationField == Destination @@ -347,12 +341,6 @@ Branch expansion rules: == FailConnectionServer == Connection to server {0} could not be established -== FastChgRepNotAllowedOnTransWk == -The fast update cannot be used to change the target repository using transformer rules. Please use the standard update. - -== FastNotAllowedRuleRestricion == -The fast update is not allowed, because the server change '{0}' could not be applied on the workspace with the transformer rule '{1}'. Please update the workspace transformer rules if needed and use the standard update. - == FastUpdCloakedError == The fast update cannot be used with cloaked rules. Please use the standard update. @@ -383,9 +371,6 @@ Not on workspace. "on repositories" clause is needed on the query. == FormatterError == The field {0} is not valid for the specified object type -== GameUiCiHeadOutOfDateError == -The checkin operation cannot be completed because new changes were created in the repository '{0}' since the operation began. Please retry the checkin operation to take into account the new server changes. - == GameuiCiInsideUnresolvedXlinkNotAllowed == The xlink '{0}' cannot be resolved. Changes under an unresolved xlink cannot be checked in. @@ -425,9 +410,6 @@ The server {0} doesn't support the Incoming Changes operation. Please upgrade th == IncomingChangesReadonlyXlinksNotSupported == Read-only Xlinks changes are not currently supported by the Incoming Changes. Please just run a regular merge to get the latest changes. -== IncomingTansformerRulesNotSupported == -The workspace contains transformer rules. The transformer rules are not currently supported by the Incoming Changes. Please update your workspace undoing any pending change first. If you have pending changes that want to preserve, you can shelve them before undoing them and apply the shelf after the update. - == IncomingWxlinkBackwardEditionNotSupported == The writable Xlink '{0}' was edited to point to a previous (older) changeset. This edition of a writable Xlink is not currently supported by the Incoming Changes. Please update your workspace undoing any pending change first. If you have pending changes that want to preserve, you can shelve them before undoing them and apply the shelf after the update. @@ -567,33 +549,9 @@ Top-level branches are not allowed in this edition, only child branches can be c == Merge == Merge -== MergeAddNotAllowedPathFreeByRule == -The item '{0}' cannot be added. The path '{0}' is already in use in the server but it's free on the client because of the transformer rule '{1}'. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeDeleteNotAllowedRuleInside == -The item '{0}' cannot be deleted because it contains the transformer rule '{1}'. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeMoveNotAllowedPathFreeByRule == -The item '{0}' cannot be moved to '{1}'. The path '{1}' is already in use in the server but it's free on the client because of the transformer rule '{2}'. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeMoveNotAllowedTransformedItem == -The item '{0}' cannot be moved because it has been transformed by the rule '{1}'. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - == MergeNeeded == A merge is needed from changeset 'cs:{0}@rep:{2}@repserver:{3}(mount:{4})' to changeset 'cs:{1}@rep:{2}@repserver:{3}(mount:{4})' in order to checkin. The checkin operation cannot continue. Please run 'cm merge "cs:{0}@rep:{2}@repserver:{3}" --merge' at '{5}' to solve the conflicts. Then, you can retry the checkin operation. -== MergeRestorerDeletedPathInUse == -The deleted path by the transformer rule '{0}' has been reused by the transformer rule '{1}', so the deleted content cannot be restored. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeRestorerRmRuleCannotBeLoaded == -The content of the transformer rule '{0}' cannot be loaded. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeRestorerRmRuleMountMissing == -The mount point of the transformer rule '{0}' cannot be found. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - -== MergeRestorerRmRuleParentMissing == -The content of the transformer rule '{0}' cannot be restored because its parent '{1}' is not loaded on the workspace. The merge cannot be completed with the current transformer rules. Please remove the involved transformer rule (or use a not transformed workspace) and try the merge again. - == MergeToPendingDirectoryConflicts == There are pending directory conflicts that must be resolved before processing the merge-to. @@ -633,12 +591,6 @@ The parent branch {0} was not found on the repository server == OneMonthAgo == 1 month ago -== MoveNotAllowedForTransformedItem == -The item '{0}' cannot be moved because it has been transformed by the rule '{1}'. - -== MoveNotAllowedPathIsFreeByTransformerRule == -The item '{0}' cannot be moved to '{1}'. The path '{1}' is already in use in the server but it's free on the client because of the transformer rule '{2}'. - == MultipleWorkspaceNotAllowed == The {0} operation cannot be executed using items from different workspaces. Please retry the operation with the items of each workspace. @@ -789,27 +741,6 @@ The branch {0} has more than one head. Please merge it to be able to continue sy == SyncBranchesWithMultipleHeads == The branches {0} have more than one head. Please merge them to be able to continue synchronizing -== TransformedItemAlreadyApplied == -Rule '{0}' cannot be applied because a rule for the same item was already applied '{1}' - -== TransformerMvRuleDstInUseError == -The rule '{0}' cannot be applied because the destination path is in use. - -== TransformerMvRuleDstInsideSrcError == -Rule '{0}' cannot be applied because an item cannot be moved inside itself. - -== TransformerMvRuleModifiesAppliedRule == -Rule '{0}' cannot be applied because it modifies an already applied rule ('{1}'). - -== TransformerRmRuleMvInsideError == -Rule '{0}' cannot be applied because it contains a move rule ('{1}'). - -== TransformerRuleDeleteRootError == -Rule '{0}' cannot be applied because the root item cannot be deleted. - -== TransformerRuleMissingPathError == -Rule '{0}' cannot be applied because the path '{1}' is not found. - == TriggerNameField == Trigger name @@ -942,9 +873,6 @@ Failed to mount the dynamic workspace {0} after {1} seconds. == WkDynamicMultipleNotMountedYet == Failed to mount the following dynamic workspaces after {0} seconds: {1}. -== GameUiCheckinConflictsError == -The checkin/shelve operation cannot be completed because some local changes cannot be applied on the current server version. Please check the conflicts between your local changes and the current server version. - == IsNotWk == {0} is not in a workspace. diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt.meta index 284a58a..f262664 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe4006dfe30d4354f8b7dde1d5f4593b +guid: bb01a6b47c3b7274c84f0f3618536387 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt b/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt index e1e682b..dc0843f 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt @@ -1,7 +1,4 @@ -== AddNotAllowedPathIsFreeByTransformerRule == -El ítem '{0}' no se puede añadir. La ruta '{0}' ya está en uso en el servidor, pero está libre en el cliente debido a la regla de transformación '{1}'. - -== AddedItemCannotBeLocked == +== AddedItemCannotBeLocked == El ítem '{0}' no se puede bloquear porque es un añadido. (Nota: si el ítem no le aparece como añadido entonces el espacio de trabajo podría estar corrupto. Por favor, contacte con soporte) == AdminReadonlyNotSupported == @@ -230,9 +227,6 @@ hace {0} días == OneDayAgo == hace 1 día -== DeleteNotAllowedTransfomerRuleInside == -El ítem '{0}' no se puede borrar porque contiene la regla de transformación '{1}'. - == DestinationField == La ruta de destino @@ -343,12 +337,6 @@ Windows no permite puntos al final de los nombres. == ExpansionRulesHeader == Reglas de expansión de ramas: -== FastChgRepNotAllowedOnTransWk == -El fast update no se puede usar para cambiar de repositorio cuando se están usando reglas de trasformación. Por favor, use el standard update. - -== FastNotAllowedRuleRestricion == -El fast update no está permitido porque el cambio del servidor '{0}' no se puede aplicar en el espacio de trabajo con la regla '{1}'. Por favor, utilice el standard update y actualice las reglas de transformación en caso necesario. - == FastUpdCloakedError == El fast update no se puede usar con reglas de cloaked. Por favor, use el standard update. @@ -376,9 +364,6 @@ Fuera de un espacio de trabajo es necesario especificar los repositorios en la c == FormatterError == El campo {0} no es válido para el tipo de objeto especificado -== GameUiCiHeadOutOfDateError == -La operación de checkin no puede ser completada porque se han hecho nuevos cambios en repositorio '{0}' desde que empezó la operación. Por favor, vuelva a intentar la operación de checkin para que los nuevos cambios del servidor sean tenidos en cuenta. - == GameuiCiInsideUnresolvedXlinkNotAllowed == El xlink '{0}' no pudo resolverse. Los cambios debajo de un xlink no resuelto no pueden protegerse. @@ -415,9 +400,6 @@ El servidor {0} no soporta la operación de Incoming Changes. Por favor, actuali == IncomingChangesReadonlyXlinksNotSupported == Los Xlinks read-only no están soportados actualmente por la Incoming Changes. Por favor, haga un merge normal para traerse los últimos cambios de la rama. -== IncomingTansformerRulesNotSupported == -El espacio de trabajo contiene reglas de transformación. Las reglas de transformación no se soportan actualmente por la Incoming Changes. Por favor actualice su espacio de trabajo deshaciendo previamente cualquier cambio pendiente. Si tiene algún cambio pendiente que desee conservar, puede hacer un shelve antes de deshacerlos y aplicarlo de nuevo tras actualizar. - == IncomingWxlinkBackwardEditionNotSupported == El Xlink de escritura '{0}' se editó para apuntar a un changeset anterior (uno más antiguo). Esta edición de un Xlink de escritura no se soporta actualmente por la Incoming Changes. Por favor actualice su espacio de trabajo deshaciendo previamente cualquier cambio pendiente. Si tiene algún cambio pendiente que desee conservar, puede hacer un shelve antes de deshacerlos y aplicarlo de nuevo tras actualizar. @@ -557,33 +539,9 @@ Las ramas de primer nivel no están permitidas en esta edición, solamente puede == Merge == Merge -== MergeAddNotAllowedPathFreeByRule == -El ítem '{0}' no se puede añadir. La ruta '{0}' ya está en uso en el servidor, pero está libre en el cliente debido a la regla de transformación '{1}'. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeDeleteNotAllowedRuleInside == -El ítem '{0}' no se puede borrar porque contiene la regla de transformación '{1}'. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeMoveNotAllowedPathFreeByRule == -El ítem '{0}' no se puede mover a '{1}'. La ruta '{1}' ya está en uso en el servidor, pero está libre en el cliente debido a la regla de transformación '{2}'. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeMoveNotAllowedTransformedItem == -El ítem '{0}' no puede moverse porque ha sido transformado por la regla '{1}'. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - == MergeNeeded == Se necesitan combinar los cambios del changeset cs:{0}@rep:{2}@repserver:{3}(mount:{4}) con los cambios realizados sobre el changeset cs:{1}@rep:{2}@repserver:{3}(mount:{4}) (changeset cargado en su workspace) antes de continuar. Por favor ejecute 'cm merge "cs:{0}@rep:{2}@repserver:{3}" --merge' en '{5}' para resolver los conflictos. Después de eso, reintente la operación de checkin. -== MergeRestorerDeletedPathInUse == -El path borrado por la regla de transformación {0} ha sido reutilizado por la regla de transformación {1}, por lo que el contenido del borrado no se puede restaurar. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeRestorerRmRuleCannotBeLoaded == -El contenido de la regla de transformación '{0}' no se puede cargar. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeRestorerRmRuleMountMissing == -No se puede encontrar el punto de montaje de la regla de transformación '{0}'. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - -== MergeRestorerRmRuleParentMissing == -El contenido de la regla de transformación '{0}' no se puede restaurar porque su padre '{1}' no está cargado en el espacio de trabajo. El merge no puede completarse con las reglas de transformación actuales. Por favor, borre de la regla de transformación involucrada (o use un espacio de trabajo sin transformar) e intente el merge de nuevo. - == MergeToPendingDirectoryConflicts == Hay conflictos de directorio pendientes que deben ser resueltos antes de procesar el merge-to. @@ -623,12 +581,6 @@ hace {0} meses == OneMonthAgo == hace 1 mes -== MoveNotAllowedForTransformedItem == -El ítem '{0}' no puede moverse porque ha sido transformado por la regla '{1}'. - -== MoveNotAllowedPathIsFreeByTransformerRule == -El ítem '{0}' no se puede mover a '{1}'. La ruta '{1}' ya está en uso en el servidor, pero está libre en el cliente debido a la regla de transformación '{2}'. - == MultipleWorkspaceNotAllowed == La operación de {0} no puede ejecutarse con ítems de varios workspaces. Por favor, repita la operación por separado con los ítems de cada workspace. @@ -782,27 +734,6 @@ La rama {0} tiene más de un head. Por favor, unifíquela para continuar sincron == SyncBranchesWithMultipleHeads == Las ramas {0} tienen más de un head. Por favor, unifíquelas para continuar sincronizando. -== TransformedItemAlreadyApplied == -La regla '{0}' no se puede aplicar porque ya se ha aplicado una regla anteriormente sobre el mismo ítem. - -== TransformerMvRuleDstInUseError == -La regla '{0}' no se puede aplicar porque la ruta de destino está en uso. - -== TransformerMvRuleDstInsideSrcError == -La regla '{0}' no se puede aplicar porque no se puede mover un ítem dentro de si mismo. - -== TransformerMvRuleModifiesAppliedRule == -La regla '{0}' no se puede aplicar porque modifica una regla que ya ha sido aplicada ('{1}'). - -== TransformerRmRuleMvInsideError == -La regla '{0}' no se puede aplicar porque contiene regla de movido ('{1}'). - -== TransformerRuleDeleteRootError == -La regla '{0}' no se puede aplicar porque no se puede borrar el directorio raíz. - -== TransformerRuleMissingPathError == -La regla '{0}' no se puede aplicar porque no se encuentra la ruta '{1}'. - == TriggerNameField == El nombre del trigger @@ -935,9 +866,6 @@ No se ha podido montar el espacio de trabajo dinámico {0} después de {1} segun == WkDynamicMultipleNotMountedYet == Los siguientes espacios de trabajo dinámicos todavía no están montados después de {0} segundos: {1}. -== GameUiCheckinConflictsError == -La operación de checkin/shelve no puede ser completada porque algunos cambios locales no se pueden aplicar en la versión actual del servidor. Por favor, compruebe los conflictos entre sus cambios locales y la versión actual del servidor. - == IsNotWk == {0} no está en un espacio de trabajo. diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt.meta index 086ba4e..c10bc80 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86fda151b3abfb84cb07847f00869942 +guid: 952242fa6bd1a4a47ad6ec1591201f9c TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.ja.txt.meta index 006678f..02aef62 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f129d335eac40e448a84e27043fdae4c +guid: f1d6dc522261b3044984d2fa302031d1 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.ko.txt.meta index 25f45ff..66b12e3 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8f3adf2d4c8be6743bdaf10e0157a5a2 +guid: c13e86b50f16e794c8569accc0cbea44 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hans.txt.meta index 1309bb8..1a2298f 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0db7aa4e7a524e640871ca7a055eaa7d +guid: 773fcbb2a2b51c74cab8fdb2e4f19455 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hant.txt.meta index 0c0e723..61c0688 100644 --- a/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/clientcommon.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 321d7f69a56dc9c469b21efbbc1bb2bf +guid: 4ad90c75ed142fb408eea71e88257705 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt b/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt index e5b1069..34e6c6d 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt @@ -1,3 +1,219 @@ +== CMD_DESCRIPTION_ACCESS_TOKEN == +Allows the user to manage Access Tokens. + +== CMD_USAGE_ACCESS_TOKEN == +Usage: + + cm ^accesstoken [options] + +Commands: + + - ^create + - ^list + - ^reveal + - ^revoke + + To get more information about each command run: + cm ^accesstoken --^usage + cm ^accesstoken --^help + +== CMD_HELP_ACCESS_TOKEN == +Examples: + + cm ^accesstoken ^create "To be used by the Build Server" + cm ^accesstoken ^list + cm ^accesstoken ^reveal 19c57d0f-c525-4767-8670-82f7ecc2ccdb + cm ^accesstoken ^revoke 19c57d0f-c525-4767-8670-82f7ecc2ccdb + +== CMD_DESCRIPTION_ACCESS_TOKEN_CREATE == +Creates a new access token. + +== CMD_USAGE_ACCESS_TOKEN_CREATE == +Usage: + + cm ^accesstoken ^create [] + [--^format=] [--dateformat=] + + description A description that helps identify the purpose + of the access token. + repserverspec Repository server specification. + (Use 'cm ^help ^objectspec' to learn more about rep server + specs.) + --^format Retrieves the output message in a specific format. See + Remarks for more info. + --^dateformat Sets the output format to print dates. + +== CMD_HELP_ACCESS_TOKEN_CREATE == +Remarks: + + The access token lifespan will be determined by the server configuration. + It is not possible to set the token lifespan at creation time. + + Output format parameters (--^format option): + + This command accepts a format string to show the output. + + The output parameters of this command are the following: + {^id} | {0} ID of the access token. + {^description} | {1} Description of the access token. + {^owner} | {2} Owner of the access token. + {^creationdate} | {3} Creation date of the access token. + {^expirationdate} | {4} Expiration date of the access token. + {^lastusedate} | {5} Last use date of the access token. + {^tab} Inserts a tab space. + {^newline} Inserts a new line. + + If the format parameter is not specified, the output will be printed + using a table format. + +Examples: + + cm ^accesstoken ^create "Token for Build Server" + (Creates a new access token with the provided description against the default + repserver.) + + cm ^accesstoken ^create "Token for Build Server" skull:8087 + (Creates a new access token with the provided description on repserver skull:8087.) + + cm ^accesstoken ^create "Token for Build Server" --^format="{^id}" + (Creates a new access token with the provided description against the default + repserver and only displays its ID.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_LIST == +Lists access tokens. + +== CMD_USAGE_ACCESS_TOKEN_LIST == +Usage: + + cm ^accesstoken ^list [] + [--^format=] [--^dateformat=] + + repserverspec Repository server specification. + (Use 'cm ^help ^objectspec' to learn more about rep server + specs.) + --^format Retrieves the output message in a specific format. See + Remarks for more info. + --^dateformat Sets the output format to print dates. + +== CMD_HELP_ACCESS_TOKEN_LIST == +Remarks: + + You can only list your own access tokens. Revoked access tokens will not be + returned as part of the result. On the other hand, expired access tokens will. + + Output format parameters (--^format option): + + This command accepts a format string to show the output. + + The output parameters of this command are the following: + {^id} | {0} ID of the access token. + {^description} | {1} Description of the access token. + {^owner} | {2} Owner of the access token. + {^creationdate} | {3} Creation date of the access token. + {^expirationdate} | {4} Expiration date of the access token. + {^lastusedate} | {5} Last use date of the access token. + {^tab} Inserts a tab space. + {^newline} Inserts a new line. + + If the format parameter is not specified, the output will be printed + using a table format. + +Examples: + + cm ^accesstoken ^list + (Lists access tokens on the default repserver.) + + cm ^accesstoken ^list skull:8087 + (Lists access tokens on repserver skull:8087.) + + cm ^accesstoken ^list --^format="{^id}" + (Lists access tokens on the default repserver and only displays their IDs.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_REVOKE == +Revokes an existing access token. + +== CMD_USAGE_ACCESS_TOKEN_REVOKE == +Usage: + + cm ^accesstoken ^revoke [] + + id The ID of the access token to be revoked. + repserverspec Repository server specification. + (Use 'cm ^help ^objectspec' to learn more about rep server + specs.) + +== CMD_HELP_ACCESS_TOKEN_REVOKE == +Remarks: + + You can only revoke your own access tokens. Trying to revoke an access token + that does not exist or does not belong to you will result in an error. + (See '^cm ^accesstoken ^list --^help' for further information.) + + To revoke an access token you need to provide the full ID. + + Revoking an access token does not mean that the already revealed Unity VCS + tokens will stop functioning immediately. + The maximum amount of time that can pass between revoking an access token + and the revealed Unity VCS token stopping working depends on the + 'TokenExpirationTimeSpan' configuration key in your server.conf. + By default, it is 1 hour. + If you need to know the exact value configured for your Unity VCS server, + please contact your repository server administrator. + (See '^cm ^accesstoken ^reveal --^help' for further information.) + +Examples: + + cm ^accesstoken ^revoke de0be8a4-2a7a-44c6-9c4c-82c8222dbc6f + (Revokes the access token with the provided ID from the default repserver.) + + cm ^accesstoken ^revoke de0be8a4-2a7a-44c6-9c4c-82c8222dbc6f skull:8087 + (Revokes the access token with the provided ID from repserver skull:8087.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_REVEAL == +Reveals an access token so it can be used as the authentication credentials. + +== CMD_USAGE_ACCESS_TOKEN_REVEAL == +Usage: + + cm ^accesstoken ^reveal [] + + id The ID of the access token to be revealed. + repserverspec Repository server specification. + (Use 'cm ^help ^objectspec' to learn more about rep server + specs.) + + +== CMD_HELP_ACCESS_TOKEN_REVEAL == +Remarks: + + You can only reveal your own access tokens. Trying to reveal an access token + that does not exist or does not belong to you will result in an error. + (See '^cm ^accesstoken ^list --^help' for further information.) + + To reveal an access token you need to provide the full ID. + + The revealed token can be used for automation purposes. You can pass it down + in subsequent 'cm' commands (either in the same machine or a different one) + by using the following 'cm' arguments (replace accordingly): + + $ cm ^repo ^list \ + --^username=^Peter \ + --^workingmode=^OIDCWorkingMode \ + --^token="the revealed token" \ + --^server=skull:8087 + + The revealed token will be valid from the very moment it was revealed, and + will be automatically renewed as long as the related access token is not + expired nor revoked. + +Examples: + + cm ^accesstoken ^reveal d2f43753-f612-4e51-b9b4-3c2883d7cf95 + (Reveals the access token with the provided ID on the default repserver.) + + cm ^accesstoken ^reveal d2f43753-f612-4e51-b9b4-3c2883d7cf95 skull:8087 + (Reveals the access token with the provided ID on repserver skull:8087.) + == CMD_DESCRIPTION_ACL == Sets permissions on an object. @@ -1779,8 +1995,6 @@ Remarks: ^ClientPath The local path on disk for the item. ^RelativePath The workspace-relative path. ^ServerPath The repository path for the item. - (Note: Transformed workspaces are not - currently supported for this option). ^Size Item size. ^Hash Item hash sum. ^Owner The user the item belongs to. @@ -2947,9 +3161,6 @@ Remarks: - {^newlocation} (cset@branch) - {^guid} (Will take longer to resolve) - {^itemguid} - - {^transformed} (Show applied rule for transformed items. Check the - Administrator Guide to learn about Transformable workspaces: - https://www.plasticscm.com/download/help/adminguide) You can customize the '^ls' format setting the PLASTIC_LS_FORMAT environment variable. @@ -3491,11 +3702,31 @@ Deletes one or more branches. Usage: cm ^branch | ^br ^delete | ^rm [ ...] + [--^delete-changesets] brspec Branch to delete. Use a whitespace to separate branches. (Use 'cm ^help ^objectspec' to learn more about branch specs.) +Options: + + --^delete-changesets For non-emtpy branches, first deletes the changesets + within the branch, then deletes the branch. + The operation will fail in the following scenarios: + - The branch includes the changeset zero (the main + branch in your repository). + - One or more changesets in the branch have a label + pointing to them. + - One or more shelvesets where created from changesets + in the branch. + - The branch has child branches (even if the child + branch is empty). + - One or more changesets in the branch are the source + of a merge, and the destination is not included in + the branch being deleted. + The operation is atomic. Either all or none of the + changesets in the branch are removed. + == CMD_HELP_BRANCH_DELETE == Remarks: @@ -3511,6 +3742,9 @@ Examples: (Deletes branches '/main/task002' in the repository of the current workspace and '/main/task012' in the repository 'reptest@myserver:8084'.) + cm ^br ^rm main/task002 --delete-changesets + (Deletes branch '/main/task002' and all of its changesets at once). + == CMD_DESCRIPTION_BRANCH_RENAME == Renames a branch. @@ -4120,7 +4354,10 @@ Repository spec (repspec): Branch spec (brspec): - ^br:[/]br_name[@repspec] + There are different types of branch specs: + + - ^br:[/]br_name[@repspec] + - ^br:^brguid:branch_guid[@repspec] Examples: cm ^switch ^br:/main@^rep:plastic@^repserver:skull:9095 @@ -4128,13 +4365,20 @@ Branch spec (brspec): command admits a much shorter form: "cm ^switch main@plastic@skull:9095".) - cm ^find ^revisions "^where ^branch='^br:/main/task001'" + cm ^find ^revisions "^where ^branch='^br:/main/task001' + + cm ^switch ^br:^brguid:68846cdd-6a46-458c-a47f-52454cc150d9@plastic@skull:9095 + + cm ^find ^branch "^where ^parent='^brguid:68846cdd-6a46-458c-a47f-52454cc150d9'" Remark: The initial '/' on the branch is not mandatory. We used to specify all our branches as /main, /main/task001, and so on. But now, we prefer the shorter form main, main/task001 which makes commands more compact. + The guid spec is not valid for commands that needs the full branch name + (such as "cm ^create ^branch"). + Changeset spec (csetspec): ^cs:cs_number|cs_guid[@repspec] diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt.meta index 90fbc85..bcb7c35 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3883cdfba818e4041b0eb5bac6f7e024 +guid: 77f4d25b1f2b9794c9ade01da1a45828 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt b/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt index f3547cc..d025dcf 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt @@ -1,4 +1,222 @@ -== CMD_DESCRIPTION_ACL == +== CMD_DESCRIPTION_ACCESS_TOKEN == +Permite al usuario administrar tókenes de acceso. + +== CMD_USAGE_ACCESS_TOKEN == +Sintaxis: + + cm accesstoken [options] + +Comandos: + + - create + - list + - reveal + - revoke + + Para obtener más información de cada uno de los comandos use lo siguiente: + cm accesstoken --usage + cm accesstoken --help + +== CMD_HELP_ACCESS_TOKEN == +Ejemplos: + + cm accesstoken create "Para ser usado por el servidor de compilación" + cm accesstoken list + cm accesstoken reveal 19c57d0f-c525-4767-8670-82f7ecc2ccdb + cm accesstoken revoke 19c57d0f-c525-4767-8670-82f7ecc2ccdb + +== CMD_DESCRIPTION_ACCESS_TOKEN_CREATE== +Crea un nuevo token de acceso. + +== CMD_USAGE_ACCESS_TOKEN_CREATE == +Sintaxis: + + cm accesstoken create [] + [--format=] [--dateformat=] + + description Descripción que ayuda a identificar el token de acceso. + repserverspec Especificación del servidor de repositorios. + (Use 'cm help objectspec' para más información sobre + especificaciones de servidor de repositorios.) + --format Muestra el mensaje de salida en el formato indicado. + Consulte las Notas para más información. + --dateformat Configura el formato de salida para la impresión de fechas. + +== CMD_HELP_ACCESS_TOKEN_CREATE == +Notas: + + El tiempo de vida del token de acceso vendrá determinado por la + configuración del servidor. No es posible determinar el tiempo de vida + durante la creación del token. + + Parámetros de formato de salida (opción --format): + Este comando acepta una cadena de formato para mostrar la salida. + Los parámetros de salida de este comando son los siguientes: + {id} | {0} Identificador del token de acceso. + {description} | {1} Descripción del token de acceso. + {owner} | {2} Propietario del token de acceso. + {creationdate} | {3} Fecha de creación del token de acceso. + {expirationdate} | {4} Fecha de expiración del token de acceso. + {lastusedate} | {5} Fecha de último uso del token de acceso. + {tab} Inserta un tabulador. + {newline} Inserta una nueva línea. + + Si el valor de opción '--format' no se especifica, la salida se imprimirá + en formato tabla. + +Ejemplos: + + cm accesstoken create "Token del servidor de compilación" + (Crea un nuevo token de acceso con la descripción dada contra el servidor + de repositorios por defecto.) + + cm accesstoken create "Token del servidor de compilación" skull:8087 + (Crea un nuevo token de acceso con la descripción dada en el servidor de + repositorios skull:8087.) + + cm accesstoken create "Token del servidor de compilación" --format="{id}" + (Crea un nuevo token de acceso con la descripción dada contra el servidor + de repositorios por defecto y muestra únicamente su ID.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_LIST == +Permite al usuario listar tókenes de acceso. + +== CMD_USAGE_ACCESS_TOKEN_LIST == +Sintaxis: + + cm accesstoken list [] + [--format=] [--dateformat=] + + repserverspec Especificación del servidor de repositorios. + (Use 'cm help objectspec' para más información sobre + especificaciones de servidor de repositorios.) + --format Muestra el mensaje de salida en el formato indicado. + Consulte las Notas para más información. + --dateformat Configura el formato de salida para la impresión de fechas. + +== CMD_HELP_ACCESS_TOKEN_LIST == +Notas: + + Solo puede listar sus propios tókenes de acceso. Los tókenes de acceso revocados + no serán devueltos como parte del resultado. Por otro lado, los tókenes de + acceso cuyo tiempo de vida haya expirado sí serán devueltos. + + Parámetros de formato de salida (opción --format): + Este comando acepta una cadena de formato para mostrar la salida. + Los parámetros de salida de este comando son los siguientes: + {id} | {0} Identificador del token de acceso. + {description} | {1} Descripción del token de acceso. + {owner} | {2} Propietario del token de acceso. + {creationdate} | {3} Fecha de creación del token de acceso. + {expirationdate} | {4} Fecha de expiración del token de acceso. + {lastusedate} | {5} Fecha de último uso del token de acceso. + {tab} Inserta un tabulador. + {newline} Inserta una nueva línea. + + Si el valor de opción '--format' no se especifica, la salida se imprimirá + en formato tabla. + +Ejemplos: + + cm accesstoken list + (Lista los tókenes de acceso en el servidor de repositorios por defecto.) + + cm accesstoken list skull:8087 + (Lista los tókenes de acceso en el servidor de repositorios skull:8087.) + + cm accesstoken list --format="{id}" + (Lista los tókenes de acceso en el servidor de repositorios por defecto + y muestra únicamente su ID.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_REVOKE == +Revoca un token de acceso existente. + +== CMD_USAGE_ACCESS_TOKEN_REVOKE == +Sintaxis: + + cm accesstoken revoke [] + + id El ID del token de acceso a ser revocado. + repserverspec Especificación del servidor de repositorios. + (Use 'cm help objectspec' para más información sobre + especificaciones de servidor de repositorios.) + +== CMD_HELP_ACCESS_TOKEN_REVOKE == +Notas: + + Solo puede revocar sus propios tókenes de acceso. Tratar de revocar un token + de acceso que no exista o que no le pertenezca resultará en un error. + (Use 'cm accesstoken list' para más información.) + + Para revocar un token de acceso es necesario usar su ID completo. + + Revocar un token de acceso no significa que los tókenes de Unity VCS ya + revelados dejen de funcionar inmediatamente. + El máximo tiempo que puede pasar desde que se revoca un tóken de acceso hasta + que los tókenes de Unity VCS revelados con él dejen de funcionar depende de + la clave de configuración 'TokenExpirationTimeSpan' de su server.conf. + Por defecto, este valor es de 1 hora. + Si necesita saber el valor exacto configurado para su servidor de Unity VCS, + por favor, contacte con su administrador. + (Use 'cm accesstoken reveal --help' para más información.) + +Ejemplos: + + cm accesstoken revoke de0be8a4-2a7a-44c6-9c4c-82c8222dbc6f + (Revoca el token de acceso con el ID especificado del servidor de repositorios + por defecto.) + + cm ^accesstoken ^revoke de0be8a4-2a7a-44c6-9c4c-82c8222dbc6f skull:8087 + (Revoca el token de acceso con el ID especificado del servidor de repositorios + skull:8087.) + +== CMD_DESCRIPTION_ACCESS_TOKEN_REVEAL == +Muestra un token de acceso para que pueda ser utilizado como credenciales. + +== CMD_USAGE_ACCESS_TOKEN_REVEAL == +Sintaxis: + + cm accesstoken reveal [] + + id El ID del token de acceso a ser revelado. + repserverspec Especificación del servidor de repositorios. + (Use 'cm help objectspec' para más información sobre + especificaciones de servidor de repositorios.) + +== CMD_HELP_ACCESS_TOKEN_REVEAL == +Notas: + + Solo puede revelar sus propios tókenes de acceso. Tratar de revelar un token + de acceso que no exista o que no le pertenezca resultará en un error. + (Use 'cm accesstoken list' para más información.) + + Para revelar un token de acceso es necesario usar su ID completo. + + El token revelado puede ser utilizado en automatizaciones. Puede utilizarlo + en posteriores comandos del 'cm' (tanto en la misma máquina como en una + diferente) utilizando los siguientes argumentos (reemplácelos adecuadamente): + + $ cm repo list \ + --username=Pedro \ + --workingmode=OIDCWorkingMode \ + --token="el token revelado" \ + --server=skull:8087 + + El token revelado será válido desde el mismo momento en el que se muestra, + y se renovará automáticamente mientras que el token de acceso relacionado + no haya expirado ni haya sido revocado. + +Ejemplos: + + cm accesstoken reveal d2f43753-f612-4e51-b9b4-3c2883d7cf95 + (Revela el token de acceso con el ID proporcionado en el servidor + de repositorios por defecto.) + + cm accesstoken reveal d2f43753-f612-4e51-b9b4-3c2883d7cf95 skull:8087 + (Revela el token de acceso con el ID proporcionado en el servidor + de repositorios skull:8087.) + +== CMD_DESCRIPTION_ACL == Configura permisos para un objeto. == CMD_USAGE_ACL == @@ -1856,8 +2074,6 @@ Notas: ClientPath Ruta local del ítem en disco. RelativePath Ruta relativa del ítem en el espacio de trabajo. ServerPath Ruta del repositorio para el ítem. - (Nota: Los espacios de trabajo transformado no - están actualmente soportados para esta opción.) Size Tamaño del ítem. Hash Suma 'hash' del ítem. Owner Nombre del usuario propietario del ítem. @@ -3040,10 +3256,6 @@ Notas: {newlocation} cset@branch {guid} (El comando tardará más tiempo en resolverse) {itemguid} - {transformed} Muestra la regla aplicada para ítems transformados. - Lea la Guía del Administrador para más información sobre - Transformable workspaces: - https://www.plasticscm.com/download/help/adminguide You can customize the 'ls' format setting the PLASTIC_LS_FORMAT environment variable. @@ -3587,11 +3799,31 @@ Borra una o más ramas. Sintaxis: cm branch | br delete | rm [ ...] + [--delete-changesets] brspec Rama a borrar. Use un espacio en blanco para separar ramas. (Use 'cm help objectspec' para más información sobre especificaciones de ramas.) +Opciones: + + --delete-changesets Para ramas que no estén vacías, primero borra los + changesets de la rama, y después borra la rama. + La operación fallará en los siguientes casos: + - La rama incluye al changeset cero (la rama + principal de su repositorio). + - Uno o más changesets en la rama tienen una + etiqueta apuntándolos. + - Se crearon uno o más shelvesets a partir de + changesets en la rama. + - La rama tiene ramas hijas (incluso si la rama hija + está vacía). + - Uno o más changesets en la rama son el origen de + un merge, y el destino no está incluido en la rama + que se está borrando. + La operación es atómica. Si no se puede borrar uno + o más changesets de la rama, no se borrará ninguno. + == CMD_HELP_BRANCH_DELETE == Notas: @@ -3607,6 +3839,9 @@ Ejemplos: (Borra la rama '/main/task002' del repositorio del espacio de trabajo actual y la rama '/main/task012' del repositorio 'reptest@myserver:8084'.) + cm br rm main/task002 --delete-changesets + (Borra la rama '/main/task002' y todos sus changesets en una sola operación.) + == CMD_DESCRIPTION_BRANCH_RENAME == Renombra una rama. @@ -4193,8 +4428,12 @@ omitir en comandos que solo acepten un tipo de especificación, como por ejemplo todo tipo de objetos). == Branch spec (brspec) == +Hay distintos tipos de specs de rama: + br:[/]br_name[@repspec] + br:brguid:br_guid[@repspec] + Ejemplos: cm switch br:/main@rep:plastic@repserver:skull:9095 (En este caso "br:", "rep:" y "repserver:" no son necesarios así @@ -4203,11 +4442,18 @@ omitir en comandos que solo acepten un tipo de especificación, como por ejemplo cm find revisions "where branch='br:/main/task001'" + cm switch br:brguid:68846cdd-6a46-458c-a47f-52454cc150d9@plastic@skull:9095 + + cm find branch "where parent='brguid:68846cdd-6a46-458c-a47f-52454cc150d9'" + Nota: La barra inicial '/' en las ramas no es obligatoria. Solíamos escribir todas las ramas como /main, /main/task001, etc. Pero ahora preferimos user formatos más cortos tipo main, main/task001. + La spec por guid no es válida en comandos que necesitan el nombre + completo de la rama (como "cm create branch"). + == Changeset spec (csetspec) == cs:cs_number|cs_guid[@repspec] diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt.meta index 4f5cd99..f490ac4 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d84e926505aeb3d4eacafa78897d0ece +guid: 62a13f68b37619445983f68375b63714 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.ja.txt.meta index 05317a6..f54cc99 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 20079a04b9c471c48bb066fc3864838e +guid: 2d3b3f2dd438608428c5077343ed9b20 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.ko.txt.meta index bd3106a..355ffa1 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e9d98b19a89d6da4284800da4d1ed99d +guid: cac24d3142337c44987244afb7e01bee TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hans.txt.meta index 502912c..0103602 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d5421a91eaaf46a41b69363f2127dcae +guid: 0f12dbd987c92e849bcad53df40c4133 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hant.txt.meta index 9a09100..58aa054 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm-help.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 938c65fa617959e4a81ec344383468e7 +guid: 226ea3de1f84f4147a83e1e449203460 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.en.txt.meta index f7aceba..3a8e91f 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7ef0ee0db0839bb498acae9a7060e9fb +guid: 59e32aa070595ac418cba2df5b37ea22 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.es.txt.meta index 7873fab..0815fff 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2506f49aa2c67094586d2020c253d29b +guid: 096a4841ae4d36b4fa8120d39cf2e5ee TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.ja.txt.meta index 393224c..7994f16 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f445b2ba807bc7749892bcba01a1410b +guid: 7f88073d73c3be54189fe205ac3f502f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.ko.txt.meta index 636dd49..1f222f8 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 85af424fbf381824e89e839abd1ed12a +guid: 2bb74d97a25bfed4ab22d1a68578be56 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.zh-Hans.txt.meta index 00bfda5..ec4aff9 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: abcc6dc8e5947124d9497be8c6847250 +guid: c785bd46c579c044eaaeed4038205527 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/cm.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/cm.zh-Hant.txt.meta index d60cf6f..d276612 100644 --- a/Lib/Editor/PlasticSCM/Localization/cm.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/cm.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3c151c7fb6f63654287d883dd2346c5d +guid: 8d1f1ba992862764f889142dcb4c2133 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/common.en.txt b/Lib/Editor/PlasticSCM/Localization/common.en.txt new file mode 100644 index 0000000..d4130c1 --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/common.en.txt @@ -0,0 +1,140 @@ +== AddNotApplicable == +The new item cannot be loaded in the workspace. Probably, the path is already used. Please unload the item (from the configuration view) and retry the operation: '{0}'. + +== DeleteNotApplicable == +The item cannot be unloaded because the item wasn't found in the workspace. Your workspace might be corrupt. Please contact support: '{0}'. + +== GameuiCheckinAddedMissingParentConflictAction == +Please undo the add operation or move it to an existing location in the server. + +== GameuiCheckinAddedMissingParentConflictDescription == +The item '{0}' cannot be added because its parent directory is not loaded anymore in the server. + +== GameuiCheckinAddedPathInUseConflictAction == +Please undo the add operation or move it to a free location in the server. + +== GameuiCheckinAddedPathInUseConflictDescription == +The item '{0}' cannot be added because there is another item loaded in the same location in the server. + +== GameuiCheckinChangedFileConflictDescription == +'{0}' requires merge. + +== GameuiCheckinChangedMissingConflictAction == +Please undo your local changes or restore the item in an existing location in the server. + +== GameuiCheckinChangedMissingConflictDescription == +The item '{0}' cannot be changed because it is not loaded anymore in the server. + +== GameuiCheckinChangedXlinkConflictAction == +Please undo your local changes, download the latest version and edit the Xlink again. + +== GameuiCheckinChangedXlinkConflictDescription == +The target of the Xlink '{0}' cannot be changed because it was changed in the server. + +== GameuiCheckinCopiedLoadedConflictAction == +Please undo your local changes, download the latest version and reapply your local changes. + +== GameuiCheckinCopiedLoadedConflictDescription == +The item '{0}' cannot be copied because it is already loaded in the server. + +== GameuiCheckinCopiedMissingParentConflictAction == +Please undo the copy operation or move it to an existing location in the server. + +== GameuiCheckinCopiedMissingParentConflictDescription == +The item '{0}' cannot be copied because its parent directory is not loaded anymore in the server. + +== GameuiCheckinCopiedPathInUseConflictAction == +Please undo the copy operation or move it to a free location in the server. + +== GameuiCheckinCopiedPathInUseConflictDescription == +The item '{0}' cannot be copied because there is another item loaded in the same location in the server. + +== GameuiCheckinDeletedAlreadyDeletedConflictAction == +Please undo the delete operation and update to the latest version. + +== GameuiCheckinDeletedAlreadyDeletedConflictDescription == +The item '{0}' cannot be deleted because the item is not loaded anymore in the server. + +== GameuiCheckinDeletedChangedWarningDescription == +The deleted item '{0}' has been changed in the server. If the deleted is applied, the server change will be lost. + +== GameuiCheckinDeletedMovedWarningDescription == +The deleted item '{0}' has been moved in the server. If the deleted is applied, the server move will be lost. + +== GameuiCheckinDeletedWarningAction == +Are you sure that you want to delete the item '{0}'? + +== GameuiCheckinDirReplacedChangedConflictDescription == +The item '{0}' cannot be reverted because it was already changed in the server. + +== GameuiCheckinFileReplacedChangedConflictDescription == +'{0}' requires merge. + +== GameuiCheckinFsProtectionMissingConflictAction == +Please undo your local changes or restore the item in an existing location in the server. + +== GameuiCheckinFsProtectionMissingConflictDescription == +The permissions for item '{0}' cannot be changed because it is not loaded anymore in the server. + +== GameuiCheckinMovedAlreadyMovedConflictAction == +Please undo the move operation and update to the latest version. + +== GameuiCheckinMovedAlreadyMovedConflictDescription == +The item '{0}' cannot be moved to '{1}' because it is already loaded in the destination in the server. + +== GameuiCheckinMovedDivergentConflictAction == +Do you want to move the item '{0}' to '{1}' anyway? + +== GameuiCheckinMovedDivergentConflictDescription == +The moved item '{0}' has been moved to a different place in the server. If move is applied the server move will be lost. + +== GameuiCheckinMovedDstInUseConflictAction == +Please undo the move operation or move it to a free location in the server. + +== GameuiCheckinMovedDstInUseConflictDescription == +The item '{0}' cannot be moved to '{1}' because there is another item loaded in the same location in the server. + +== GameuiCheckinMovedInsideItselfConflictAction == +Please undo the move operation or move it to valid location in the server. + +== GameuiCheckinMovedInsideItselfConflictDescription == +The item '{0}' cannot be moved inside '{1}' because '{1}' is loaded inside '{0}' in the server. + +== GameuiCheckinMovedMissingDstConflictAction == +Please undo the move operation or move the item to an existing location in the server. + +== GameuiCheckinMovedMissingDstConflictDescription == +The item '{0}' cannot be moved to '{1}' because the destination is not loaded anymore in the server. + +== GameuiCheckinMovedMissingItemConflictAction == +Please undo the move operation or restore the item in an existing location in the server. + +== GameuiCheckinMovedMissingItemConflictDescription == +The item '{0}' cannot be moved because it is not loaded anymore in the server. + +== GameuiCheckinReplacedChangedConflictAction == +Please undo your revert operation, download the latest version and revert it. + +== GameuiCheckinReplacedMissingConflictAction == +Please undo your revert operation. + +== GameuiCheckinReplacedMissingConflictDescription == +The item '{0}' cannot be reverted because it is not loaded anymore in the server. + +== GameuiOutOfDateUnresolvedXlink == +The xlink '{0}' cannot be resolved. The items under an unresolved xlink cannot be updated. + +== ItemAlreadyChanged == +The item won't be downloaded because it is already changed (checked-out, locally changed, deleted, moved or reverted) in the workspace: '{0}'. Please undo or checkin the local change and retry the operation. + +== ItemPathAlreadyUsedByChange == +The item won't be downloaded/moved because there is an existing change at '{0}'. Please undo the local change, unload the item (from the configuration view) and retry the operation. + +== MoveItemAlreadyChanged == +The item won't be moved because it is already changed (checked-out, locally changed, deleted, moved or reverted) in the workspace: '{0}'. Please undo or checkin the local change and retry the operation. + +== MoveNotApplicable == +The item cannot be moved to '{0}'. Probably, the destination path is already used. Please unload the item (from the configuration view) and retry the operation. + +== UnloadItemAlreadyChanged == +The item won't be unloaded because it is already changed (checked-out, locally changed, deleted, moved or reverted) in the workspace: '{0}'. Please undo or checkin the local change and retry the operation. diff --git a/Lib/Editor/PlasticSCM/Localization/common.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/common.en.txt.meta new file mode 100644 index 0000000..9fe7d91 --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/common.en.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 92d2f312d06411a4294225065b50225d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Lib/Editor/PlasticSCM/Localization/common.es.txt b/Lib/Editor/PlasticSCM/Localization/common.es.txt new file mode 100644 index 0000000..b3f69f9 --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/common.es.txt @@ -0,0 +1,140 @@ +== AddNotApplicable == +El ítem no puede ser descargado en el workspace. Posiblemente, el path ya está en uso. Por favor, desmarque el ítem (desde la vista de configuración) y reintente la operación: '{0}'. + +== DeleteNotApplicable == +El ítem no puede ser borrado porque no ha sido encontrado. Su workspace podría estar corrupto. Por favor, contacte con el equipo de soporte: '{0}'. + +== GameuiCheckinAddedMissingParentConflictAction == +Por favor, deshaga el añadido o muévalo a una ruta que exista en el servidor. + +== GameuiCheckinAddedMissingParentConflictDescription == +El ítem '{0}' no se puede añadir porque su directorio padre ya no está cargado en el servidor. + +== GameuiCheckinAddedPathInUseConflictAction == +Por favor, deshaga el añadido o muévalo a una ruta que este libre en el servidor. + +== GameuiCheckinAddedPathInUseConflictDescription == +El ítem '{0}' no se puede añadir porque hay otro ítem cargado en el mismo sitio en el servidor. + +== GameuiCheckinChangedFileConflictDescription == +'{0}' necesita merge. + +== GameuiCheckinChangedMissingConflictAction == +Por favor, deshaga el cambio o restaure el ítem en una ruta que exista en el servidor. + +== GameuiCheckinChangedMissingConflictDescription == +El ítem '{0}' no se puede modificar porque ya no está cargado en el servidor. + +== GameuiCheckinChangedXlinkConflictAction == +Por favor, deshaga su cambio local, descargue la última versión y vuelva a editar el Xlink. + +== GameuiCheckinChangedXlinkConflictDescription == +El destino del Xlink '{0}' no se puede cambiar porque fue modificado en el servidor. + +== GameuiCheckinCopiedLoadedConflictAction == +Por favor, deshaga su cambio local, descargue la última versión y reaplique sus cambios locales. + +== GameuiCheckinCopiedLoadedConflictDescription == +El ítem '{0}' no se puede copiar porque ese ítem ya esta cargado en el servidor. + +== GameuiCheckinCopiedMissingParentConflictAction == +Por favor, deshaga el copiado o muévalo a una ruta que exista en el servidor. + +== GameuiCheckinCopiedMissingParentConflictDescription == +El ítem '{0}' no se puede copiar porque su directorio padre ya no está cargado en el servidor. + +== GameuiCheckinCopiedPathInUseConflictAction == +Por favor, deshaga el copiado o muévalo a una ruta que este libre en el servidor. + +== GameuiCheckinCopiedPathInUseConflictDescription == +El ítem '{0}' no se puede copiar porque hay otro ítem cargado en el mismo sitio en el servidor. + +== GameuiCheckinDeletedAlreadyDeletedConflictAction == +Por favor, deshaga el borrado y actualícese a la última versión. + +== GameuiCheckinDeletedAlreadyDeletedConflictDescription == +El ítem '{0}' no se puede borrar porque ya no está cargado en el servidor. + +== GameuiCheckinDeletedChangedWarningDescription == +El ítem borrado '{0}' ha sido modificado en el servidor. Si se borra el ítem, el cambio del servidor se perderá. + +== GameuiCheckinDeletedMovedWarningDescription == +El ítem borrado '{0}' ha sido movido en el servidor. Si se borra el ítem, el movido del servidor se perderá. + +== GameuiCheckinDeletedWarningAction == +¿Está seguro que desea borrar el ítem '{0}'? + +== GameuiCheckinDirReplacedChangedConflictDescription == +El ítem '{0}' no se puede reemplazar (revert) porque fue modificado en el servidor. + +== GameuiCheckinFileReplacedChangedConflictDescription == +'{0}' necesita merge. + +== GameuiCheckinFsProtectionMissingConflictAction == +Por favor, deshaga el cambio o restaure el ítem en una ruta que exista en el servidor. + +== GameuiCheckinFsProtectionMissingConflictDescription == +Los permisos del ítem '{0}' no se puede modificar porque ya no está cargado en el servidor. + +== GameuiCheckinMovedAlreadyMovedConflictAction == +Por favor, deshaga el movido y actualícese a la última versión. + +== GameuiCheckinMovedAlreadyMovedConflictDescription == +El ítem '{0}' no se puede mover a '{1}' porque ya está cargado en el destino en el servidor. + +== GameuiCheckinMovedDivergentConflictAction == +¿Está seguro que desea mover el ítem '{0}' a '{1}'? + +== GameuiCheckinMovedDivergentConflictDescription == +El ítem movido '{0}' ha sido movido en el servidor a otra ruta. Si se aplica el movido local, el movido del servidor se perderá. + +== GameuiCheckinMovedDstInUseConflictAction == +Por favor, deshaga el movido o muévalo a una ruta que este libre en el servidor. + +== GameuiCheckinMovedDstInUseConflictDescription == +El ítem '{0}' no se puede mover a '{1}' porque hay otro ítem cargado en el mismo sitio en el servidor. + +== GameuiCheckinMovedInsideItselfConflictAction == +Por favor, deshaga el movido o muévalo a una ruta valida en el servidor. + +== GameuiCheckinMovedInsideItselfConflictDescription == +El ítem '{0}' no se puede mover dentro de '{1}' porque '{1}' está cargado dentro '{0}' en el servidor. + +== GameuiCheckinMovedMissingDstConflictAction == +Por favor, deshaga el movido o mueva el ítem a una ruta que exista en el servidor. + +== GameuiCheckinMovedMissingDstConflictDescription == +El ítem '{0}' no se puede mover a '{1}' porque el destino ya no está cargado en el servidor. + +== GameuiCheckinMovedMissingItemConflictAction == +Por favor, deshaga el movido o restaure el ítem en una ruta que exista en el servidor. + +== GameuiCheckinMovedMissingItemConflictDescription == +El ítem '{0}' no se puede mover porque ya no está cargado en el servidor. + +== GameuiCheckinReplacedChangedConflictAction == +Por favor, deshaga el reemplazo (revert), descargue la última versión y reemplácela (revert) de nuevo. + +== GameuiCheckinReplacedMissingConflictAction == +Por favor, deshaga el reemplazo (revert). + +== GameuiCheckinReplacedMissingConflictDescription == +El ítem '{0}' no se puede reemplazar (revert) porque ya no está cargado en el servidor. + +== GameuiOutOfDateUnresolvedXlink == +El xlink '{0}' no pudo resolverse. Los ítems debajo de un xlink no resuelto no pueden actualizarse. + +== ItemAlreadyChanged == +El ítem no se actualizará porque se encuentra cambiado (checked-out, cambiado, borrado o movido) en el workspace: '{0}'. Por favor, deshaga o confirme el cambio local y reintente la operación. + +== ItemPathAlreadyUsedByChange == +El ítem no será descargado/movido porque hay un cambio local en '{0}'. Por favor, deshaga el cambio local, desmarque el ítem (desde la vista de configuración) y reintente la operación. + +== MoveItemAlreadyChanged == +El ítem no será movido porque se encuentra cambiado (checked-out, cambiado, borrado o movido) en el workspace: '{0}'. Por favor, deshaga o confirme el cambio local y reintente la operación. + +== MoveNotApplicable == +El ítem no puede ser movido a '{0}'. Posiblemente, el path ya está en uso. Por favor, descargue el ítem del workspace y reintente la operación. + +== UnloadItemAlreadyChanged == +El ítem no será borrado porque se encuentra cambiado (checked-out, cambiado, borrado o movido) en el workspace: '{0}'. Por favor, deshaga o confirme el cambio local y reintente la operación. diff --git a/Lib/Editor/PlasticSCM/Localization/common.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/common.es.txt.meta new file mode 100644 index 0000000..60eda4b --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/common.es.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0aaee8621c37edb4ea6c0dbeb193ba82 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt b/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt index 4ad0454..97fc195 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt @@ -1,3 +1,6 @@ +== AccessTokensNotEnabled == +Access tokens are not enabled on this server. If you believe this to be an error, please contact your server administrator. + == AclNotFound == You are working with out-of-date objects. Maybe your client or workspace is out of date, please update it. @@ -93,6 +96,27 @@ The data {0} is encrypted. The encryption info is needed in order to read it. == CannotDeleteChangesetItemsLocked == The changeset cs:{0} cannot be deleted until the following locked items are released: {1} +== CannotDeleteChangesetShelvesetDependsOnIt == +The changeset cs:{0} cannot be deleted because sh:{1} depends on it. You must delete sh:{1} first. + +== CannotDeleteChangesetChangesetDependsOnIt == +The changeset cs:{0} cannot be deleted because cs:{1} depends on it. You must delete cs:{1} first. + +== CannotDeleteChangesetEmptyBranchDependsOnIt == +The changeset cs:{0} cannot be deleted because the empty branch {1} depends on it. + +== CannotDeleteChangesetLabelPointsToIt == +The changeset cs:{0} cannot be deleted because label '{1}' points to it. You must delete the label first. + +== CannotDeleteChangesetIsMergeSource == +The changeset cs:{0} cannot be deleted because it is the source of a mergelink. You must delete the merge destination (cs:{1}) first. + +== CannotDeleteChangesetIsIntervalMergeSource == +The changeset cs:{0} cannot be deleted because it is part of an interval merge source. + +== CannotDeleteChangesetIsChangesetZero == +The changeset cs:0 cannot be deleted. It is a fixed point in your repository's history. + == CannotDiffDstCsetNotComplete == Cannot show differences between changeset {0} and changeset {1}. The destination changeset {1} has not been replicated to this repository. Make sure that you replicated the branch containing this changeset. @@ -126,6 +150,9 @@ Cannot retrieve the content of the revision {0} at repository {1} because it was == CannotSaveDataNotCo == Data can only be saved for a checked out revision. +== CannotUpdateAssigneeWithMultipleReviewers == +The assignee could not be updated because the review has more than one reviewer. + == CannotUpdateWorkspaceOutOfDate == Cannot perform a partial update when the workspace is out of date. @@ -256,12 +283,18 @@ Can't use a regular label type as starting point of a smart branch. {0}. == ChangeDeleteConflict == Change delete conflict +== ChangeMustBeSelected == +To select the change '{0}' the change '{1}' must be selected too. + == ChangepasswordCommandNotAvailable == This command is only available when security config is user/password. == ChangepasswordCommandNotAvailableOnServer == This command is only available when security config is user/password and Plastic SCM Server is not configured to use user/password security mode. +== ChangesetAlreadyExists == +The specified changeset {0} already exists. + == ChangesetDoesntexist == The specified changeset {0} does not exist. @@ -322,7 +355,7 @@ Can't move {0} to {1}. Destination is a subfolder from source folder. Couldn't connect to the server {0}. == CmdErrorItemInCi == -Can't undo change for item {0}, it's checked in. +Can't undo change for item {0}, it's checked in. == CmdErrorPrivateItem == Can't perform operation. The item {0} is private. @@ -411,6 +444,9 @@ Can't move. Destination {0} already exists. Overwriting items is not allowed == DestinationDirectoryMustBeCheckedoutToMove == To move {0} the destination directory must be checked out. +== DestinationMustBeCheckedin == +The move source '{0}' can't be checkedin without check-in the destination '{1}'. + == DirIdentical == Directories are identical. @@ -534,6 +570,15 @@ The server '{0}' requires encryption, but it's not allowed for FIPS compliant se == FormatAndXmlModifiersIncompatible == --xml and --format modifiers are not compatible and cannot be used together. +== GameUiCheckinConflictsError == +The checkin/shelve operation cannot be completed because some local changes cannot be applied on the current server version. Please check the conflicts between your local changes and the current server version. + +== GameUiCiHeadOutOfDateError == +The checkin operation cannot be completed because new changes were created in the repository '{0}' since the operation began. Please retry the checkin operation to take into account the new server changes. + +== GameuiCiInsideUnresolvedXlinkNotAllowed == +The xlink '{0}' cannot be resolved. Changes under an unresolved xlink cannot be checked in. + == GetClientContext == Can't get client user and machine context. @@ -613,7 +658,7 @@ Invalid LDAP server type: {0}. Invalid module name {0}. It can't be empty and can't contain / == InvalidOption == -Invalid option. +Invalid option. == InvalidOs == The Operating System is not supported in this edition. @@ -640,7 +685,7 @@ Invalid value for server name. Invalid parameters user/password in client config file. == InvalidValue == -Invalid value. +Invalid value. == InvalidWorkingMode == Invalid SEID working mode in configuration file. @@ -828,7 +873,7 @@ No organization has been provided. You need to work against a specific organizat The label {0} already exists. == MsgError == -Error: +Error: == MsgNoSelector == There is no selector for this workspace. {0} @@ -884,6 +929,9 @@ No such user: {0}. == NoWorkspaceSelected == There is no workspace selected. +== NotChangedInCurrentWorkspace == +The item '{0}' is not changed in current workspace. + == NotEmptyIostatsFolder == Error: disk test path not empty. Path: {0} @@ -1055,7 +1103,7 @@ The secured path can't be created. The path is under an xlink. Use the path perm == PathSpecMultipleMatches == Specified secured path: {0} matches with several secured path instances. Please provide a full secured path spec ( 'path#tag' or 'path' with '--branches=list_of_branches' argument ). - + == ProblemLoadingExtension == There was a problem loading an extension. @@ -1245,17 +1293,26 @@ RootItem must be unique in the repository. {0} has been located. You need to save it before add it to Unity VCS. == ScriptVersionNotValid == -The {0} version of {1} server is {2}. Please upgrade it to the {3} version. +The {0} version of {1} server is {2}. Please upgrade it to the {3} version. == SecuredPathMovedCollission == The move from '{0}' to '{1}' is not allowed because the existing user permissions are different between the source path and destination path. +== SecurityAccessTokenDoesNotExist == +The access token '{0}' does not exist or does not belong to you. + +== SecurityAccessTokenExpired == +The access token '{0}' expired. + == SecurityCantActivateUser == You don't have permissions to activate user {0}. You need to be repository server administrator in order to be allowed to complete this operation. == SecurityCantArchive == You don't have permissions to archive revisions. You need to be repository server administrator in order to be allowed to complete this operation. +== SecurityCantCreateAccessToken == +You don't have permissions to create access tokens. If you believe this to be an error, please contact your server administrator. + == SecurityCantDeactivateUser == You don't have permissions to deactivate user {0}. You need to be repository server administrator in order to be allowed to complete this operation. @@ -1265,6 +1322,9 @@ An object can't inherit from its own ACL. Recursion found. == SecurityCantMergeChange == You don't have permissions to perform this merge. You don't have read permission for certain changes in the source contributor. +== SecurityCantRevealAccessToken == +You don't have permissions to reveal access tokens. If you believe this to be an error, please contact your server administrator. + == SecurityCantUpdateReviewStatus == You don't have permission to update the status of the review. Only a reviewer or the repository server administrator can do it. @@ -1535,12 +1595,21 @@ Workspace name '{0}' is already in use. == WorkspaceRepAlreadyShared == Workspace '{0}' is already shared. +== WorkspaceRepAlreadyLocked == +Workspace '{0}' is already locked by other concurrent operation. + +== WorkspaceShareNotFound == +Workspace '{0}' is not shared with user '{1}'. + == WorkspaceUvcsConnectionAlreadyExists == UVCS connection '{0}' already exists. == WorkspaceUvcsConnectionDoesntExist == UVCS connection '{0}' does not exist. +== WorkspaceUvcsConnectionMetadataOutOfDate == +Cannot update UVCS connection metadata '{0}' because there are new changes in the server (local id:{1}, server id:{2}). + == WriteBlobError == The data for revision {0} (segment {1}) cannot be written on rep {2}. @@ -1682,6 +1751,9 @@ Deleting a changeset is not allowed on a repository that is on sync with Git. == MoveChangesetNotAllowedOnGitSyncRep == Moving a changeset is not allowed on a repository that is on sync with Git. +== DeleteBranchAndChangesetsNotSupported == +The server {0} doesn't support deleting a branch and its changesets at once. Please upgrade the server or delete the changesets one by one before deleting the branch. + == P4ExecutableDoesNotExist == Unable to find the Perforce CLI executable. Please ensure it's available in your PATH environment variable. diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt.meta index f32ce69..a2723d4 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0706f37c9e09e14438ae1ca4761c132f +guid: 89853e25fa28afe468ff73bc935a78ec TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt b/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt index e0ea969..4b47459 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt @@ -1,3 +1,6 @@ +== AccessTokensNotEnabled == +Los tókenes de acceso no están habilitados en este servidor. Si cree que es un error, por favor, contacte con el administrador del servidor de repositorios. + == AclNotFound == Está trabajando con objetos desactualizados. Puede que su cliente o su espacio de trabajo este desactualizado, por favor actualicelo. @@ -94,7 +97,28 @@ No puede crearse el xlink porque ya hay un ítem en la ruta especificada: {0} El dato {0} está cifrado. Se necesita la información de cifrado para poder leerlo. == CannotDeleteChangesetItemsLocked == -El changeset cs:{0} no se puede borrar hasta que se liberen los siguientes checkouts exclusivos: {1} +No se puede borrar el changeset cs:{0} hasta que se liberen los siguientes checkouts exclusivos: {1} + +== CannotDeleteChangesetShelvesetDependsOnIt == +No se puede borrar el changeset cs:{0} porque sh:{1} depende de él. Deberá borrar sh:{1} primero. + +== CannotDeleteChangesetChangesetDependsOnIt == +No se puede borrar el changeset cs:{0} porque cs:{1} depende de él. Deberá borrar cs:{1} primero. + +== CannotDeleteChangesetEmptyBranchDependsOnIt == +No se puede borrar el changeset cs:{0} porque la rama vacía '{1}' depende de él. + +== CannotDeleteChangesetLabelPointsToIt == +No se puede borrar el changeset cs:{0} porque la etiqueta '{1}' apunta a él. Deberá borrar la etiqueta primero. + +== CannotDeleteChangesetIsMergeSource == +No se puede borrar el changeset cs:{0} porque es el origen de un merge. Deberá borrar el destino del merge (cs:{1}) primero. + +== CannotDeleteChangesetIsIntervalMergeSource == +No se puede borrar el changeset cs:{0} porque es parte de un merge de intervalo. + +== CannotDeleteChangesetIsChangesetZero == +No se puede borrar el changeset cs:0. Es un punto fijo en la historia del repositorio. == CannotDiffDstCsetNotComplete == No se pueden mostrar diferencias entre el changeset {0} y el changeset {1}. El changeset destino {1} no ha sido replicado en este repositorio. Asegúrese de que también ha replicado la rama que contiene este changeset. @@ -129,6 +153,9 @@ No se puede obtener el contenido de la revisión {0} en el repositorio {1} porqu == CannotSaveDataNotCo == Los datos sólo puede ser guardados en revisiones desprotegidas. +== CannotUpdateAssigneeWithMultipleReviewers == +No se puede actualizar el assignee porque la review tiene más de un revisor. + == CannotUpdateWorkspaceContainsChanges == No existen changesets más nuevos en su configuración actual a los que se pueda apuntar. Tiene cambios pendientes en su workspace, si está tratando obtener los últimos cambios, hágalo realizando la operación 'deshacer cambios' en vez de actualizar su workspace. @@ -262,12 +289,18 @@ No se puede usar una etiqueta convencional como punto de partida de una smart br == ChangeDeleteConflict == Conflicto de cambiado y borrado +== ChangeMustBeSelected == +Para seleccionar el cambio '{0}' el cambio '{1}' debe ser seleccionado también. + == ChangepasswordCommandNotAvailable == Este comando solamente está disponible en modo de configuración de usuarios por usuario/contraseña. == ChangepasswordCommandNotAvailableOnServer == Este comando solamente está disponible en modo de configuración de usuarios por usuario/contraseña y el servidor Plastic SCM no está configurado para utilizar el modo de usuarios por usuario/contraseña. +== ChangesetAlreadyExists == +El changeset {0} especificado ya existe. + == ChangesetDoesntexist == El changeset {0} especificado no existe. @@ -328,7 +361,7 @@ No se puede mover el ítem. {0} es un directorio privado. No se ha podido conectar al servidor {0}. == CmdErrorItemInCi == -No se pudo deshacer los cambios para el elemento {0}, se encuenta en CI. +No se pudo deshacer los cambios para el elemento {0}, se encuenta en CI. == CmdErrorPrivateItem == No se puede realizar la operación porque el item {0} es privado. @@ -417,6 +450,9 @@ No se puede mover el ítem. El elemento destino {0} ya existe. No se pueden sobr == DestinationDirectoryMustBeCheckedoutToMove == Para mover {0} el directorio destino debe estar desprotegido. +== DestinationMustBeCheckedin == +El origen del movido '{0}' no puede ser protegido sin proteger también el destino '{1}'. + == DirIdentical == Los dos directorios son idénticos. @@ -540,6 +576,15 @@ El servidor '{0}' requiere cifrado, pero no está permitido para servidores que == FormatAndXmlModifiersIncompatible == Los modificadores --xml y --format no son compatibles y no se pueden usar juntos. +== GameUiCheckinConflictsError == +La operación de checkin/shelve no puede ser completada porque algunos cambios locales no se pueden aplicar en la versión actual del servidor. Por favor, compruebe los conflictos entre sus cambios locales y la versión actual del servidor. + +== GameUiCiHeadOutOfDateError == +La operación de checkin no puede ser completada porque se han hecho nuevos cambios en repositorio '{0}' desde que empezó la operación. Por favor, vuelva a intentar la operación de checkin para que los nuevos cambios del servidor sean tenidos en cuenta. + +== GameuiCiInsideUnresolvedXlinkNotAllowed == +El xlink '{0}' no pudo resolverse. Los cambios debajo de un xlink no resuelto no pueden protegerse. + == GetClientContext == No se pudieron cargar datos del usuario y la máquina clientes. @@ -619,7 +664,7 @@ Tipo de servidor LDAP no válido: {0}. Nombre de módulo inválido {0}. No puede ser vacío ni contener / == InvalidOption == -Opción no válida. +Opción no válida. == InvalidOs == El Sistema Operativo no está soportado en esta edición. @@ -646,7 +691,7 @@ El valor de server name no es válido. Parámetros de usuario/contraseña incorrectos en el fichero de configuración del cliente. == InvalidValue == -Valor no válido. +Valor no válido. == InvalidWorkingMode == El modo de trabajo (seguridad y usuarios) no es válido. Revise el fichero de configuración. @@ -834,7 +879,7 @@ No se ha proporcionado ninguna organización. Es necesario trabajar contra una o La etiqueta {0} ya existe. == MsgError == -Error: +Error: == MsgNoSelector == No hay ningún selector para este espacio de trabajo. {0} @@ -890,6 +935,9 @@ No se ha encontrado el usuario: {0}. == NoWorkspaceSelected == No hay ningún espacio de trabajo seleccionado. +== NotChangedInCurrentWorkspace == +El ítem '{0}' no está cambiado en el workspace actual. + == NotEmptyIostatsFolder == Error: el directorio para las pruebas de disco no está vacío. Ruta: {0} @@ -1061,7 +1109,7 @@ La ruta segura no puede ser creada. La ruta está debajo de un xlink. Usa el di == PathSpecMultipleMatches == La especificación del ruta segura:{0} coincide con múltiples instancias. Por favor, escriba una especificación completa ( 'path#tag' o bien 'path' con el argumento: '--branches=list_of_branches' ) - + == ProblemLoadingExtension == Ocurrió un problema al cargar una extensión. @@ -1251,17 +1299,26 @@ El ítem raíz debe de ser único en el repositorio. Se han encontrado {0} eleme Es necesario guardarlo antes de poder añadirlo a Unity VCS. == ScriptVersionNotValid == -La versión de {0} del servidor de {1} es la {2}. Por favor, actualicelo a la versión {3}. +La versión de {0} del servidor de {1} es la {2}. Por favor, actualicelo a la versión {3}. == SecuredPathMovedCollission == El movido desde '{0}' a '{1}' no se puede realizar porque los permisos del usuario en la ruta origen y en la ruta destino son diferentes. +== SecurityAccessTokenDoesNotExist == +El token de acceso '{0}' no existe o no le pertenece. + +== SecurityAccessTokenExpired == +El token de acceso '{0}' expiró. + == SecurityCantActivateUser == No tiene permisos para activar el usuario {0}. Para poder activar usuarios debe ser administrador del servidor de repositorios. == SecurityCantArchive == No tiene permisos para archivar revisiones. Para poder archivar revisiones debe ser administrador del servidor de repositorios. +== SecurityCantCreateAccessToken == +No tiene permisos para crear tókenes de acceso. Si cree que es un error por favor contacte con el administrador del servidor de repositorios. + == SecurityCantDeactivateUser == No tiene permisos para desactivar el usuario {0}. Para poder desactivar usuarios debe ser administrador del servidor de repositorios. @@ -1274,6 +1331,9 @@ No tiene permisos para realizar el merge. No tiene permiso de lectura para algun == SecurityCantUpdateReviewStatus == No tiene permisos para actualizar el estado de la review. Sólo un revisor o el administrador del servidor de repositorios puede actualizar el estado. +== SecurityCantRevealAccessToken == +No tiene permisos para revelar tókenes de acceso. Si cree que es un error por favor contacte con el administrador del servidor de repositorios. + == SecurityCantRunExecquery == Sólo los administradores pueden ejecutar 'execquery'. No es un administrador y por tanto no puede ejecutar 'execquery'. @@ -1541,12 +1601,21 @@ El nombre del espacio de trabajo '{0}' ya está en uso. == WorkspaceRepAlreadyShared == El espacio de trabajo '{0}' ya está compartido. +== WorkspaceRepAlreadyLocked == +El espacio de trabajo '{0}' ya está bloqueado por otra operación concurrente. + +== WorkspaceShareNotFound == +El espacio de trabajo '{0}' no está compartido con el usuario '{1}'. + == WorkspaceUvcsConnectionAlreadyExists == La conexión UVCS '{0}' ya existe. == WorkspaceUvcsConnectionDoesntExist == La conexión UVCS '{0}' no existe. +== WorkspaceUvcsConnectionMetadataOutOfDate == +No se pueden actualizar los metadatos de la conexión UVCS '{0}' porque hay nuevos cambios en el servidor (local id:{1}, server id:{2}). + == WriteBlobError == No se pueden escribir los datos de la revisión {0} (segmento {1}) en el repositorio {2}. @@ -1685,6 +1754,9 @@ No se puede borrar un changeset en un repositorio sincronizado con Git. == MoveChangesetNotAllowedOnGitSyncRep == No se puede mover un changeset en un repositorio sincronizado con Git. +== DeleteBranchAndChangesetsNotSupported == +El servidor {0} no soporta borrar una rama y sus changesets simultáneamente. Por favor, actualice el servidor o borre los changesets uno a uno antes de borrar la rama. + == P4ExecutableDoesNotExist == No se pudo encontrar el ejecutable de Perforce CLI. Asegúrate de que está disponible en tu variable de entorno PATH. diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt.meta index 4fcc4ff..61eebeb 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5d402b5eb69bf2a4d8d62576098402e2 +guid: 22ec0cc549983824ea7cb3c168a102f1 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.ja.txt.meta index 21374eb..b058c59 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3acce38c533915541a533d057381b636 +guid: 5edd2217ce0f00a41af6abd577248fa9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.ko.txt.meta index 85d513b..485ad73 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 71ddaf9ec4276ef4c98a2e3fa5272a48 +guid: 9e29e9a5464fa4e469e32d1ffb9c9c78 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hans.txt.meta index a3f4a7b..5b77206 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8d99e9e5e8401364684770f5fe144f88 +guid: 19049260b419fa943ab9fb74e418c908 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hant.txt.meta index ee1ea72..20bddd2 100644 --- a/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/commontypes.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b9a4825c09a45a4caa8ab871a661622 +guid: b18fecc2be155304d8b2a17da40bc8b9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.en.txt.meta index 56d0073..b73fa55 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1db2198010770864a8ede3a0eabf0cfc +guid: b114783d872f8054ab48296df763c023 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.es.txt.meta index 0371c99..c4a0836 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d11207ce9096d054291c8ca1a9efd2fb +guid: ffed394aa7919d84c8d2c78a858e0aaa TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.ja.txt.meta index 63f7349..bdac5ce 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0c6ff1826c4890446857834b42f867b4 +guid: b11a0a28192543445999d17a4aca9691 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.ko.txt.meta index cf6c26a..9a347bb 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bed04f8048ebb8844822b79d75ce8d6d +guid: fe83b13779acac44e80faab64d778ef9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hans.txt.meta index 276ce38..99f4083 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f00d8cd114de8c44cbaf9c0e401e248c +guid: 741c0a4e23134144dade32c129c635a9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hant.txt.meta index 0f5d8f7..357f8f0 100644 --- a/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/configurehelper.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a8ee1c4565cac524885b9dbf89dd8d6c +guid: 10cc0f9de1b26984fb18443f9ef4a153 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.en.txt.meta index 6f85963..6bed209 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2d4fb2cf56de34e4b8cbeac528a87d19 +guid: 1348bb3988bd92a48b1af53682f29cea TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.es.txt.meta index fac5590..5901dca 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe7f481cd8b528749a6dd4d640b6e566 +guid: 83165cf3ea2c50e4fbf3a7e5f25a09d0 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.ja.txt.meta index d84cdde..19665f6 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5f6d8380d07bca046b218f9eb78aca65 +guid: 35eb2033d69834c469bd170510813cd2 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.ko.txt.meta index e38ef29..391a310 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a15823e51cfa7c4ba91f4375d46f89a +guid: c6ab678b7f09f7e42b4f976380346a8d TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.zh-Hans.txt.meta index 2382513..ac73345 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ceef1c620c020604fb0889883f5216a6 +guid: 688fee8a907faab4ba7532629669a051 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/differences.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/differences.zh-Hant.txt.meta index 1b2c1ea..90cea6b 100644 --- a/Lib/Editor/PlasticSCM/Localization/differences.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/differences.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9626d8720d1d64245a57fad995b38aa7 +guid: 5204d8a671c5dbf41b79278f78178bee TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.en.txt.meta index 43e03ec..2a0cd9e 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 07c00ba877a469748a6089905b0d5ec8 +guid: 454a7cc8594949440a7f79563164a131 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.es.txt.meta index aca0c9d..dd300f0 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9132e05e1a8ae964284b973c1801e59f +guid: c891ee1fe14d52a4292354c9d3376ef4 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.ja.txt.meta index 3f287f7..806c8f3 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e3f70cfadc52f3947b421b0b2c269ec0 +guid: 61fd576686673454886d375af79d5955 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.ko.txt.meta index 3270433..b7277e3 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce4c5f13e975c644393b62cc8c9e5af7 +guid: 9496415b9d27ada48927dea04ba25097 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hans.txt.meta index f386402..327c1c8 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ccbb13ca1b13ebe409f0befa82630c3d +guid: d6b10540318c3204e9c6aa0d7f9a0fe5 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hant.txt.meta index 0356225..823cec4 100644 --- a/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/guihelp.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fda1debff36475e4f840564cee3bc5b2 +guid: 5f26cf760a6a0614f8a39f2da26a18cb TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.en.txt.meta index 715c8f1..555ddda 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8a74d181d59e5f04bac456c0d276d283 +guid: 9f6f029232fcf894ca6e2b551e9089f7 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.es.txt.meta index 9a1d7f5..a3ff5eb 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4d4a1758430cb714298aabc68602f3b6 +guid: 55fd18469a346ba4eb9deda3f0e788aa TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.ja.txt.meta index baf42fd..ba93c2c 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 55168577af50f3c45993a4261789a59d +guid: 7f57f825166bc3742b342345e47a0ac0 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.ko.txt.meta index 127970f..fe5355f 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ad0e1a200a5ff07449e64715f395d563 +guid: e3ffb08400f495f4aa1bdf2b3b5444c3 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.zh-Hans.txt.meta index 2fca7a2..805fb02 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 00595394ec14d4644b44303bef08193b +guid: 8b6151dccbb9049488845a75dcd32c1d TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/i3.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/i3.zh-Hant.txt.meta index 5ee1f2d..6c09812 100644 --- a/Lib/Editor/PlasticSCM/Localization/i3.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/i3.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: baff4436021f67843b621c6736a91cd4 +guid: c663bc2524ebbf74f9a6b116ed1c19d1 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.en.txt.meta index 34de5ba..ea8f10f 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fb924f9d485dbc94599aad653def9b36 +guid: ff20170d8ee749647991667d537988e8 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.es.txt.meta index d51b2fe..e52e40c 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d11a335a259b2fd4ba2374d427b60b50 +guid: aadbdbd6bf092c24babc37f937fc0430 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.ja.txt.meta index f31d37b..485acee 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 02fb779d5a45b6548bca4f66657a374f +guid: 8c1edc03a6af80f4f9dfc90c097ec6ac TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.ko.txt.meta index ab96a22..ff61ad0 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc123aef7b25a6449863036febedc261 +guid: abb2ec083920db9419cc3d6efcb62f18 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.zh-Hans.txt.meta index 61eb0b7..987c864 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 978df256fe54fb54d94da1f467198b79 +guid: bd4865820c7f3ee46bab357075deb5f7 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/images.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/images.zh-Hant.txt.meta index 1f82026..2bc7c93 100644 --- a/Lib/Editor/PlasticSCM/Localization/images.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/images.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9ae0c430dc236b04ea50da5669114a43 +guid: db6eb091843f47c47a9cd346cf5c1361 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.en.txt.meta index 07599e4..6d96dfb 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a639e466f58be9644ab9e5738dd876d5 +guid: 435a1a3dac8df204f840e2a2096815aa TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.es.txt.meta index 752ce08..19ad6d4 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aa6814ed7a382114da04f9482737ec44 +guid: ee7ce3ee770237f48a444d8fc14fa77f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.ja.txt.meta index 973e9d1..bbfff14 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fd1cb86056e09ea4288ffcb70dd6110a +guid: fe25b83dbb33c944284b82db4f0a3e45 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.ko.txt.meta index 41d3f45..491ae41 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fb5e4641410ec5149a9bf6038db956df +guid: 6200eaf2c6b19744dbe481879d873af7 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hans.txt.meta index 2f10bb1..d278294 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7596c1af505b19f47bf329f6a84f8f73 +guid: afee92bca3368694da117a68ce46ffc9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hant.txt.meta index 3691adc..1a38393 100644 --- a/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/mergetool.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce64390782ed22745b2d1179ef74c610 +guid: 8bb1ce02cba589144b2b398873de989b TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt index 10a7532..9d62090 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt @@ -46,6 +46,9 @@ Code reviews == Server == Server +== Organization == +Organization + == Repository == Repository @@ -104,16 +107,16 @@ Go to branch base Branch Explorer == FilterSelectedBranches == -Filter selected branches +Filter by selected branches == FilterSelectedAndRelatedBranches == -Filter selected and related branches +Filter by selected and related branches == FilterSelectedBranchesPendingMerges == -Filter pending merges for selected branches +Filter by selected and related branches excluding already merged == RelayoutMenu == -Relayout +Reorder == MoveBranchUp == Move selected branches up @@ -128,13 +131,13 @@ Move selected branches to the top Move selected branches to the bottom == ClearBranchRelayout == -Clear selected branches relayout data +Clear selected branches reorder data == ResetRelayoutData == -Clear all relayout data +Clear all reorder data == ClearAllBranchRelayoutsDialogExplanation == -This action will remove all your branch relayout preferences for any workspace. Do you want to continue? +This action will remove all your branch reorder preferences for any workspace. Do you want to continue? == PlasticMoveBranchUpShortcutForWindows == Ctrl+Up @@ -233,7 +236,7 @@ Calculating... Copyright © 2006-{0} Unity Technologies. All Rights Reserved. == FiltersAndConditionalFormat == -Filters & format +Advanced filters & format == ReleaseNotesLinkText == Release Notes @@ -362,7 +365,7 @@ About Gluon Documentation == MainSidebarOpenUnityDashboardItem == -Open Unity Dashboard +Open Unity Cloud == MainSidebarUpdateVersionItem == Update Unity Version Control @@ -1420,12 +1423,6 @@ Cloaked == HiddenChanged == Hidden changed -== WorkspaceExplorerDialogTitle == -Available Unity VCS workspaces - -== WorkspaceExplorerDialogExplanation == -Please select a workspace from the list below: - == MainWindowTitle == Unity DevOps Version Control - wk: {0} - {1} - {2}: {3}@{4} @@ -1471,17 +1468,6 @@ On-premises == AddNewAccount == Add new account -== OnlyRelevantButton == -Only relevant - -== OnlyRelevantTooltip == -Show only the changesets that define the structure of the diagram: - - the first and last of a branch - - the parent of a branch - - the source and destination of a merge - - those that are labelled - - the working changeset - == ResolutionMethodColumn == Resolution method @@ -1632,15 +1618,6 @@ Branch Explorer search == BrexDisplayOptions == Display options -== InitialDateLabel == -From: - -== EndDateLabel == -To: - -== SinceDateLabel == -Since: - == SelectAll == Select all @@ -2252,9 +2229,6 @@ Display labels == BrexDisplayBranchTaskInfo == Display branch task info -== BrexDisplayOnlyRelevantCsets == -Display only relevant changesets - == NoReplicationSources == Not replicated @@ -2381,6 +2355,9 @@ Version == FilterWaterMark == Filter +== QuickFilterWaterMark == +Quick filter + == ExploreWorkspace == Explore workspace @@ -2426,6 +2403,9 @@ Container folder == CheckinComment == Add a comment to your check-in or shelve... +== CheckinOnlyComment == +Add a comment to your check-in... + == BrowseForFolderTitle == Browse for folder @@ -3096,9 +3076,6 @@ Destination server == DestinationReplicationRepository == Destination repository -== CreateWorkspaceButton == -Create a new workspace... - == MenuAddToIgnoreList == Add to ignored list @@ -4236,9 +4213,6 @@ Subtractive merge from changeset interval (from cs:{0} to cs:{1}) == ChangesetMerge == Merge from changeset cs:{0} -== SwitchBranchButton == -Switch branch... - == PleaseTypeAPath == Please enter a path @@ -4347,6 +4321,9 @@ What to find == PendingChangesWhatToShowTab == What to show +== PendingChangesVisualizationTab == +Visualization + == PendingChangesMoveDetectionTab == Move detection @@ -4412,6 +4389,12 @@ Group changes in "change lists" == PendingChangesGroupInChangeListsExplanation == Unity VCS can group the changes in the workspace in user created lists. This is useful if you miss the feature from previous version control. +== PendingChangesGroupInCategories == +Group changes by categories + +== PendingChangesGroupInCategoriesExplanation == +Unity VCS can group the changes in the workspace by categories like "changed", "added", "moved", "deleted". It is useful if you want to see the changes in a more organized way. + == PendingChangesViewAsATree == View as a tree @@ -5338,16 +5321,16 @@ You have {0} changes to apply and {1} questions to answer. You should not mark as reviewed a code review with pending comments. Continue anyway? == SinceOneWeekAgo == -1 week ago +Last week == SinceFifteenDaysAgo == -15 days ago +Last 15 days == SinceOneMonthAgo == -1 month ago +Last month == SinceThreeMonthsAgo == -3 months ago +Last 3 months == SinceAGivenDate == A given date @@ -5656,15 +5639,21 @@ You need to upgrade the server to version 11.0.16.8321 or higher to use the new == LoadingMembers == Loading members... -== UserChooserDialogTitle == +== UserGroupChooserDialogTitle == Please select a user or group from the list below: +== UserChooserDialogTitle == +Please select a user from the list below: + == SelectUsersDialogTitle == Select users == SelectUserGroupDialogTitle == Select user or group +== SelectUserDialogTitle == +Select user + == NoUserSelectedErrorMessage == Select a user from the list @@ -5784,6 +5773,9 @@ Both == SelectedUserOrGroup == Selected user or group: +== SelectedUser == +Selected user: + == User == User @@ -5956,9 +5948,6 @@ Retrieving organizations... == RetrievingWorkspacesProgress == Retrieving cloud workspaces... -== CreatingYourPersonalWorkspaceProgress == -Creating your personal workspace... - == GettingSSOProviders == Getting organization providers... @@ -6484,6 +6473,24 @@ Cmd+P == PlasticPermissionsShortcutForLinux == Ctrl+P +== PlasticExpandAllShortcutForWindows == +Ctrl+Shift+E + +== PlasticExpandAllShortcutForMacOS == +Cmd+Shift+E + +== PlasticExpandAllShortcutForLinux == +Ctrl+Shift+E + +== PlasticCollapseAllShortcutForWindows == +Ctrl+Shift+C + +== PlasticCollapseAllShortcutForMacOS == +Cmd+Shift+C + +== PlasticCollapseAllShortcutForLinux == +Ctrl+Shift+C + == PlasticMergeShortcutForWindows == Ctrl+M @@ -7037,10 +7044,10 @@ Cannot get the comment Copied! == OpenOrCreateWorkspace == -Open or create other workspace... +View workspaces == ViewRepositories == -View repositories... +View repositories == InviteMembersTitle == Invite members @@ -7193,10 +7200,10 @@ View content of item changed on destination No organization yet? == ClickButtonBelowToCreateOrg == -Click the button below to create a new organization from the Unity Dashboard +Click the button below to create a new organization from Unity Cloud == OpenUnityDashboard == -Open Unity Dashboard +Open Unity Cloud == CreateNewOrganization == Create a new organization @@ -7216,6 +7223,12 @@ No repository yet? == CreateNewRepository == Create a new repository +== NoWorkspacesTitle == +No workspaces yet? + +== CreateNewRepository == +Create a new workspace + == CreateRepositoryNameLabel == Repository name @@ -7992,15 +8005,9 @@ Always open shelves in current window == EmptyLabelsMessage == There are no labels created yet -== EmptyLabelsMatchQueryMessage == -There are no labels that match your query - == EmptyAttributesMessage == There are no attributes created yet -== EmptyAttributesMatchQueryMessage == -There are no attributes that match your query - == EmptyCodeReviewsMessage == There are no code reviews created yet @@ -8127,6 +8134,12 @@ Start a conversation... == MarkedReviewAs == marked review as +== SelftRequestedReview == +self-requested a review + +== RequestedReviewFrom == +requested review from + == HideOneReply == Hide 1 reply @@ -8176,4 +8189,229 @@ More than a week ago by {0} on {1} == MovedFrom == - (moved from {0}) \ No newline at end of file + (moved from {0}) + +== BrExFiltersLabel == +Filters: + +== DateFilterButton == +Date + +== SavedFilters == +Saved filters + +== SinceSpecifiedDate == +Since specified date + +== DateRange == +Date range + +== SaveCurrentFilter == +Save current filter + +== NothingHereYet == +Nothing here yet + +== UserFilterButton == +User + +== FilterByMeButton == +Me + +== FilterByMeButtonTooltip == +Shows branches created or contains changesets by the current user + +== UnassignedButton == +Unassigned + +== UnassignedButtonTooltip == +Shows reviews that don't have any reviewers assigned + +== BranchFilterButton == +Branch + +== FilterWorkingBranchButton == +Working branch + +== FilterWorkingBranchButtonTooltip == +Displays the branch that are currently being worked on + +== OtherFilterButton == +Other + +== StatusFilterButton == +Status + +== RelevantChangesetsText == +View relevant changes only + +== RelevantChangesetsExplanation == +Show only the changes defining diagram structure: branch start/end, merges, labels, parents, and working changeset + +== RelevantChangesetsShortText == +Only relevant + +== PendingToMergeBranchesText == +Exclude merged branches + +== PendingToMergeBranchesExplanation == +Omit branches already merged into any parent + +== PendingToMergeBranchesShortText == +Not merged + +== RelatedBranchesText == +Show related branches + +== RelatedBranchesExplanation == +Extend view to include parent, children, and merge-connected branches for comprehensive view + +== RelatedBranchesShortText == +Related + +== BranchesEmptyState == +Oops! It looks like there are no branches matching your filters + +== HistoryEmptyState == +Oops! It looks like there are no revisions matching your filters + +== ChangesetsEmptyState == +Oops! It looks like there are no changesets matching your filters + +== LabelsEmptyState == +Oops! It looks like there are no labels matching your filters + +== AttributesEmptyState == +Oops! It looks like there are no attributes matching your filters + +== CodeReviewsEmptyState == +Oops! It looks like there are no code reviews matching your filters + +== ResetFilters == +Reset filters + +== ReRequestReviewButton == +Re-request review + +== ListViewButton == +List view + +== TreeViewButton == +Tree view + +== ExpandAllMenuItem == +Expand all nodes + +== CollapseAllMenuItem == +Collapse all nodes + +== NewBranchButton == +New branch + +== CreateNewBranchButton == +Create new branch + +== NoBranchMatchingFilter == +There are no branches that are matching the filter + +== CreateANewBranchInstead == +You can create a new branch instead + +== MainBranchSection == +Main branch + +== RecentBranchesSection == +Recent branches + +== OtherBranchesSection == +Other branches + +== ReviewersColumn == +Reviewers + +== CreateWorkspacePanelTitle == +Create your cloud workspace on {0} organization + +== CreateWorkspacePanelDescription == +Do you want to connect this workspace to an existing repository? + +== WorkspaceWithUvcsConnectionSelectorName == +Connect workspace to a repository + +== WorkspaceWithUvcsConnectionSelectorDescription == +I want to load source files from a Unity UVCS repository to this workspace. + +== WorkspaceWithoutConnectionSelectorName == +Don't connect to a repository + +== WorkspaceWithoutConnectionSelectorDescription == +I want to import files from a local drive. + +== WorkspaceNameEntry == +Workspace name: + +== NoRepositoriesToConnect == +There are no repositories to connect the workspace to + +== RepositoryAndBranchOnlyAvailableForConnectedWks == +The repository and the branch are only available for connected workspaces + +== CollaboratorsEmptyState == +There are no collaborators yet + +== Collaborators == +Collaborators + +== LoadingMainBranchProgress == +Loading main branch... + +== ConnectingWorkspaceToRepository == +Connecting workspace to the UVCS repository... + +== SharingWorkspaceWith == +Sharing workspace with '{0}' ... + +== ExecuteQueryClearsFiltersWarningTitle == +Clear filters warning + +== ExecuteQueryClearsFiltersWarningMessage == +Executing this query will clear the display filters you have configured for this view. After the query is executed, you can re-apply them to filter the results. + +== ExecuteQueryClearsFiltersWarningPositiveButton == +Execute query + +== ApplyDateFilterClearsQueryWarningTitle == +Clear query warning + +== ApplyDateFilterClearsQueryWarningMessage == +Applying a date filter will clear the custom query you've set up for this view + +== ApplyDateFilterClearsQueryWarningMessagePositiveButton == +Apply filter + +== ResumeSyncWhenOpenWorkspaceLinkTitle == +Open cloud drive workspace + +== ResumeSyncWhenOpenWorkspaceLinkMessage == +You are trying to open the '{0}' workspace on your disk but the syncing is paused, so the workspace could be out-of-date. Do you want to resume the syncing now? + +== RepositoriesAndWorkspaces == +Repositories and workspaces + +== AllWorkspaces == +All workspaces + +== WorkspaceMenuItemAddExistingWorkspace == +Add existing workspace... + +== NoValidWorkspaceTitle == +No valid workspace + +== NoValidWorkspaceMessage == +The selected folder is not a UVCS workspace. Please select a valid workspace folder. + +== DropFolderToOpenWorkspace == +Drop here to open. Hold Shift to open in a new window. + +== DropFolderToCreateWorkspace == +Drop here to create a new workspace. diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt.meta index caaf576..c4aab76 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 80d861ef5380f6e40ba8ea20f146605a +guid: 8e65d4fafc85d574facafb71c9c9395f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt index e1d4fdb..7e417a5 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt @@ -46,6 +46,9 @@ Revisiones de código == Server == Servidor +== Organization == +Organización + == Repository == Repositorio @@ -104,16 +107,16 @@ Ir a la rama base Explorador de Ramas == FilterSelectedBranches == -Filtrar ramas seleccionadas +Filtrar por las ramas seleccionadas == FilterSelectedAndRelatedBranches == -Filtrar ramas seleccionadas y relacionadas +Filtrar por las ramas seleccionadas y relacionadas == FilterSelectedBranchesPendingMerges == -Filtrar merges pendientes para ramas seleccionadas +Filtrar por las ramas seleccionadas y relacionadas excluyendo las ya integradas == RelayoutMenu == -Relayout +Reordenamiento == MoveBranchUp == Mover ramas seleccionadas arriba @@ -128,13 +131,13 @@ Mover ramas seleccionadas arriba del todo Mover ramas seleccionadas abajo del todo == ClearBranchRelayout == -Limpiar relayout de las ramas seleccionadas +Limpiar reordenamiento de las ramas seleccionadas == ResetRelayoutData == -Limpiar todos los datos de relayout +Limpiar todos los datos de reordenamiento == ClearAllBranchRelayoutsDialogExplanation == -Esta acción eliminará todas las preferencias de relayout de rama para cualquier workspace. ¿Desea continuar? +Esta acción eliminará todas las preferencias de reordenamiento de rama para cualquier workspace. ¿Desea continuar? == PlasticMoveBranchUpShortcutForWindows == Ctrl+Up @@ -233,7 +236,7 @@ Calculando... Copyright © 2006-{0} Unity Technologies. Todos los derechos reservados. == FiltersAndConditionalFormat == -Filtros y formato +Filtros avanzados y formato == ReleaseNotesLinkText == Notas de versión @@ -362,7 +365,7 @@ Sobre Gluon Documentación == MainSidebarOpenUnityDashboardItem == -Open Unity Dashboard +Abrir Unity Cloud == MainSidebarUpdateVersionItem == Actualizar Unity Version Control @@ -1471,17 +1474,6 @@ On-premises == AddNewAccount == Añadir nueva cuenta -== OnlyRelevantButton == -Only relevant - -== OnlyRelevantTooltip == -Mostrar sólo los changesets que definen la estructura del diagrama: - - el primero y último de una rama - - el padre de una rama - - el origen y destino de un merge - - aquellos que están etiquetados - - el changeset actual - == ResolutionMethodColumn == Resolution method @@ -1632,15 +1624,6 @@ Branch Explorer search == BrexDisplayOptions == Display options -== InitialDateLabel == -From: - -== EndDateLabel == -To: - -== SinceDateLabel == -Since: - == SelectAll == Select all @@ -2252,9 +2235,6 @@ Display labels == BrexDisplayBranchTaskInfo == Display branch task info -== BrexDisplayOnlyRelevantCsets == -Display only relevant changesets - == NoReplicationSources == Not replicated @@ -2381,6 +2361,9 @@ Version == FilterWaterMark == Filter +== QuickFilterWaterMark == +Quick filter + == ExploreWorkspace == Explore workspace @@ -2426,6 +2409,9 @@ Container folder == CheckinComment == Añade un comentario de check-in o shelve... +== CheckinOnlyComment == +Añade un comentario de check-in... + == BrowseForFolderTitle == Browse for folder @@ -4230,9 +4216,6 @@ Subtractive merge from changeset interval (from cs:{0} to cs:{1}) == ChangesetMerge == Merge from changeset cs:{0} -== SwitchBranchButton == -Switch branch... - == PleaseTypeAPath == Por favor, introduzca una ruta @@ -4341,6 +4324,9 @@ Qué encontrar == PendingChangesWhatToShowTab == Qué mostrar +== PendingChangesVisualizationTab == +Visualización + == PendingChangesMoveDetectionTab == Detección de movidos @@ -4406,6 +4392,12 @@ Agrupa cambios en "listas de cambios" == PendingChangesGroupInChangeListsExplanation == Unity VCS puede agrupar los cambios en el workspace en listas creadas por el usuario. Esto es útil si echa de menos la funcionalidad de otros controles de versiones anteriores (P4). +== PendingChangesGroupInCategories == +Agrupar cambios en categorías + +== PendingChangesGroupInCategoriesExplanation == +Unity VCS puede agrupar los cambios en el workspace por categoría como "cambiados", "añadidos", "movidos", "borrados". Es útil si desea ver los cambios de una forma más organizada. + == PendingChangesViewAsATree == Ver en modo árbol @@ -5332,16 +5324,16 @@ Hay {0} cambios sin aplicar y {1} preguntas sin contestar. No deberías marcar como revisada una revisión de código con comentarios pendientes. ¿Quieres continuar? == SinceOneWeekAgo == -1 semana atrás +Última semana == SinceFifteenDaysAgo == -15 días atrás +Últimos 15 días == SinceOneMonthAgo == -1 mes atrás +Último mes == SinceThreeMonthsAgo == -3 meses atrás +Últimos 3 meses == SinceAGivenDate == Una fecha concreta @@ -5650,15 +5642,21 @@ Cargando revisón de código con título {0}... == LoadingMembers == Cargando miembros... -== UserChooserDialogTitle == +== UserGroupChooserDialogTitle == Seleccione un usuario o grupo de la lista: +== UserChooserDialogTitle == +Seleccione un usuario de la lista: + == SelectUsersDialogTitle == Seleccionar usuarios == SelectUserGroupDialogTitle == Seleccionar usuario o grupo +== SelectUserDialogTitle == +Seleccionar usuario + == NoUserSelectedErrorMessage == Seleccione un usuario de la lista @@ -5778,6 +5776,9 @@ Ambos == SelectedUserOrGroup == Usuario o grupo seleccionado: +== SelectedUser == +Usuario seleccionado: + == User == Usuario @@ -5950,9 +5951,6 @@ Obteniendo organizaciones... == RetrievingWorkspacesProgress == Obteniendo workspaces... -== CreatingYourPersonalWorkspaceProgress == -Creando tu personal workspace... - == GettingSSOProviders == Obteniendo los proveedores de la organización... @@ -6484,6 +6482,24 @@ Cmd+P == PlasticPermissionsShortcutForLinux == Ctrl+P +== PlasticExpandAllShortcutForWindows == +Ctrl+Shift+E + +== PlasticExpandAllShortcutForMacOS == +Cmd+Shift+E + +== PlasticExpandAllShortcutForLinux == +Ctrl+Shift+E + +== PlasticCollapseAllShortcutForWindows == +Ctrl+Shift+C + +== PlasticCollapseAllShortcutForMacOS == +Cmd+Shift+C + +== PlasticCollapseAllShortcutForLinux == +Ctrl+Shift+C + == PlasticMergeShortcutForWindows == Ctrl+M @@ -7037,10 +7053,10 @@ No se puede obtener el comentario ¡Copiado! == OpenOrCreateWorkspace == -Abrir o crear otro workspace... +Ver workspaces == ViewRepositories == -Ver repositorios... +Ver repositorios == InviteMembersTitle == Invite members @@ -7193,10 +7209,10 @@ Ver contenido del item modificado en destino ¿Aún no tienes una organización? == ClickButtonBelowToCreateOrg == -Haga click en el botón para crear una organización desde el Dashboard de Unity +Haga click en el botón para crear una organización desde Unity Cloud == OpenUnityDashboard == -Abrir el Dashboard de Unity +Abrir Unity Cloud == CreateNewOrganization == Crear una nueva organización @@ -7216,11 +7232,17 @@ Organizaciones == CreateNewRepository == Crear un nuevo repositorio +== NoWorkspacesTitle == +¿Aún no tienes un workspace? + +== CreateNewRepository == +Crear un nuevo workspace + == CreateRepositoryNameLabel == -Repositorio nombre +Nombre del repositorio == CreateWorkspaceNameLabel == -Espacio de trabajo nombre +Nombre del workspace == CreateWorkspaceLocationLabel == Ubicación @@ -7992,15 +8014,9 @@ Siempre abrir los shelves en la ventana actual == EmptyLabelsMessage == Aún no se han creado etiquetas -== EmptyLabelsMatchQueryMessage == -No hay etiquetas que coincidan con tu consulta - == EmptyAttributesMessage == Aún no se han creado atributos -== EmptyAttributesMatchQueryMessage == -No hay atributos que coincidan con tu consulta - == EmptyCodeReviewsMessage == Aún no se han creado revisiones de código @@ -8019,7 +8035,7 @@ No se han encontrado cambios entrantes == EmptySyncViewMessage == Aún no se han creado vistas de sincronización -== LockInfoDetailsFormatString == +== LockInfoDetailsFormatString == {0} {1} en {2} por {3} con destino {4} == LockMenuItemReleaseLock == @@ -8127,6 +8143,12 @@ Empezar una conversación... == MarkedReviewAs == marcó la revisión como +== SelftRequestedReview == +auto-solicitó revisión + +== RequestedReviewFrom == +pidió revisión a + == HideOneReply == Ocultar 1 respuesta @@ -8176,4 +8198,229 @@ Hace más de una semana por {0} el {1} == MovedFrom == - (movido de {0}) \ No newline at end of file + (movido de {0}) + +== BrExFiltersLabel == +Filtros: + +== DateFilterButton == +Fecha + +== SavedFilters == +Filtros guardados + +== SinceSpecifiedDate == +Desde la fecha especificada + +== DateRange == +Rango de fechas + +== SaveCurrentFilter == +Guardar filtro actual + +== NothingHereYet == +Nada aquí todavía + +== UserFilterButton == +Usuario + +== FilterByMeButton == +Yo + +== FilterByMeButtonTooltip == +Muestra solo las ramas creadas o que contienen cambios creados por el usuario actual + +== UnassignedButton == +Sin asignar + +== UnassignedButtonTooltip == +Muestra sólo las reviews que no tienen ningún revisor asignado + +== BranchFilterButton == +Rama + +== FilterWorkingBranchButton == +Rama de trabajo + +== FilterWorkingBranchButtonTooltip == +Muestra solo la rama de trabajo + +== OtherFilterButton == +Otros + +== StatusFilterButton == +Estado + +== RelevantChangesetsText == +Ver sólo cambios relevantes + +== RelevantChangesetsExplanation == +Mostrar sólo cambios que definen la estructura del diagrama: comienzo/fin de rama, merges, etiquetas, padres y changeset actual + +== RelevantChangesetsShortText == +Sólo relevantes + +== PendingToMergeBranchesText == +Excluir ramas integradas + +== PendingToMergeBranchesExplanation == +Omitir ramas que ya estén integradas en alguna padre + +== PendingToMergeBranchesShortText == +No integradas + +== RelatedBranchesText == +Mostrar ramas relacionadas + +== RelatedBranchesExplanation == +Extender la vista para incluir las ramas padre, hijas y conectadas por merge para tener una vista completa + +== RelatedBranchesShortText == +Relacionadas + +== BranchesEmptyState == +Ups! Parece que no hay ramas que coincidan con tus filtros + +== HistoryEmptyState == +Ups! Parece que no hay revisiones que coincidan con tus filtros + +== ChangesetsEmptyState == +Ups! Parece que no hay changesets que coincidan con tus filtros + +== LabelsEmptyState == +Ups! Parece que no hay etiquetas que coincidan con tus filtros + +== AttributesEmptyState == +Ups! Parece que no hay atributos que coincidan con tus filtros + +== CodeReviewsEmptyState == +Ups! Parece que no hay code reviews que coincidan con tus filtros + +== ResetFilters == +Restablecer filtros + +== ReRequestReviewButton == +Volver a solicitar revisión + +== ListViewButton == +Ver como lista + +== TreeViewButton == +Ver como árbol + +== ExpandAllMenuItem == +Expandir todos los nodos + +== CollapseAllMenuItem == +Contraer todos los nodos + +== NewBranchButton == +Crear rama + +== CreateNewBranchButton == +Crear nueva rama + +== NoBranchMatchingFilter == +No hay ramas que coincidan con el filtro + +== CreateANewBranchInstead == +Puedes crear una nueva rama en su lugar + +== MainBranchSection == +Rama principal + +== RecentBranchesSection == +Ramas recientes + +== OtherBranchesSection == +Otras ramas + +== ReviewersColumn == +Revisores + +== CreateWorkspacePanelTitle == +Crea tu workspace cloud en la organización {0} + +== CreateWorkspacePanelDescription == +¿Quieres conectar este workspace con un repositorio existente? + +== WorkspaceWithUvcsConnectionSelectorName == +Conecta el workspace a un repositorio + +== WorkspaceWithUvcsConnectionSelectorDescription == +Quiero cargar los ficheros fuente desde un repositorio Unity UVCS a este workspace. + +== WorkspaceWithoutConnectionSelectorName == +No conectar a un repositorio + +== WorkspaceWithoutConnectionSelectorDescription == +Quiero importar los ficheros desde una unidad local. + +== WorkspaceNameEntry == +Nombre del workspace: + +== NoRepositoriesToConnect == +No hay repositorios a los que conectar el workspace + +== RepositoryAndBranchOnlyAvailableForConnectedWks == +El repositorio y la rama solo están disponibles para workspaces conectados + +== CollaboratorsEmptyState == +Todavía no hay colaboradores + +== Collaborators == +Colaboradores + +== LoadingMainBranchProgress == +Cargando rama principal... + +== ConnectingWorkspaceToRepository == +Conectando workspace al repositorio UVCS... + +== SharingWorkspaceWith == +Compartiendo workspace con '{0}' ... + +== ExecuteQueryClearsFiltersWarningTitle == +Advertencia de limpieza de filtros + +== ExecuteQueryClearsFiltersWarningMessage == +Al ejecutar ésta query se limpiarán los filtros configurados para esta vista. Puedes volver a aplicarlos para filtrar sobre los resultados, cuando la query se haya ejecutado. + +== ExecuteQueryClearsFiltersWarningPositiveButton == +Ejecutar query + +== ApplyDateFilterClearsQueryWarningTitle == +Advertencia de limpieza de query + +== ApplyDateFilterClearsQueryWarningMessage == +Aplicar un filtro de fecha eliminará la query personalizada que hayas configurado para esta vista + +== ApplyDateFilterClearsQueryWarningMessagePositiveButton == +Aplicar filtro + +== ResumeSyncWhenOpenWorkspaceLinkTitle == +Abrir cloud drive workspace + +== ResumeSyncWhenOpenWorkspaceLinkMessage == +Está intentando abrir el workspace '{0}' en su disco pero la sincronización está pausada, por lo que el workspace podría estar desactualizado. ¿Quieres reanudar la sincronización ahora? + +== RepositoriesAndWorkspaces == +Repositorios y workspaces + +== AllWorkspaces == +Todos los workspaces + +== WorkspaceMenuItemAddExistingWorkspace == +Añadir workspace existente... + +== NoValidWorkspaceTitle == +Workspace no válido + +== NoValidWorkspaceMessage == +El workspace seleccionado no es válido. Por favor, selecciona un workspace válido. + +== DropFolderToOpenWorkspace == +Arrastra aquí para abrir. Mantén presionado Shift para abrir en una nueva ventana. + +== DropFolderToCreateWorkspace == +Arrastra aquí para crear un workspace nuevo. diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt.meta index 7c2e453..fdb500c 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 288b7fc7dfa856e4a9e7641a07260106 +guid: 284453b2104973f47a84b3ae2581aa29 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt index 7a40a31..ee2e466 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt @@ -125,7 +125,7 @@ Copyright © 2006-{0} Unity Technologies. All Rights Reserved. == FiltersAndConditionalFormat == -フィルターと形式 +高度なフィルターとフォーマット == ReleaseNotesLinkText == リリースノート @@ -1378,15 +1378,6 @@ Unity DevOps Version Control - ワークスペース:{0} - {1} - {2}:{3}@{4} == BrexDisplayOptions == オプションを表示 -== InitialDateLabel == -開始: - -== EndDateLabel == -終了: - -== SinceDateLabel == -次の日時以降: - == SelectAll == すべて選択 @@ -2077,6 +2068,9 @@ Cloud リポジトリ名を入力してください == CheckinComment == チェックインのコメントをここに入力 +== CheckinOnlyComment == +チェックインのコメントをここに入力 + == BrowseForFolderTitle == フォルダーを参照 @@ -3731,9 +3725,6 @@ SSL を使用 == ChangesetMerge == 変更セット cs:{0} からマージ -== SwitchBranchButton == -ブランチを切り替え... - == PleaseTypeAPath == パスを入力してください @@ -4734,16 +4725,16 @@ Xlink されたファイルに対するレビューのコメントはまだサ 保留中のコメントがあるコードレビューをレビュー済みとしてマークすることはできません。続行しますか? == SinceOneWeekAgo == -1 週間前 +先週 == SinceFifteenDaysAgo == -15 日前 +過去 15 日間 == SinceOneMonthAgo == -1 か月前 +先月 == SinceThreeMonthsAgo == -3 か月前 +過去 3 か月 == SinceAGivenDate == 指定した日付 diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt.meta index 446371a..f55b8d8 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9b82f763f409ae945a8f3fe575f2814b +guid: 6450df5c27dca2a46b5bcb80e1ac2f61 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt index 5009875..d0f6986 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt @@ -125,7 +125,7 @@ Copyright © 2006-{0} Unity Technologies. All Rights Reserved. == FiltersAndConditionalFormat == -필터 및 형식 +고급 필터 및 형식 == ReleaseNotesLinkText == 릴리스 노트 @@ -1378,15 +1378,6 @@ Unity DevOps Version Control - 워크스페이스: {0} - {1} - {2}: {3}@{4} == BrexDisplayOptions == 표시 옵션 -== InitialDateLabel == -다음에서: - -== EndDateLabel == -다음으로: - -== SinceDateLabel == -다음부터: - == SelectAll == 모두 선택 @@ -2077,6 +2068,9 @@ Cloud 리포지토리 이름을 입력하십시오 == CheckinComment == 여기에 체크인 코멘트 입력 +== CheckinOnlyComment == +여기에 체크인 코멘트 입력 + == BrowseForFolderTitle == 폴더 탐색 @@ -3731,9 +3725,6 @@ cs:{0} 체인지 세트에서 차감식 병합 == ChangesetMerge == cs:{0} 체인지 세트에서 병합 -== SwitchBranchButton == -브랜치 전환... - == PleaseTypeAPath == 경로를 입력하십시오 @@ -4734,16 +4725,16 @@ Xlink 파일에 대한 검토 코멘트가 아직 지원되지 않습니다 대기 중인 코멘트가 있는 코드 검토로 검토됨으로 표시하지 않아야 합니다. 그래도 계속하시겠습니까? == SinceOneWeekAgo == -1주 전 +지난주 == SinceFifteenDaysAgo == -15일 전 +지난 15일 == SinceOneMonthAgo == -1개월 전 +지난 달 == SinceThreeMonthsAgo == -3개월 전 +지난 3개월 == SinceAGivenDate == 지정된 날짜 diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt.meta index 8ef223c..6c9c853 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b637eed1e6b99f248a9e60ad897b5e69 +guid: 09a5843f59cc60f43ad9f41b70ef1fb7 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt index 7e93d3c..977229b 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt @@ -125,7 +125,7 @@ Copyright © 2006-{0} Unity Technologies. All Rights Reserved. == FiltersAndConditionalFormat == -筛选器和格式 +高级过滤器和格式 == ReleaseNotesLinkText == 发行说明 @@ -1378,15 +1378,6 @@ Unity DevOps Version Control - 工作区:{0} - {1} - {2}:{3}@{4} == BrexDisplayOptions == 显示选项 -== InitialDateLabel == -自: - -== EndDateLabel == -至: - -== SinceDateLabel == -自: - == SelectAll == 全选 @@ -2077,6 +2068,9 @@ Gluon 配置 == CheckinComment == 在此处输入签入注释 +== CheckinOnlyComment == +在此处输入签入注释 + == BrowseForFolderTitle == 浏览文件夹 @@ -3731,9 +3725,6 @@ Cloud 存储库 == ChangesetMerge == 从变更集 cs:{0} 合并 -== SwitchBranchButton == -切换分支... - == PleaseTypeAPath == 请输入路径 @@ -4734,16 +4725,16 @@ https://www.plasticscm.com/download/help/locking 不应将有待定注释的代码审查标记为已审查。是否仍然继续? == SinceOneWeekAgo == -1 周前 +上星期 == SinceFifteenDaysAgo == -15 天前 +过去 15 天 == SinceOneMonthAgo == -1 个月前 +上个月 == SinceThreeMonthsAgo == -3 个月前 +过去 3 个月 == SinceAGivenDate == 某个给定日期 diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt.meta index e765159..262a86b 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9000c32cde2f9804cab9a13d92343771 +guid: 0065f8ed94b434149b21ef788ef31982 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt index cf39269..ccb4941 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt @@ -125,7 +125,7 @@ Copyright © 2006-{0} Unity Technologies. All Rights Reserved. == FiltersAndConditionalFormat == -篩選和格式 +高級過濾器和格式 == ReleaseNotesLinkText == 版本資訊 @@ -1378,15 +1378,6 @@ Unity DevOps Version Control - 工作區:{0} - {1} - {2}:{3}@{4} == BrexDisplayOptions == 顯示選項 -== InitialDateLabel == -從: - -== EndDateLabel == -到: - -== SinceDateLabel == -開始於: - == SelectAll == 全選 @@ -2077,6 +2068,9 @@ Gluon 設定 == CheckinComment == 在此處輸入您的簽入註解 +== CheckinOnlyComment == +在此處輸入您的簽入註解 + == BrowseForFolderTitle == 瀏覽資料夾 @@ -3731,9 +3725,6 @@ Cloud 儲存庫 == ChangesetMerge == 從變更集 cs:{0} 合併 -== SwitchBranchButton == -切換分支... - == PleaseTypeAPath == 請輸入路徑 @@ -4734,16 +4725,16 @@ https://www.plasticscm.com/download/help/locking 包含暫止註解的程式碼檢閱不應標記為已檢閱。仍要繼續? == SinceOneWeekAgo == -1 週之前 +上個星期 == SinceFifteenDaysAgo == -15 天之前 +過去 15 天 == SinceOneMonthAgo == -1 個月之前 +上個月 == SinceThreeMonthsAgo == -3 個月之前 +過去 3 個月 == SinceAGivenDate == 指定日期 diff --git a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt.meta index 8cac512..ada8ef8 100644 --- a/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/plastic-gui.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: af6687f0c3807aa40898f08f4b277a50 +guid: 50f6a9e6f69802043bea6f2a094bcbc4 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.en.txt.meta index 629f866..0644aed 100644 --- a/Lib/Editor/PlasticSCM/Localization/semantic.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/semantic.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 510964a0c231b514e98803442285b457 +guid: 943a9d073b1ae3641a679d0000243de9 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.es.txt b/Lib/Editor/PlasticSCM/Localization/semantic.es.txt new file mode 100644 index 0000000..26a6d0e --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/semantic.es.txt @@ -0,0 +1,986 @@ +== Base == +Base + +== ChangedResultFile == +Do you want to save the result file? + +== ChangedDestinationFile == +Do you want to save the destination file? + +== CloseButton == +Close + +== ConfiguredStatus == +configured! + +== NotConfigureStatus == +not configured + +== Destination == +Destination + +== ErrorAutomaticOptionNeeded == +In silent mode the automatic merge option is needed + +== ErrorComparisonMethod == +Invalid comparison method + +== ErrorConflictCanNotBeApplied == +The conflict resolution cannot be applied because it depends on other conflict's resolution. Please try to resolve conflicts in a different order. The conflict resolution returned the following error: {0} + +== ErrorContributorsMustBeSpecified == +The contributors must be specified + +== ErrorEncoding == +Specified encoding cannot be identified ({0}). + +== ErrorExecutingExternalDiffTool == +An error occurred when executing external diff tool: + +== ErrorExecutingExternalMergeTool == +An error occurred when executing external merge tool: + +== ErrorExecutingExternal2WayMergeTool == +An error occurred when executing external 2-way merge tool: + +== ErrorFileTitleType == +Oops! We do not support your language... yet! + +== ErrorFileType == +SemanticMerge received the following files: {0}. +The file extensions are not recognized as supported languages. +You can run your default text-based {1} tool. + +Note: in case you know these files contain a supported language check how to use the -l param in SemanticMerge. + +== ErrorJVMNotAvailableTitle == +Oops! JVM not found - required to parse your files + +== ErrorJVMNotAvailable == +SemanticMerge requires a valid JVM installation available +in order to parse your {0} files. + +You can run your default text-based {1} tool instead. + +== ErrorNumberOfContributorsDoesNotMatch == +The number of contributors does not match + +== ErrorTabSpaces == +Invalid tab spaces + +== ErrorVersionControl == +Invalid version control to configure + +== OpenDialogFilterForExecutableFile == +Executable Files (*.exe)|*.exe + +== OpenDialogTitleForConfigFile == +Browse for config file + +== OpenDialogTitleForExecutableFile == +Browse for executable file + +== PlasticSCMConfigurationNotification == +Changes won't take effect until you reopen the Unity VCS GUI + +== RestartMergeWithConfigChangesMessage == +In order to apply the new saved configuration, the merge should be restarted. + +== RestartDiffWithConfigChangesMessage == +In order to apply the new saved configuration, the diff should be restarted. + +== RestartMergeQuestion == +You have already resolved {0} conflict(s) that will be lost. Are you sure you want to restart the merge? + +== ResultNeeded == +A result file path must be specified + +== Source == +Source + +== UnsolvedPendingConflicts == +The file still has {0} unsolved conflicts. + +== UnexpectedError == +An unexpected error has occurred. + +== UsageDescription == +Please read below the usage of the tool + +== UsageAvalonia == +Usage: {0} semanticmerge [] + + mergeOptions: [-a|--automatic] [--silent] [--merge-decl] [--process-all-merges] + [--include-format-change] [--log-external-parser] + [] [] [] + + files: {{ | }} + sortedFiles: + fileparamorder: {{-fpo | --fileparamorder}}= + The default value is --fileparamorder=s;d;b;r + + unsortedFiles: + sourceFile: {{-s | --source}}= + destinationFile: {{-d | --destination}}= + baseFile: {{-b | --base}}= + resultFile: {{-r | --result}}= + + -a | --automatic: Automatically merge without user interaction unless conflicts are found. + + --silent: This option must be used combined with the --automatic option. + When a merge can't be solved automatically, this option causes the tool to return immediately + with a non-zero exit code (no semanticmerge tool is shown). + If the tool was able to solve the merge automatically, the program returns exit code 0. + + --merge-decl: Merge automatically as many declarations* as possible. + + --process-all-merges: Merge automatically as many declarations* as possible and + run the external text based tool for each non-automatic merge declaration. + + *A declaration is the statement that defines any of the supported syntax elements: classes, methods, attributes, etc. + Depending on the element type (e.g. classes, methods), they include a body where the element is implemented. + + --include-format-change: Include changes where only indentation and EOLs have been modified. + This includes differences in white spaces and tabs at the beginning of lines and + differences in EOLs. It also includes white lines at the beginning of declarations. + By default all these differences are ignored to simplify the merge/diff. + + --log-external-parser: Enable logging the file contents to debug external parsers. + + contributorSymbolicNames: + srcSymbolicName: {{-sn | --srcsymbolicname}}= + dstSymbolicName: {{-dn | --dstsymbolicname}}= + baseSymbolicName: {{-bn | --basesymbolicname}}= + + + generalOptions: [] [] [] [] + [] [] [] + [] [] [] + defaultEncoding: {{-e | --defaultencoding}}= + resultEncoding: {{-re | --resultencoding}}= + encoding: {{ascii | ansi | unicode | bigendian | utf7 | utf8 | utf8bom | utf32be | utf32le}} + fileLanguage: {{-l | --fileslanguage}}={{csharp | vb | java | cplusplus | php}} + virtualMachine: {{-vm | --virtualmachine}}= + tabSpaces: {{-ts | --tabspaces}}={{4 | }} + extrainfofile: {{-ei | --extrainfofile}}={{path to a file containing extra merge information}} + progress: {{-pg | --progress}}={{string representing the progress in the whole merge process}} + + + contributorExtendedInfo: + + + contributorOwnerName: + srcOwnerName: {{-so | --srcowner}}= + dstOwnerName: {{-do | --dstowner}}= + baseOwnerName: {{-bo | --baseowner}}= + + contributorBranchName: ; + srcBranchName: {{-sb | --srcbranch}}= + dstBranchName: {{-db | --dstbranch}}= + baseBranchName: {{-bb | --basebranch}}= + + contributorChangeset: + srcChangeset: {{-sc | --srccset}}= + dstChangeset: {{-dc | --dstcset}}= + baseChangeset: {{-bc | --basecset}}= + + contributorComment: + srcComment: {{-sm | --srccomment}}= + dstComment: {{-dm | --dstcomment}}= + baseComment: {{-bm | --basecomment}}= + + + Examples: + + {0} semanticmerge -b=base.cs -d=dst.cs -s=src.cs -r=result.cs + + {0} semanticmerge base.cs dst.cs src.cs result.cs --fileparamorder=b;d;s;r + +== Usage == + Usage: semanticmerge [ | ] + + configureversioncontrol: {--configure-version-control}= + versioncontrolkey: {plasticscm | git} + + mergeOptions: [-a|--automatic] [--silent] [--merge-decl] [--process-all-merges] + [--nolangwarn] [--nostructurewarn] [--include-format-change] [--log-external-parser] + [] [] + [] + + files: { | } + sortedFiles: + fileparamorder: {-fpo | --fileparamorder}= + The default value is --fileparamorder=s;d;b;r + + unsortedFiles: + sourceFile: {-s | --source}= + destinationFile: {-d | --destination}= + baseFile: {-b | --base}= + resultFile: {-r | --result}= + + -a | --automatic: Automatically merge without user interaction unless conflicts are found. + + --silent: This option must be used combined with the --automatic option. + When a merge can't be solved automatically, this option causes the tool to return immediately + with a non-zero exit code (no semanticmerge tool is shown). + If the tool was able to solve the merge automatically, the program returns exit code 0. + + --merge-decl: Merge automatically as many declarations* as possible. + + --process-all-merges: Merge automatically as many declarations* as possible and + run the external text based tool for each non-automatic merge declaration. + + *A declaration is the statement that defines any of the supported syntax elements: classes, methods, attributes, etc. + Depending on the element type (e.g. classes, methods), they include a body where the element is implemented. + + --nolangwarn: Run the external text based tool directly when the language is not supported. + + --nostructurewarn: Run the external text-based tool directly if structure errors are found. + + --include-format-change: Include changes where only indentation and EOLs have been modified. + This includes differences in white spaces and tabs at the beginning of lines and + differences in EOLs. It also includes white lines at the beginning of declarations. + By default all these differences are ignored to simplify the merge/diff. + + --log-external-parser: Enable logging the file contents to debug external parsers. + + contributorSymbolicNames: + srcSymbolicName: {-sn | --srcsymbolicname}= + dstSymbolicName: {-dn | --dstsymbolicname}= + baseSymbolicName: {-bn | --basesymbolicname}= + + generalOptions: [] [] [] [] + [] [] [] + [] [] [] + defaultEncoding: {-e | --defaultencoding}= + resultEncoding: {-re | --resultencoding}= + encoding: {ascii | ansi | unicode | bigendian | utf7 | utf8 | utf8bom | utf32be | utf32le} + fileLanguage: {-l | --fileslanguage}={csharp | vb | java | cplusplus | php} + virtualMachine: {-vm | --virtualmachine}= + externalParser: {-ep | --externalparser}= + externalMergeTool: {-emt | --externalmergetool}={default | } + external2WayMerge: {-e2mt | --external2waymergetool}={ } + externalDiffTool: {-edt | --externalDiffTool}={default | } + tabSpaces: {-ts | --tabspaces}={4 | } + extrainfofile: {-ei | --extrainfofile}={path to a file containing extra merge information} + progress: {-pg | --progress}={string representing the progress in the whole merge process} + + contributorExtendedInfo: + + + contributorOwnerName: + srcOwnerName: {-so | --srcowner}= + dstOwnerName: {-do | --dstowner}= + baseOwnerName: {-bo | --baseowner}= + + contributorBranchName: ; + srcBranchName: {-sb | --srcbranch}= + dstBranchName: {-db | --dstbranch}= + baseBranchName: {-bb | --basebranch}= + + contributorChangeset: + srcChangeset: {-sc | --srccset}= + dstChangeset: {-dc | --dstcset}= + baseChangeset: {-bc | --basecset}= + + contributorComment: + srcComment: {-sm | --srccomment}= + dstComment: {-dm | --dstcomment}= + baseComment: {-bm | --basecomment}= + + + Examples: + + semanticmergetool -b=base.cs -d=dst.cs -s=src.cs -r=result.cs + + semanticmergetool base.cs dst.cs src.cs result.cs --fileparamorder=b;d;s;r + + semanticmergetool -b=base.cs -d=dst.cs -s=src.cs -r=result.cs + -e2mt=""kdiff3.exe #sourcefile #destinationfile -o #output"" + + semanticmergetool -b=base.cs -d=dst.cs -s=src.cs -r=result.cs + -emt=""kdiff3.exe #basefile #sourcefile #destinationfile -o #output"" + +== UsageCaption == +SemanticMerge Tool usage + +== WarningNoExternalDiffTool == +No external diff tool has been specified in order to proceed with the diff. + +== WarningNoExternal2MergeTool == +No external 2-way merge tool has been specified in order to merge the contents of the selected conflict. + +== WarningNoExternalMergeTool == +No external merge tool has been specified in order to proceed with the merge. + +== WarningExternalToolNotFound == +Tool not found, please introduce a valid one + +== WarningSemanticToolNotFound == +SemanticMerge tool not found, please introduce a valid one + +== WarningConfigFileNotFound == +Config file not found, please introduce a valid one + +== WarningInvalidJavaVirtualMachinePath == +Java Virtual Machine path not found + +== WarningInvalidTabSize == +Invalid tab size + +== RenameWindowTitle == +Renaming source + +== RenameWindowLabel == +New name for {0}: + +== RenameButton == +Rename + +== CancelButton == +_Cancel + +== PendingConflictsToSolve == +{0}/{1} - Conflicts to solve: {2} + +== NextConflictButtonTooltip == +Next conflict (Ctrl+PagDown) + +== PreviousConflictButtonTooltip == +Previous conflict (Ctrl+PageUp) + +== NextConflictButtonTooltipPrefix == +Next conflict ({0}) + +== PreviousConflictButtonTooltipPrefix == +Previous conflict ({0}) + +== SaveAndExitExplanation == +save the result file and exit the tool + +== SaveAndExitButton == +_Save & Exit + +== ExitWithoutSavingButton == +_Exit without saving + +== MergeWaitingAnimation == +Calculating conflicts. Please wait... + +== SyncDeclarationMenuItem == +Sync Declaration + +== OptionsButton == +Options + +== FindMenuItem == +Find... + +== OptionsMenuItem == +Options + +== ConfigureFontsAndColorsMenuItem == +Configure fonts and colors... + +== DisplayInfoAboutThisMerge == +Display info about this merge + +== LeftEncodingMenuItem == +Left encoding + +== RightEncodingMenuItem == +Right encoding + +== SkipFormatChangesMenuItem == +Skip format changes + +== ReformatSourceCode == +Reformat source code + +== ConfigurationMenuItem == +Configuration... + +== GetLicense == +Get license + +== ShowUserGuideMenuItem == +User guide + +== UserGuideURL == +https://semanticmerge.com/documentation + +== ShowIntroGuideMenuItem == +Show intro guide + +== OpenSamplesDirectoryMenuItem == +Open samples + +== FollowSemanticmergeMenuItem == +Follow @semanticmerge + +== AboutSemanticmergeMenuItem == +About + +== VisualDiffWindowTitle == +Visual Diff + +== VisualDiffExplanation == +Shows a graphic that explains the diff + +== VisualDiffOptionExplanation == +Select two declarations and click diff in order to see the differences + +== VisualDiffControlExplanation == +Use the control key with the scroll wheel to zoom in and zoom out + +== ZoomInExplanation == +Zoom in on the graphic; you can also use the control key with the scroll wheel to zoom in + +== ZoomOutExplanation == +Zoom out on the graphic; you can also use the control key with the scroll wheel to zoom out + +== VisualMergeWindowTitle == +Visual Merge + +== VisualMerge == +_Visual Merge + +== VisualMergeExplanation == +Shows a graphic that explains the merge + +== RunTextMerge == +Run _text merge + +== RunTextMergeExplanation == +Runs the traditional, text based, merge tool + +== RestartMerge == +R_estart merge + +== RestartMergeExplanation == +Discards all the changes and restarts the merge operation + +== ProcessAllMerges == +Process all conflicts + +== ProcessAllMergesExplanation == +Merges automatically as many declarations as possible and runs the external text based tool for each non-automatic merge declaration + +== VisualDiffButton == +_Visual diff + +== RestartDiffButton == +_Restart diff + +== RestartDiffExplanation == +Restarts the diff operation + +== RunTextDiffButton == +Run _text diff + +== RunTextDiffExplanation == +Runs the traditional, text based, diff tool + +== OutlinePanelVisualDiffButton == +_Visual Diff + +== OutlinePanelRunTextDiffButton == +Run _Text Diff + +== DivergentMoveDetails == +Divergent Move Details + +== ShowMergeInfoExplanation == +Displays the Merge information + +== MergeInfoResultFile == +Result file: + +== MergeInfoLanguage == +Language: + +== MergeInfoBaseFile == +Base file + +== MergeInfoSourceFile == +Source file + +== MergeInfoDestinationFile == +Destination file + +== MergeInfoFileName == +Name: + +== MergeInfoFilePath == +Path: + +== MergeInfoExtraInfo == +Extra info + +== SemanticOutline == +Semantic Outline + +== ExpandSemanticOutlineTooltip == +Expand Semantic Outline + +== CollapseSemanticOutlineTooltip == +Collapse Semantic Outline + +== PendingConflicts == +Conflicts to solve ({0}) + +== PendingConflictsExplanation == +Shows the conflicts that need to be solved manually: happens when the same element has been modified both in 'their changes' and 'your changes' + +== SelectTwoDeclarationsToSeeDifferences == +Please, select two declarations in order to see the differences. + +== DiffExplanation == +Shows the diffs of this element + +== SourceDifferences == +Src - their changes ({0}) + +== SourceDifferencesExplanation == +the changes made in the code you're merging from (theirs). Shows the differences between the base and the source contributor + +== DestinationDifferences == +Dst - your changes ({0}) + +== DestinationDifferencesExplanation == +the changes on your working copy (yours). Shows the differences between the base and the destination contributor + +== NoConflictMessageText == +There are no conflicts to check. + +== NoConflictMessageDetail == +It means that the tool can solve the merge without user intervention. + +Probably you're seeing this because you want to review the merge anyway. + +But in case you prefer to automate the conflict resolution as much as possible: add the \"-a\" argument to the semanticmerge commandline. + +== MaximizeButtonLeftTooltip == +Maximize left panel + +== RestoreButtonLeftTooltip == +Restore left panel + +== MaximizeButtonSrcTooltip == +Maximize source panel + +== RestoreButtonSrcTooltip == +Restore source panel + +== MaximizeButtonDstTooltip == +Maximize destination panel + +== RestoreButtonDstTooltip == +Restore destination panel + +== MaximizeButtonBaseTooltip == +Maximize base panel + +== RestoreButtonBaseTooltip == +Restore base panel + +== MaximizeButtonResultTooltip == +Maximize result panel + +== RestoreButtonResultTooltip == +Restore result panel + +== CopyToClipboard == +Copy to clipboard + +== BackButtonTooltip == +Back + +== FindMatchesButton == +Find _matches + +== FindMatchesButtonNoUnderscore == +Find matches + +== DiffMatchButton == +_Diff + +== DiffMatchButtonNoUnderscore == +Diff + +== MatchButton == +_Match + +== MatchButtonNoUnderscore == +Match + +== UnMatchButton == +_Unmatch + +== UnMatchButtonNoUnderscore == +Unmatch + +== SelectElementToMatch == +Select an element to match + +== EditResultExplanation == +You cannot edit the result file until all conflicts are resolved. There are {0} conflict(s) remaining. + +== KeepSourceExplanation == +Keeps the source changes + +== KeepDestinationExplanation == +Keeps the destination changes + +== KeepBothExplanation == +Keeps both changes + +== RenameExplanation == +Renames the destination + +== MergeExplanation == +Runs the external text merge tool to solve this conflict + +== TwoWayMergeExplanation == +Launches the external 2 way mergetool to solve this conflict + +== DisplayConfigurationWindowExplanation == +Shows the configuration window + +== DisplayAboutWindowExplanation == +Shows the about window + +== HideUnchangedSelectionExplanation == +Show only changed declarations + +== ShowUnchangedSelectionExplanation == +Show the complete tree files, so you can check every declaration + +== GroupUnchangedSelectionExplanation == +Show changed declarations grouping the rest of the declarations into an unchanged one + +== ExplainMoveMoveExplanation == +Explains how the element was moved to different locations on source and destination contributors + +== SourceFileExplanation == +Source contributor file + +== BaseFileExplanation == +Base file, the ancestor of the source and destination files used during merge + +== DestinationFileExplanation == +Destination contributor file + +== FindMatchesExplanation == +Opens the matches window for matching an adedd with a deleted + +== UnmatchExplanation == +Unmatch - in case methods were wrongly matched between base and this contributor, you can unmatch, convert them to added/deleted and correct the match manually + +== MatchExplanation == +Applies the match to the selected item + +== InvalidEmail == +Invalid email + +== InvalidReport == +Invalid report + +== EnterValidEmailAndReport == +Please enter your email address, the subject and the comments. + +== EnterValidEmailAddress == +Please enter a valid email address. + +== ErrorReadingSampleTitle == +Error reading sample + +== ErrorReadingSampleDescription == +Cannot parse sample from file {0}: {1} + +== SamplesWindowExplanation == +For every sample case, we recommend you run the traditional merge tool and compare it with SemanticMerge + +== ShowIntroGuideButton == +Show intro _guide + +== RunTextMergetoolButton == +Text + +== RunSemanticMergetoolButton == +Semantic + +== WelcomeSemantic20 == +Welcome to SemanticMerge 2.0 + +== WelcomeExplanation1 == +Semantic is a different kind of merge tool. It parses the code before calculating the merge, which makes it possible to detect and automatically solve most conflicts. + +== WelcomeExplanation2 == +It is different than most merge tools you have used so far, so it is worth investing a few minutes browsing the sample cases to become a real merge master and get the best out of the tool. + +== ExploreTheSamplesButton == +_Explore the samples + +== ReadTheIntroGuideLinkText1 == +To learn more about the SemanticMerge fundamentals + +== ReadTheIntroGuideLinkText2 == +Read the Intro Guide + +== ReadTheIntroGuideLinkText3 == + (3 minutes read). + +== DontShowThisDialogOnStartup == +Don't _show this dialog on start up + +== RunTheToolButton == +Run the _tool + +== ParsingErrorsLabel == +Some issues were found while processing these files. + +== ShowParsingErrorsButton == +Show parsing errors + +== ReleaseNotesBaseUrl == +https://www.plasticscm.com/download/releasenotes + +== MultifileCurrentFile == +File {0} of {1}: + +== MultifileCurrentFileExplanation == +This is the current file. To change file use the conflict navigation buttons and also the multi-file moves. + +== Ready == +Ready + +== UnparsedFilesError == +Some of the files couldn't be parsed. +Please continue with the external tool. + +== UnrebuiltFilesError == +Some of the files couldn't have their structure properly recognized. +Please continue with the external tool. + +== ParsingErrorsDescription == +The following parsing errors have been found, the trees could be inconsistent: + +== ConfirmRestartMergeTitle == +Confirm restarting merge + +== AndText == +and + +== Automatic == +Automatic + +== AutomaticallySolvedConflictSemanticMerge == +Automatically solved using {0} + +== ManuallySolvedConflictSemanticMerge == +Manually solved using {0} + +== SolvedConflictSemanticMerge == +Solved using {0} + +== KeepSourceActionText == +Keep src + +== KeepDestinationActionText == +Keep dst + +== KeepBothActionText == +Keep both + +== RenameActionText == +Rename + +== MergeActionText == +Merge + +== TwoWayMergeActionText == +2 merge + +== ChangePositionActionText == +Change position + +== DiffConflictButton == +Diff + +== KeepDstChangesButton == +Keep destination + +== KeepSrcChangesButton == +Keep source + +== MergeButton == +Merge + +== TwoWayMergeButton == +2-way + +== ExplainMoveButton == +Explain move + +== ViewConflictOnResultButton == +View on result + +== ViewMoveSrcOnResultButton == +Source on result + +== ViewMoveDstOnResultButton == +Destination on result + +== ChangePositionButton == +Change position + +== AddedDifferenceName == +Added + +== MovedDifferenceName == +Moved + +== DeletedDifferenceName == +Deleted + +== ChangedDifferenceName == +Changed + +== RenamedTo == +Renamed to {0} + +== MovedTo == +Moved to {0} + +== MovedFrom == +Moved from {0} + +== MovedFromOtherElement == +other element + +== MovedFromFirstLevel == +first level + +== MovedPosition == +Moved {0} position + +== MovedPositions == +Moved {0} positions + +== MoveDown == +down + +== MoveUp == +up + +== XAndY == +{0} and {1} + +== HideUnchanged == +Hide unchanged + +== HideUnchangedTooltip == +Show changed declarations only + +== ShowUnchanged == +Show unchanged + +== ShowUnchangedTooltip == +Show the complete file trees, so you can check every declaration + +== GroupUnchanged == +Group unchanged + +== GroupUnchangedTooltip == +Show changed declarations grouping the rest of the declarations into an single, unchanged one + +== DiffButton == +Diff + +== ZoomIn == +Zoom in + +== ZoomInTooltip == +Zoom in on the graphic - you can also use the scroll wheel while holding the control key pressed + +== ZoomOut == +Zoom out + +== ZoomOutTooltip == +Zoom out on the graphic - you can also use the scroll wheel while holding the control key pressed + +== BaseLabel == +Base + +== SrcLabel == +Source (their changes) + +== DstLabel == +Destination (your changes) + +== BaseTooltip == +The common ancestor, it is the parent version of the two files you are merging. It shows how the file was originally + +== SrcTooltip == +The changes made in the code you're merging from (theirs). Shows the differences between the base and the source contributor + +== DstTooltip == +The changes on your working copy (yours). Shows the differences between the base and the destination contributor + +== NotResolved == +Not resolved + +== ChangeEditorFont == +Change editor font... + +== Options == +Options + +== EditorOptions == +Editor options + +== ConfigurationDialogHeader == +Configuration + +== ConfigurationDialogTitle == +Semantic Merge - Configuration + +== AutomaticCheckBox == +Automatically merge without user interaction unless conflicts are found (-a) + +== MergeDeclCheckBox == +Merge declaration conflicts that can be solved automatically (--merge-decl) + +== IncludeFormatChangeCheckBox == +Don't ignore indentation and EOL changes (--include-format-change) + +== ProcessAllMergesCheckBox == +Launch the external tool to process unsolved conflicts (--process-all-merges) + +== NoLangWarnCheckBox == +Run the external tool when the language is not supported (--nolangwarn) + +== NoStructureWarnCheckBox == +Run the external tool when structure errors are found (--nostructurewarn) + +== NoJvmWarnCheckBox == +Run the external tool when no JVM is available (Java and C++) (--nojvmwarn) + +== JvmPathLabel == +Path to the Java Virtual Machine + +== ExternalParserLabel == +Command to run the external parser + +== ConfigurationDialogExplanation == +Sets up various options for interacting with and resolving conflicts with semantic merge + +== BrowseJvmPath == +Select path to JVM + +== ExternalToolsAreaTitle == +External Tools + +== PathNotFound == +Path not found diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.es.txt.meta new file mode 100644 index 0000000..1b74469 --- /dev/null +++ b/Lib/Editor/PlasticSCM/Localization/semantic.es.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 463106dbdcf577949ab36c3a49ec6c87 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.ja.txt.meta index 1bbe79f..90203f7 100644 --- a/Lib/Editor/PlasticSCM/Localization/semantic.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/semantic.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9dce5306424227044bd49cd58ec727f1 +guid: ae5aa428c01a98b45960aefa07c0c60c TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.ko.txt.meta index bfaff20..211cd79 100644 --- a/Lib/Editor/PlasticSCM/Localization/semantic.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/semantic.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 224aea9be81f87741a8db896331b8d26 +guid: 5e6ab4265e152cc49b15efa9512e10d3 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hans.txt.meta index dd99b29..8a14042 100644 --- a/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ebb2449983c661d4d93b8d5f344dabcf +guid: a8791c9b031e9e243a85c9fda37ab2cd TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hant.txt.meta index 791c56a..f3b4672 100644 --- a/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/semantic.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e0ba82707f7406d4f95b5455e9cd38d3 +guid: 0c9c729a7a661cf44825b718e2f49e12 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.en.txt.meta index ba02f47..143df75 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4fd9982497c9cfb4c82be00d205da3a5 +guid: cff591b828d426c4699ddb494ac3b88c TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.es.txt.meta index 7dfe649..6db6994 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e35e8945a7ffbbb488a5cefb758f5c31 +guid: 02d35bb1904e6584286141bff6e76f32 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.ja.txt.meta index 0626490..c9fc471 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 556152bf0bc2cc74db4642b0208e5aa4 +guid: 1670821569e80214b859041484c748b5 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.ko.txt.meta index f775779..77e2b08 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f679fb3baaca1894282082560353ed4e +guid: 227896aca0c301a4585aada75c228cb6 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hans.txt.meta index 67c00bd..9da3429 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c32013306c1266643a35370ad7f92a5c +guid: 687996338f2e8cc41b6e5d9fbd175d83 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hant.txt.meta index 575ed09..ba5b931 100644 --- a/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/workspaceserver.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dc43ab2204c11f646ba25e83e651b281 +guid: c05f59b03a224df40867d3d91cd83329 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.en.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.en.txt.meta index 8b6f086..70b90cf 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.en.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.en.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8ed1304f9120d54aaba43ecc6f05864 +guid: e0e5b4f7d1ed89647bc0b6cb66a0b163 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.es.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.es.txt.meta index 8d21781..e2bc229 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.es.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.es.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bd2be3f917f9d8a4d8e0642d3b5a22b8 +guid: 82fe033347dbde641a3bdc6f90a114c2 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.ja.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.ja.txt.meta index f1264a5..442a04d 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.ja.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.ja.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 64618c2792c8b3544aa5b4f0656f8101 +guid: 0cfa9a0857695774382fa48aee6a5f67 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.ko.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.ko.txt.meta index 59e2c1e..f228221 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.ko.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.ko.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1117cd6d1db24384481b2c1ca64f1578 +guid: de92e17b2c687434ea96f7c5a61f0055 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hans.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hans.txt.meta index a9f4db5..0abc9d7 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hans.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hans.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d93f9d6900e4a3b40bf4f10f94802f0a +guid: cb7d3c0f0f3d83d4ea3eef85633095b4 TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hant.txt.meta b/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hant.txt.meta index 4ede1a8..6ca3da8 100644 --- a/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hant.txt.meta +++ b/Lib/Editor/PlasticSCM/Localization/xdiff.zh-Hant.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 44ef36b1799dc1f4fa1154d0514dce52 +guid: a5b86b38843a5b447a7095b99212981f TextScriptImporter: externalObjects: {} userData: diff --git a/Lib/Editor/PlasticSCM/unityplastic.dll b/Lib/Editor/PlasticSCM/unityplastic.dll index ca4b7e3..407a54a 100644 Binary files a/Lib/Editor/PlasticSCM/unityplastic.dll and b/Lib/Editor/PlasticSCM/unityplastic.dll differ diff --git a/Lib/Editor/PlasticSCM/unityplastic.dll.meta b/Lib/Editor/PlasticSCM/unityplastic.dll.meta index b9d10f4..0dd75a6 100644 --- a/Lib/Editor/PlasticSCM/unityplastic.dll.meta +++ b/Lib/Editor/PlasticSCM/unityplastic.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d278c77d8fa8da146ad3c5864d34d44c +guid: d393e9cfedc74084da9a58a4c06f62e7 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/package.json b/package.json index a8bc406..7dd651e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.unity.collab-proxy", "displayName": "Version Control", - "version": "2.3.1", + "version": "2.4.3", "unity": "2020.3", "unityRelease": "48f1", "description": "The package gives you the ability to use Unity Version Control in the Unity editor. To use Unity Version Control, a subscription is required. Learn more about how you can get started for free by visiting https://unity.com/solutions/version-control", @@ -23,18 +23,18 @@ ], "category": "Editor", "relatedPackages": { - "com.unity.collab-proxy.tests": "2.3.1" + "com.unity.collab-proxy.tests": "2.4.3" }, "_upm": { - "changelog": "Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started!\nIf you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.\nRemoving a previously added Plastic SCM Asset Store Plug-In:\n\n- Select the PlasticSCM folder in the Assets\\Plugins folder on the Project tab, then click Edit > Delete\n- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.\n\n### Added\n\n- New view to list and manage locks.\n\n### Fixed\n\n- Fixed DropdownField not working properly on a ModalUtility window on MacOS.\n- Fixed issue with existing checkout operations locking the workspace.\n- Retained locks prevented to checkout assets.\n- Reviewed initialization and application lifecycle.\n- Fixed layout error when switching checkout status in the inspector.\n- Fixed Diff option unavailable for .prefab.\n- Fixed UI error when opening and closing multiple closable tabs.\n- Ensured branch creations start from the latest changeset.\n- Unable to expand added item list after collapsing.\n- Pending Changes context menu had the view file history greyed out for asset+meta.\n- Preconfigured date format was not recognized as a valid DateTime.\n- Fixed finding changes operation being firing constantly.\n- Removed obsolete content in package documentation.\n- Fixed typo in locks tooltip." + "changelog": "### Added\n\n- Changed the default ignore.conf to not ignore itself\n- Added \"Undo unchanged\" and \"Undo checkouts keeping changes\" options to pending changes view\n- Removed focus redirection after Check-in\n\n### Fixed\n\n- Moving folders in the Editor now correctly use the UVCS \"Move\" operation\n- Fixed hang on domain reload \n- Fixed \"item with the same key has already been added\" error\n- Fixed failure to delete a .meta file when deleting a private folder from the pending changes\n- Supported workspace name with non-latin characters in Pending Changes\n- Fixed text cut-off in filter rules dialog\n- Fixed unexpected error while switching between branches\n- Fixed error after renaming a parent branch of the working branch\n- Fixed variables's value becoming clear after resolving conflict in inspector\n- Removed misleading indication about shelves\n- Fixed column sorting in pending changes view\n- Fixed missing incoming changes after removing a branch\n- Fixed \"Collection was modified\" error when doing multiple renames in a row\n- Fixed undo & check-in operations not working when the current scene was never saved\n- Fixed check in error if nothing is selected in the pending changes tree" }, "upmCi": { - "footprint": "11a1cb66191871ff0c6847a1fdae7d022c6300d4" + "footprint": "37d231fcc2d5df5d9a23dabe85e2454320fa3a37" }, - "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.3/manual/index.html", + "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.collab-proxy@2.4/manual/index.html", "repository": { "url": "https://github.cds.internal.unity3d.com/unity/com.unity.cloud.collaborate.git", "type": "git", - "revision": "613362ccb4468f55ee42e0a35809fb9a61f3f8f1" + "revision": "d4c8fa70dd9679b33019945dc0a483c8c7e8038f" } }