/// <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));
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
            }
        }
示例#4
0
        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));
                }
            }
        }