/// <nodoc /> public RootModuleConfiguration(IRootModuleConfiguration template, PathRemapper pathRemapper) : base(template, pathRemapper) { Contract.Assume(template != null); Contract.Assume(pathRemapper != null); ModulePolicies = new Dictionary <ModuleId, IModuleConfiguration>(); SearchPathEnumerationTools = new List <RelativePath>( template.SearchPathEnumerationTools.Select(pathRemapper.Remap)); foreach (var module in template.ModulePolicies.Values) { ModulePolicies.Add(module.ModuleId, new ModuleConfiguration(module, pathRemapper)); } }
/// <summary> /// Constructs a new FileAccessWhiteList from the root configuration. /// </summary> /// <remarks>Throws a BuildXLException on error.</remarks> public void Initialize(IRootModuleConfiguration rootConfiguration) { Contract.Assert(m_parent == null, "Only root whitelist can be initialized"); Initialize((IModuleConfiguration)rootConfiguration); foreach (var module in rootConfiguration.ModulePolicies.Values) { if ((module.FileAccessWhiteList.Count == 0) && (module.CacheableFileAccessWhitelist.Count == 0)) { continue; } var moduleWhitelist = new FileAccessWhitelist(this); moduleWhitelist.Initialize(module); m_moduleWhitelists.Add(module.ModuleId, moduleWhitelist); } }
/// <summary> /// Class constructor /// </summary> public PipExecutionState( IConfiguration configuration, LoggingContext loggingContext, PipTwoPhaseCache cache, FileAccessWhitelist fileAccessWhitelist, IDirectoryMembershipFingerprinter directoryMembershipFingerprinter, SemanticPathExpander pathExpander, IExecutionLogTarget executionLog, DirectoryMembershipFingerprinterRuleSet directoryMembershipFinterprinterRuleSet, FileContentManager fileContentManager, IUnsafeSandboxConfiguration unsafeConfiguration, PreserveOutputsInfo preserveOutputsSalt, FileSystemView fileSystemView, bool lazyDeletionOfSharedOpaqueOutputsEnabled, ServiceManager serviceManager = null) { Contract.Requires(fileContentManager != null); Contract.Requires(directoryMembershipFingerprinter != null); Contract.Requires(pathExpander != null); Cache = cache; m_fileAccessWhitelist = fileAccessWhitelist; DirectoryMembershipFingerprinter = directoryMembershipFingerprinter; ResourceManager = new ProcessResourceManager(loggingContext); m_pathExpander = new FileContentManagerSemanticPathExpander(fileContentManager, pathExpander); ExecutionLog = executionLog; m_rootModuleConfiguration = configuration; m_directoryMembershipFingerprinterRuleSet = directoryMembershipFinterprinterRuleSet; PathExistenceCache = new ConcurrentBigMap <AbsolutePath, PathExistence>(); FileContentManager = fileContentManager; ServiceManager = serviceManager ?? ServiceManager.Default; PipEnvironment = new PipEnvironment(loggingContext); FileSystemView = fileSystemView; m_unsafeConfiguration = unsafeConfiguration; m_preserveOutputsSalt = preserveOutputsSalt; LazyDeletionOfSharedOpaqueOutputsEnabled = lazyDeletionOfSharedOpaqueOutputsEnabled; if (fileSystemView != null) { fileContentManager.SetLocalDiskFileSystemExistenceView(fileSystemView); } }
public DirectoryMembershipFingerprinterRuleSet( IRootModuleConfiguration rootConfiguration, StringTable stringTable) : this(rootConfiguration, stringTable, parent : null) { m_moduleRuleSets = new Dictionary <ModuleId, DirectoryMembershipFingerprinterRuleSet>(); m_searchPathEnumerationToolFragments = new List <string>( rootConfiguration.SearchPathEnumerationTools?.Select(toolSuffix => // Append leading separator to ensure suffix only matches valid relative path fragments Path.DirectorySeparatorChar + toolSuffix.ToString(stringTable)) ?? Enumerable.Empty <string>()); foreach (var module in rootConfiguration.ModulePolicies.Values) { if (module.DirectoryMembershipFingerprinterRules.Count != 0) { m_moduleRuleSets.Add(module.ModuleId, new DirectoryMembershipFingerprinterRuleSet(module, stringTable, this)); } } }