podman-client-dotnet/src/PodmanClientDotNet.Tests/Archives/Tar.cs

44 lines
1.3 KiB
C#

using System.Text;
using ICSharpCode.SharpZipLib.Tar;
namespace MaksIT.PodmanClientDotNet.Tests.Archives;
public static class Tar {
public static void CreateTarFromDirectory(string sourceDirectory, Stream outputStream) {
using var tarOutputStream = new TarOutputStream(outputStream, Encoding.UTF8);
tarOutputStream.IsStreamOwner = false;
AddDirectoryFilesToTar(tarOutputStream, sourceDirectory, recursive: true);
}
static void AddDirectoryFilesToTar(
TarOutputStream tarOutputStream,
string sourceDirectory,
bool recursive,
string? baseDirectory = null
) {
baseDirectory ??= sourceDirectory;
var directoryInfo = new DirectoryInfo(sourceDirectory);
foreach (var fileInfo in directoryInfo.GetFiles()) {
var relativePath = Path.GetRelativePath(baseDirectory, fileInfo.FullName);
var entry = TarEntry.CreateEntryFromFile(fileInfo.FullName);
entry.Name = relativePath.Replace(Path.DirectorySeparatorChar, '/');
tarOutputStream.PutNextEntry(entry);
using var fileStream = fileInfo.OpenRead();
fileStream.CopyTo(tarOutputStream);
tarOutputStream.CloseEntry();
}
if (!recursive)
return;
foreach (var subDirectory in directoryInfo.GetDirectories())
AddDirectoryFilesToTar(tarOutputStream, subDirectory.FullName, recursive: true, baseDirectory);
}
}