Beispiel #1
0
        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");
        }
Beispiel #2
0
        /// <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;
                }
            }
        }