public ProcessStrongFingerprintComputationData(BinaryLogReader.EventReader reader) { PathSetHash = reader.ReadContentHash(); var maybePathSet = ObservedPathSet.TryDeserialize(reader.PathTable, reader, pathReader: r => r.ReadAbsolutePath(), stringReader: r => ((BinaryLogReader.EventReader)r).ReadDynamicStringId()); Contract.Assert(maybePathSet.Succeeded); PathSet = maybePathSet.Result; PriorStrongFingerprints = reader.ReadReadOnlyList(r => r.ReadStrongFingerprint()); Succeeded = reader.ReadBoolean(); if (Succeeded) { IsStrongFingerprintHit = reader.ReadBoolean(); ObservedInputs = reader.ReadReadOnlyArray(r => ObservedInput.Deserialize(r)); ComputedStrongFingerprint = reader.ReadStrongFingerprint(); IsNewlyPublishedAugmentedWeakFingerprint = reader.ReadBoolean(); AugmentedWeakFingerprint = reader.ReadNullableStruct(r => r.ReadWeakFingerprint()); } else { IsStrongFingerprintHit = false; ObservedInputs = default; ComputedStrongFingerprint = default; IsNewlyPublishedAugmentedWeakFingerprint = false; AugmentedWeakFingerprint = default; } }
private ObservedInput Convert(ObservedInput observedInput) { if (AreGraphsSame) { return(observedInput); } return(new ObservedInput(observedInput.Type, observedInput.Hash, new ObservedPathEntry(Convert(observedInput.PathEntry.Path), observedInput.PathEntry.Flags, observedInput.PathEntry.EnumeratePatternRegex))); }
public void StrongFingerprintVariations() { PathTable pathTable = new PathTable(); AbsolutePath pathA = AbsolutePath.Create(pathTable, X("/X/bar")); AbsolutePath pathB = AbsolutePath.Create(pathTable, X("/X/foo")); WeakContentFingerprint wfp1 = new WeakContentFingerprint(CreateFakeFingerprint(1)); WeakContentFingerprint wfp2 = new WeakContentFingerprint(CreateFakeFingerprint(2)); ContentHash content1 = CreateFakeContentHash(3); ContentHash content2 = CreateFakeContentHash(4); FingerprintingHarness harness = new FingerprintingHarness(pathTable); // Initial harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateFileContentRead(pathA, content1)); // Change WFP of Initial harness.AssertFingerprintIsNew( wfp2, // Changed ObservedInput.CreateFileContentRead(pathA, content1)); // Change observation type of Initial harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateAbsentPathProbe(pathA)); // Changed harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateDirectoryEnumeration(pathA, new DirectoryFingerprint(content1))); // Changed // Change file content of Initial harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateFileContentRead(pathA, content2)); // Changed // Add a second file to Initial harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateFileContentRead(pathA, content1), ObservedInput.CreateFileContentRead(pathB, content1)); // New // Change WFP versus previous harness.AssertFingerprintIsNew( wfp2, // Changed ObservedInput.CreateFileContentRead(pathA, content1), ObservedInput.CreateFileContentRead(pathB, content1)); harness.AssertFingerprintIsNew( wfp1, ObservedInput.CreateExistingDirectoryProbe(pathA)); // Changed }
public void ProjectPathSet() { var pathTable = new PathTable(); AbsolutePath firstPath = AbsolutePath.Create(pathTable, X("/X/bar")); AbsolutePath secondPath = AbsolutePath.Create(pathTable, X("/X/foo")); var p = CreateResult( pathTable, ObservedInput.CreateFileContentRead(firstPath, ContentHashingUtilities.EmptyHash), ObservedInput.CreateFileContentRead(secondPath, ContentHashingUtilities.EmptyHash)); ObservedPathSet projected = p.GetPathSet(unsafeOptions: null); ObservedPathSetTestUtilities.AssertPathSetsEquivalent( projected, ObservedPathSetTestUtilities.CreatePathSet(pathTable, firstPath, secondPath)); }