暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

LocalStatusCache.cs 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Collections.Generic;
  2. using Codice;
  3. using Codice.Client.BaseCommands;
  4. using Codice.Client.Commands.WkTree;
  5. using Codice.CM.Common;
  6. using PlasticGui.WorkspaceWindow;
  7. namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
  8. {
  9. internal class LocalStatusCache
  10. {
  11. internal LocalStatusCache(WorkspaceInfo wkInfo)
  12. {
  13. mWkInfo = wkInfo;
  14. }
  15. internal AssetStatus GetStatus(string fullPath)
  16. {
  17. AssetStatus result;
  18. if (mStatusByPathCache.TryGetValue(fullPath, out result))
  19. return result;
  20. result = CalculateStatus(
  21. fullPath,
  22. mWkInfo.ClientPath,
  23. FilterManager.Get().GetIgnoredFilter(),
  24. FilterManager.Get().GetHiddenChangesFilter());
  25. mStatusByPathCache.Add(fullPath, result);
  26. return result;
  27. }
  28. internal void Clear()
  29. {
  30. mStatusByPathCache.Clear();
  31. }
  32. static AssetStatus CalculateStatus(
  33. string fullPath,
  34. string wkPath,
  35. IgnoredFilesFilter ignoredFilter,
  36. HiddenChangesFilesFilter hiddenChangesFilter)
  37. {
  38. WorkspaceTreeNode treeNode = PlasticGui.Plastic.API.GetWorkspaceTreeNode(fullPath);
  39. if (CheckWorkspaceTreeNodeStatus.IsPrivate(treeNode))
  40. {
  41. return ignoredFilter.IsIgnored(fullPath) ?
  42. AssetStatus.Ignored : AssetStatus.Private;
  43. }
  44. if (CheckWorkspaceTreeNodeStatus.IsAdded(treeNode))
  45. return AssetStatus.Added;
  46. AssetStatus result = AssetStatus.Controlled;
  47. if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(treeNode) &&
  48. !CheckWorkspaceTreeNodeStatus.IsDirectory(treeNode))
  49. result |= AssetStatus.Checkout;
  50. if (hiddenChangesFilter.IsHiddenChanged(fullPath))
  51. result |= AssetStatus.HiddenChanged;
  52. return result;
  53. }
  54. Dictionary<string, AssetStatus> mStatusByPathCache =
  55. BuildPathDictionary.ForPlatform<AssetStatus>();
  56. readonly WorkspaceInfo mWkInfo;
  57. }
  58. }