示例#1
0
 /// <summary>
 /// Same behavior as <see cref="LoadOrReuse"/>, but the file envelopeId is ignored
 /// </summary>
 /// <remarks>
 /// Only available when the factory is constructed with analysis mode on
 /// </remarks>
 public IIncrementalSchedulingState LoadOrReuseIgnoringFileEnvelope(
     PipGraph pipGraph,
     IConfiguration configuration,
     PreserveOutputsInfo preserveOutputSalt,
     string incrementalSchedulingStatePath,
     SchedulerState schedulerState)
 {
     Contract.Assert(m_analysisMode);
     return(LoadOrReuseInternal(FileEnvelopeId.Invalid, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, schedulerState));
 }
示例#2
0
 /// <summary>
 /// Loads an existing instance of <see cref="IIncrementalSchedulingState"/> from a given file or reuse it from a given <see cref="SchedulerState"/>.
 /// </summary>
 public IIncrementalSchedulingState LoadOrReuse(
     FileEnvelopeId atomicSaveToken,
     PipGraph pipGraph,
     IConfiguration configuration,
     PreserveOutputsInfo preserveOutputSalt,
     string incrementalSchedulingStatePath,
     SchedulerState schedulerState)
 {
     Contract.Requires(atomicSaveToken.IsValid);
     return(LoadOrReuseInternal(atomicSaveToken, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, schedulerState));
 }
示例#3
0
        private GraphAgnosticIncrementalSchedulingStateId(
            string machineName,
            string substSource,
            string substTarget,
            PreserveOutputsInfo preserveOutputSalt)
        {
            Contract.Requires(machineName != null);

            m_machineName        = machineName;
            m_substSource        = substSource;
            m_substTarget        = substTarget;
            m_preserveOutputSalt = preserveOutputSalt;
            m_hashCode           = ComputeHashCode();
        }
示例#4
0
        /// <summary>
        /// Deserializes into <see cref="GraphAgnosticIncrementalSchedulingStateId" />.
        /// </summary>
        public static GraphAgnosticIncrementalSchedulingStateId Deserialize(BuildXLReader reader)
        {
            Contract.Requires(reader != null);

            var machineName        = reader.ReadString();
            var substSource        = reader.ReadString();
            var substTarget        = reader.ReadString();
            var preserveOutputSalt = new PreserveOutputsInfo(reader);

            return(new GraphAgnosticIncrementalSchedulingStateId(
                       machineName,
                       substSource,
                       substTarget,
                       preserveOutputSalt));
        }
示例#5
0
        /// <summary>
        /// Creates a new instance of <see cref="IIncrementalSchedulingState"/>.
        /// </summary>
        public IIncrementalSchedulingState CreateNew(
            FileEnvelopeId atomicSaveToken,
            PipGraph pipGraph,
            IConfiguration configuration,
            PreserveOutputsInfo preserveOutputSalt)
        {
            Contract.Requires(atomicSaveToken.IsValid);
            Contract.Requires(pipGraph != null);
            Contract.Requires(configuration != null);

            return(GraphAgnosticIncrementalSchedulingState.CreateNew(
                       m_loggingContext,
                       atomicSaveToken,
                       pipGraph,
                       configuration,
                       preserveOutputSalt,
                       m_tempDirectoryCleaner));
        }
示例#6
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);
            }
        }
示例#7
0
        private IIncrementalSchedulingState LoadOrReuseInternal(
            FileEnvelopeId atomicSaveToken,
            PipGraph pipGraph,
            IConfiguration configuration,
            PreserveOutputsInfo preserveOutputSalt,
            string incrementalSchedulingStatePath,
            SchedulerState schedulerState)
        {
            Contract.Requires(pipGraph != null);
            Contract.Requires(!string.IsNullOrWhiteSpace(incrementalSchedulingStatePath));
            Contract.Assert(m_analysisMode || configuration != null);

            if (!m_analysisMode && schedulerState != null && schedulerState.IncrementalSchedulingState != null)
            {
                IIncrementalSchedulingState reusedState = schedulerState.IncrementalSchedulingState.ReuseFromEngineState(
                    m_loggingContext,
                    pipGraph,
                    configuration,
                    preserveOutputSalt,
                    incrementalSchedulingStatePath,
                    m_tempDirectoryCleaner);

                if (reusedState != null)
                {
                    return(reusedState);
                }
            }

            return(GraphAgnosticIncrementalSchedulingState.Load(
                       m_loggingContext,
                       atomicSaveToken,
                       pipGraph,
                       configuration,
                       preserveOutputSalt,
                       incrementalSchedulingStatePath,
                       analysisModeOnly: m_analysisMode,
                       tempDirectoryCleaner: m_tempDirectoryCleaner));
        }
示例#8
0
 /// <summary>
 /// Creates an instance of <see cref="GraphAgnosticIncrementalSchedulingStateId" /> from <see cref="IConfiguration" />.
 /// </summary>
 public static GraphAgnosticIncrementalSchedulingStateId Create(PathTable pathTable, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt)
 {
     return(new GraphAgnosticIncrementalSchedulingStateId(
                Environment.MachineName,
                configuration.Logging.SubstSource.ToString(pathTable).ToUpperInvariant(),
                configuration.Logging.SubstTarget.ToString(pathTable).ToUpperInvariant(),
                preserveOutputSalt));
 }