Beispiel #1
0
    private Manifest GenerateManifest(string path, string?subdir)
    {
        var builder = new ManifestBuilder(_algorithm);

        if (Directory.Exists(path))
        {
            if (!string.IsNullOrEmpty(subdir))
            {
                throw new OptionException(Resources.TooManyArguments + Environment.NewLine + subdir.EscapeArgument(), null);
            }

            Handler.RunTask(new ReadDirectory(path, builder));
            return(builder.Manifest);
        }
        else if (File.Exists(path))
        {
            var extractor = ArchiveExtractor.For(Archive.GuessMimeType(path), Handler);
            Handler.RunTask(new ReadFile(path, stream => extractor.Extract(builder, stream, subdir)));
            return(builder.Manifest);
        }
        else
        {
            throw new FileNotFoundException(string.Format(Resources.FileOrDirNotFound, path));
        }
    }
    public void Hardlink()
    {
        using var tempDir = new TemporaryDirectory("0install-test-archive");
        var builder = new DirectoryBuilder(tempDir);
        using var stream = typeof(ArchiveExtractorTestBase).GetEmbeddedStream(FileName);
        ArchiveExtractor.For(MimeType, new SilentTaskHandler())
                        .Extract(builder, stream);

        FileUtils.AreHardlinked(Path.Combine(tempDir, "hardlink"), Path.Combine(tempDir, "subdir1", "regular"))
                 .Should().BeTrue(because: "'regular' and 'hardlink' should be hardlinked together");
    }
Beispiel #3
0
        private void BuildImplementation(IBuilder builder)
        {
            for (int i = 0; i < (AdditionalArgs.Count + 1) / 3; i++)
            {
                string path     = AdditionalArgs[i * 3 + 1];
                string mimeType = (AdditionalArgs.Count > i * 3 + 3)
                    ? AdditionalArgs[i * 3 + 3]
                    : Archive.GuessMimeType(AdditionalArgs[i * 3 + 1]);
                string?subDir = (AdditionalArgs.Count > i * 3 + 2) ? AdditionalArgs[i * 3 + 2] : null;

                var extractor = ArchiveExtractor.For(mimeType, Handler);
                Handler.RunTask(new ReadFile(path, stream => extractor.Extract(builder, stream, subDir)));
            }
        }
Beispiel #4
0
        private void BuildImplementation(IBuilder builder)
        {
            for (int i = 0; i < (AdditionalArgs.Count + 1) / 3; i++)
            {
                string path     = AdditionalArgs[i * 3 + 1];
                string mimeType = (AdditionalArgs.Count > i * 3 + 3)
                    ? AdditionalArgs[i * 3 + 3]
                    : Archive.GuessMimeType(AdditionalArgs[i * 3 + 1]);
                string?subDir = (AdditionalArgs.Count > i * 3 + 2) ? AdditionalArgs[i * 3 + 2] : null;

                void Callback(Stream stream)
                => ArchiveExtractor.For(mimeType, Handler)
                .Extract(builder, stream, subDir);

                Handler.RunTask(
                    Uri.TryCreate(path, UriKind.Absolute, out var uri) && !uri.IsFile
                        ? new DownloadFile(uri, Callback)
                        : new ReadFile(path, Callback));
            }
        }
Beispiel #5
0
 public void TestForZip()
 {
     ArchiveExtractor.For(Archive.MimeTypeZip, new SilentTaskHandler())
     .Should().BeOfType <ZipExtractor>();
 }