-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Open
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Formats.Tar
Milestone
Description
Background and Motivation
Currently, TarFile.CreateFromDirectory always creates archives using TarEntryFormat.Pax. The underlying TarWriter class already supports all four formats, but TarFile.CreateFromDirectory doesn't expose this capability.
API Proposal (updated by @iremyux)
namespace System.Formats.Tar;
public static partial class TarFile
{
// Existing (no changes):
public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, bool includeBaseDirectory);
public static void CreateFromDirectory(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory);
public static Task CreateFromDirectoryAsync(string sourceDirectoryName, Stream destination, bool includeBaseDirectory, CancellationToken cancellationToken = default);
public static Task CreateFromDirectoryAsync(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory, CancellationToken cancellationToken = default);
// New overloads:
+ public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, bool includeBaseDirectory, TarEntryFormat format);
+ public static void CreateFromDirectory(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory, TarEntryFormat format);
+ public static Task CreateFromDirectoryAsync(string sourceDirectoryName, Stream destination, bool includeBaseDirectory, TarEntryFormat format, CancellationToken cancellationToken = default);
+ public static Task CreateFromDirectoryAsync(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory, TarEntryFormat format, CancellationToken cancellationToken = default);
}API Usage (updated by @iremyux)
// Create a GNU format tar archive for Linux compatibility
TarFile.CreateFromDirectory("/source/dir", "/dest/archive.tar", includeBaseDirectory: true, TarEntryFormat.Gnu);
// Create a Ustar format archive for broader compatibility
TarFile.CreateFromDirectory("/source/dir", outputStream, includeBaseDirectory: false, TarEntryFormat.Ustar);
// Async version
await TarFile.CreateFromDirectoryAsync("/source/dir", "/dest/archive.tar", includeBaseDirectory: true, TarEntryFormat.Pax, cancellationToken);Metadata
Metadata
Assignees
Labels
api-approvedAPI was approved in API review, it can be implementedAPI was approved in API review, it can be implementedarea-System.Formats.Tar