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