コード例 #1
0
        public void DirectoryFingerprintRules()
        {
            // Test that files are ignored appropriately
            List <string> excludedFiles = new List <string>();

            excludedFiles.Add("ignore");
            DirectoryMembershipFingerprinterRule excludeFiles = new DirectoryMembershipFingerprinterRule("TestRule", AbsolutePath.Create(m_context.PathTable, X("/Z/fake")), false, excludedFiles);
            var firstFingerprint  = ComputeDirectoryFingerprint(m_context, X("/Z/fake"), new string[] { X("/Z/fake/file1") });
            var secondFingerprint = ComputeDirectoryFingerprint(m_context, X("/Z/fake"), new string[] { X("/Z/fake/file1"), X("/Z/fake/ignore") }, excludeFiles);

            XAssert.IsTrue(firstFingerprint.Hash.Equals(secondFingerprint.Hash));
        }
コード例 #2
0
        private DirectoryFingerprint ComputeDirectoryFingerprint(BuildXLContext context, string path, IEnumerable <string> directoryMembers, DirectoryMembershipFingerprinterRule rule = null)
        {
            Func <EnumerationRequest, PathExistence?> enumerate
                = (request) =>
                {
                if (directoryMembers == null)
                {
                    return(PathExistence.Nonexistent);
                }

                foreach (var item in directoryMembers)
                {
                    request.HandleEntry(AbsolutePath.Create(context.PathTable, item), System.IO.Path.GetFileName(item));
                }

                return(PathExistence.ExistsAsDirectory);
                };

            var process = CreateDummyProcessWithInputs(new FileArtifact[0], context);

            var dirPath = AbsolutePath.Create(context.PathTable, path);
            DirectoryMembershipFingerprinter fingerprinter = new DirectoryMembershipFingerprinter(LoggingContext, context);
            var fp = fingerprinter.TryComputeDirectoryFingerprint(
                directoryPath: dirPath,
                cachePipInfo: CacheableProcess.GetProcessCacheInfo(process, context),
                tryEnumerateDirectory: enumerate,
                cacheableFingerprint: false,
                rule: rule,
                eventData: new DirectoryMembershipHashedEventData()
            {
                Directory = dirPath,
                IsStatic  = false
            });

            XAssert.IsTrue(fp.HasValue);

            return(fp.Value);
        }