public void TestGetFiles() { using var flagDir = new TemporaryDirectory("0install-unit-tests"); File.WriteAllText(Path.Combine(flagDir, FlagUtils.XbitFile), "/dir1/file1\n/dir2/file2\n"); var expectedResult = new[] { Path.Combine(flagDir, "dir1", "file1"), Path.Combine(flagDir, "dir2", "file2") }; FlagUtils.GetFiles(FlagUtils.XbitFile, flagDir) .Should().BeEquivalentTo(expectedResult, because: "Should find .xbit file in same directory"); FlagUtils.GetFiles(FlagUtils.XbitFile, Path.Combine(flagDir, "subdir")) .Should().BeEquivalentTo(expectedResult, because: "Should find .xbit file in parent directory"); }
/// <summary> /// Iterates over all <paramref name="entries"/> and calls handler methods for them. /// </summary> /// <exception cref="NotSupportedException">A file has illegal properties (e.g. is a device file, has line breaks in the filename, etc.).</exception> /// <exception cref="IOException">There was an error reading a file.</exception> /// <exception cref="UnauthorizedAccessException">You have insufficient rights to read a file.</exception> protected virtual void HandleEntries(IEnumerable <FileSystemInfo> entries) { var externalXbits = FlagUtils.GetFiles(FlagUtils.XbitFile, SourceDirectory.FullName); var externalSymlinks = FlagUtils.GetFiles(FlagUtils.SymlinkFile, SourceDirectory.FullName); foreach (var entry in entries ?? throw new ArgumentNullException(nameof(entries))) { CancellationToken.ThrowIfCancellationRequested(); switch (entry) { case FileInfo file when file.Name != Manifest.ManifestFile && file.Name != FlagUtils.XbitFile && file.Name != FlagUtils.SymlinkFile: HandleEntry(file, externalXbits, externalSymlinks); UnitsProcessed += file.Length; break; case DirectoryInfo directory: HandleEntry(directory); break; } } }