/// <summary> /// 传入一个Asset的Path,检查是否在当前Group的规则内 /// </summary> /// <param name="assetPath"></param> /// <returns></returns> public bool IsAssetPathMatch(string assetPath) { string path_lower = assetPath.ToLower(); //后缀名过滤 foreach (var ext in IgnoreExtensionLower) { if (path_lower.EndsWith(ext)) { return(false); } } bool whitelist = false; //在Asset白名单里? if (AssetPathsLower.Contains(path_lower)) { whitelist = true; } //在folder里? if (!whitelist) { foreach (var path in FolderPathsLower) { if (_IsAssetPathMatchFolder(ref path_lower, path)) { whitelist = true; break; } } } if (!whitelist) { return(false); } //检查是否在Group的黑名单里 foreach (var ignorePath in IgnoreSubpathLower) { if (_IsAssetPathMatchFolder(ref path_lower, ignorePath)) { //命中忽略名单 return(false); } } return(true); }
public void SetOptions(VFSGroupOption option) { mOption = option; GroupName = option.GroupName; foreach (var path in option.FolderPaths) { if (!path.EndsWith("/")) { string _path = path + "/"; FolderPaths.Add(_path); FolderPathsLower.Add(_path.ToLower()); } else { FolderPaths.Add(path); FolderPathsLower.Add(path.ToLower()); } } foreach (var path in option.AssetPaths) { AssetPaths.Add(path); AssetPathsLower.Add(path.ToLower()); } //忽略子目录,子目录必须是FolderPaths的子目录,这里初始化的时候过滤一下无效的配置,节省后面的运算 foreach (var path in option.IgnoreSubPath) { string _path = (path.EndsWith("/")) ? path : path + "/"; string path_lower = _path.ToLower(); foreach (var folder in FolderPathsLower) { if (VFSUtil.IsSubpath(path_lower, folder, false)) { IgnoreSubpath.Add(_path); IgnoreSubpathLower.Add(path_lower); break; } } } //忽略后缀名 foreach (var ext in option.IngnoreExtName) { IgnoreExtensionLower.Add(ext.StartsWith(".") ? ext.ToLower() : "." + ext.ToLower()); } //特殊打包规则 foreach (var rule in option.FolderSpecialBuildRules) { bool flag = true; if (rule.DevType == FolderBuildDevelopType.normal && rule.BuildType == FolderBuildType.normal) { flag = false;//这是条没必要的规则 } if (rule.FolderPath.IsNullOrEmpty() || rule.FolderPath.IsNullOrWhiteSpace()) { flag = false; } string _folder_path = (rule.FolderPath.EndsWith("/")) ? rule.FolderPath : rule.FolderPath + "/"; string _folder_lower = _folder_path.ToLower(); if (!IsSubfolderOfFolderList(_folder_path)) { flag = false; } if (flag) { var _rule = rule; _rule.FolderPath = _folder_path; var lower_rule = rule; lower_rule.FolderPath = _folder_lower; SpecialFolderBuildRules.Add(_rule); SpecialFolderBuildRulesLower.Add(lower_rule); } } }