92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | using System.Linq; | ||
|  | 
 | ||
|  | using Codice.Client.BaseCommands; | ||
|  | using Codice.CM.Common; | ||
|  | using Unity.PlasticSCM.Editor.AssetUtils; | ||
|  | 
 | ||
|  | namespace Unity.PlasticSCM.Editor | ||
|  | { | ||
|  |     internal static class ProjectPackages | ||
|  |     { | ||
|  |         internal static bool ShouldBeResolvedFromPaths( | ||
|  |             WorkspaceInfo wkInfo, List<string> updatedItems) | ||
|  |         { | ||
|  |             if (IsDynamicWorkspace(wkInfo)) | ||
|  |                 return true; | ||
|  | 
 | ||
|  |             return updatedItems.Any(ShouldPathBeResolved); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static bool ShouldBeResolvedFromUpdateReport( | ||
|  |             WorkspaceInfo wkInfo, List<string> updatedItems) | ||
|  |         { | ||
|  |             if (IsDynamicWorkspace(wkInfo)) | ||
|  |                 return true; | ||
|  | 
 | ||
|  |             updatedItems = updatedItems.Select(GetPathFromUpdateReport).ToList(); | ||
|  | 
 | ||
|  |             return updatedItems.Any(ShouldPathBeResolved); | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static bool ShouldBeResolvedFromUpdateProgress( | ||
|  |            WorkspaceInfo wkInfo, UpdateProgress progress) | ||
|  |         { | ||
|  |             if (progress == null) | ||
|  |                 return false; | ||
|  | 
 | ||
|  |             if (IsDynamicWorkspace(wkInfo)) | ||
|  |                 return true; | ||
|  | 
 | ||
|  |             return ShouldBeResolved(progress.AddedItems.Where(i => !i.IsDirectory)) | ||
|  |                 || ShouldBeResolved(progress.DeletedItems) | ||
|  |                 || ShouldBeResolved(progress.ChangedItems.Where(i => !i.IsDirectory)) | ||
|  |                 || ShouldBeResolved(progress.MovedItems); | ||
|  |         } | ||
|  | 
 | ||
|  |         static bool IsDynamicWorkspace(WorkspaceInfo wkInfo) | ||
|  |         { | ||
|  |             // We cannot obtain the updated items from a dynamic workspace, so for the moment, | ||
|  |             // we'll force the Packages reimport for these kind of workspaces. | ||
|  |             return Codice.CM.WorkspaceServer.IsDynamicWorkspace.Check(wkInfo); | ||
|  |         } | ||
|  | 
 | ||
|  |         static bool ShouldBeResolved(IEnumerable<UpdateProgress.UpdatedItem> items) | ||
|  |         { | ||
|  |             return items.Select(i => i.Path).Any(ShouldPathBeResolved) | ||
|  |                 || items.Any(i => i.IsDirectory); | ||
|  |         } | ||
|  | 
 | ||
|  |         static bool ShouldBeResolved(IEnumerable<UpdateProgress.UpdatedMovedItem> items) | ||
|  |         { | ||
|  |             return items.Select(i => i.DstPath).Any(ShouldPathBeResolved) | ||
|  |                 || items.Any(i => i.IsDirectory); | ||
|  |         } | ||
|  | 
 | ||
|  |         static bool ShouldPathBeResolved(string path) | ||
|  |         { | ||
|  |             return AssetsPath.IsPackagesRootElement(path) | ||
|  |                 || AssetsPath.IsScript(path); | ||
|  |         } | ||
|  | 
 | ||
|  |         static string GetPathFromUpdateReport(string item) | ||
|  |         { | ||
|  |             if (string.IsNullOrEmpty(item)) | ||
|  |                 return string.Empty; | ||
|  | 
 | ||
|  |             // For full workspaces we expect to receive the updated items with format <{UPDATE_TYPE}:{ITEM_PATH}> | ||
|  |             if (!item.StartsWith("<") || !item.EndsWith(">")) | ||
|  |                 return string.Empty; | ||
|  | 
 | ||
|  |             int startIndex = item.IndexOf(":") + 1; | ||
|  | 
 | ||
|  |             if (startIndex == 0) | ||
|  |                 return string.Empty; | ||
|  | 
 | ||
|  |             int endIndex = item.Length - 1; | ||
|  | 
 | ||
|  |             return item.Substring(startIndex, endIndex - startIndex); | ||
|  |         } | ||
|  |     } | ||
|  | } |