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"); }
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))); } }
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)); } }
public void TestForZip() { ArchiveExtractor.For(Archive.MimeTypeZip, new SilentTaskHandler()) .Should().BeOfType <ZipExtractor>(); }