FromPrefix() приватный Метод

private FromPrefix ( [ id ) : ManifestFormat
id [
Результат ManifestFormat
 public void TestFromPrefix()
 {
     Assert.AreSame(ManifestFormat.Sha1, ManifestFormat.FromPrefix("sha1=abc"));
     Assert.AreSame(ManifestFormat.Sha1New, ManifestFormat.FromPrefix("sha1new=abc"));
     Assert.AreSame(ManifestFormat.Sha256, ManifestFormat.FromPrefix("sha256=abc"));
     Assert.AreSame(ManifestFormat.Sha256New, ManifestFormat.FromPrefix("sha256new_abc"));
 }
Пример #2
0
        private string DeployPackage(string id, PackageBuilder builder)
        {
            string path = Path.Combine(_tempDir, id);

            builder.WritePackageInto(path);
            ManifestTest.CreateDotFile(path, ManifestFormat.FromPrefix(id), _handler);
            FileUtils.EnableWriteProtection(path);
            return(path);
        }
Пример #3
0
        public static Manifest VerifyDirectory(string directory, ManifestDigest expectedDigest, ITaskHandler handler)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(directory))
            {
                throw new ArgumentNullException("directory");
            }
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }
            #endregion

            string expectedDigestValue = expectedDigest.Best;
            if (string.IsNullOrEmpty(expectedDigestValue))
            {
                throw new NotSupportedException(Resources.NoKnownDigestMethod);
            }
            var format = ManifestFormat.FromPrefix(expectedDigestValue);

            var generator = new ManifestGenerator(directory, format)
            {
                Tag = expectedDigest
            };
            handler.RunTask(generator);
            var    actualManifest    = generator.Result;
            string actualDigestValue = actualManifest.CalculateDigest();

            string manifestFilePath = Path.Combine(directory, Manifest.ManifestFile);
            var    expectedManifest = File.Exists(manifestFilePath) ? Manifest.Load(manifestFilePath, format) : null;

            if (actualDigestValue != expectedDigestValue)
            {
                throw new DigestMismatchException(
                          expectedDigestValue,
                          actualDigestValue,
                          // Only log the complete manifests in verbose mode
                          (handler.Verbosity > 0) ? expectedManifest : null,
                          (handler.Verbosity > 0) ? actualManifest : null);
            }

            return(actualManifest);
        }
Пример #4
0
        public static Manifest VerifyDirectory(string directory, ManifestDigest expectedDigest, ITaskHandler handler)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(directory))
            {
                throw new ArgumentNullException(nameof(directory));
            }
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }
            #endregion

            string?expectedDigestValue = expectedDigest.Best;
            if (string.IsNullOrEmpty(expectedDigestValue))
            {
                throw new NotSupportedException(Resources.NoKnownDigestMethod);
            }
            var format = ManifestFormat.FromPrefix(expectedDigestValue);

            var generator = new ManifestGenerator(directory, format)
            {
                Tag = expectedDigest
            };
            handler.RunTask(generator);
            var    manifest = generator.Manifest;
            string digest   = manifest.CalculateDigest();

            if (digest != expectedDigestValue)
            {
                var offsetManifest = TryFindOffset(manifest, expectedDigestValue);
                if (offsetManifest != null)
                {
                    return(offsetManifest);
                }

                string manifestFilePath = Path.Combine(directory, Manifest.ManifestFile);
                var    expectedManifest = File.Exists(manifestFilePath) ? Manifest.Load(manifestFilePath, format) : null;
                throw new DigestMismatchException(expectedDigestValue, digest, expectedManifest, manifest);
            }

            return(manifest);
        }
Пример #5
0
        /// <summary>
        /// Executes the work-step for a single implementation.
        /// </summary>
        public void Work(ManifestDigest manifestDigest)
        {
            string digestString = manifestDigest.Best;

            if (digestString == null)
            {
                return;
            }
            string implementationPath = Path.Combine(_storePath, digestString);
            var    manifest           = Manifest.Load(Path.Combine(implementationPath, Manifest.ManifestFile), ManifestFormat.FromPrefix(digestString));

            string currentDirectory = "";

            new AggregateDispatcher <ManifestNode>
            {
                (ManifestDirectory x) => { currentDirectory = FileUtils.UnifySlashes(x.FullPath.TrimStart('/')); },
                (ManifestFileBase x) =>
                {
                    if (x.Size == 0)
                    {
                        return;
                    }

                    var key  = new DedupKey(x.Size, x.ModifiedTime, manifest.Format, x.Digest);
                    var file = new StoreFile(implementationPath, Path.Combine(currentDirectory, x.Name));

                    StoreFile existingFile;
                    if (_fileHashes.TryGetValue(key, out existingFile))
                    {
                        if (!FileUtils.AreHardlinked(file, existingFile))
                        {
                            if (JoinWithHardlink(file, existingFile))
                            {
                                SavedBytes += x.Size;
                            }
                        }
                    }
                    else
                    {
                        _fileHashes.Add(key, file);
                    }
                }
            }.Dispatch(manifest);
        }
            /// <summary>
            /// Executes the work-step for a single implementation.
            /// </summary>
            public void Work(ManifestDigest manifestDigest)
            {
                string?digestString = manifestDigest.Best;

                if (digestString == null)
                {
                    return;
                }
                string implementationPath = Path.Combine(_storePath, digestString);
                var    manifest           = Manifest.Load(Path.Combine(implementationPath, Manifest.ManifestFile), ManifestFormat.FromPrefix(digestString));

                string currentDirectory = "";

                foreach (var node in manifest)
                {
                    switch (node)
                    {
                    case ManifestDirectory x:
                        currentDirectory = FileUtils.UnifySlashes(x.FullPath.TrimStart('/'));
                        break;

                    case ManifestFileBase x:
                        if (x.Size == 0)
                        {
                            return;
                        }

                        var key  = new DedupKey(x.Size, x.ModifiedTime, manifest.Format, x.Digest);
                        var file = new StoreFile(implementationPath, Path.Combine(currentDirectory, x.Name));

                        if (_fileHashes.TryGetValue(key, out var existingFile))
                        {
                            if (!FileUtils.AreHardlinked(file, existingFile))
                            {
                                if (JoinWithHardlink(file, existingFile))
                                {
                                    SavedBytes += x.Size;
                                }
                            }
                        }
                        else
                        {
                            _fileHashes.Add(key, file);
                        }
                        break;
                    }
                }
            }
Пример #7
0
 public void TestFromPrefix()
 {
     ManifestFormat.FromPrefix("sha1new=abc").Should().BeSameAs(ManifestFormat.Sha1New);
     ManifestFormat.FromPrefix("sha256=abc").Should().BeSameAs(ManifestFormat.Sha256);
     ManifestFormat.FromPrefix("sha256new_abc").Should().BeSameAs(ManifestFormat.Sha256New);
 }