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)); }
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); }