Open
Description
Background and motivation
The Tar API that is introduced in #65951 currently provides one option while creating: includeBaseDirectory
, and one option while extracting: overwriteFiles
.
There are many more options that would make sense, for example controlling the owner/group that gets stored in the tar-file when creating, and controlling whether the exact permissions should be restored (including the setgroup/setuser/sticky bit). See man tar for other options that a user may want to control.
Maybe we want to introduce option classes immediately, to avoid adding additional overloads to the Create
/Extract
methods.
API Proposal
namespace System.Formats.Tar;
public static partial class TarFile
{
- public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, bool includeBaseDirectory);
- public static void CreateFromDirectory(string sourceDirectoryName, string destinationFileName, bool includeBaseDirectory);
- public static void ExtractToDirectory(Stream source, string destinationDirectoryName, bool overwriteFiles);
- public static void ExtractToDirectory(string sourceFileName, string destinationDirectoryName, bool overwriteFiles);
+ public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, TarCreateOptions? options = null);
+ public static void CreateFromDirectory(string sourceDirectoryName, string destinationFileName, TarCreateOptions? options = null);
+ public static void ExtractToDirectory(Stream source, string destinationDirectoryName, TarExtractOptions? options = null);
+ public static void ExtractToDirectory(string sourceFileName, string destinationDirectoryName, TarExtractOptions? options = null);
}
public abstract partial class TarEntry
{
- public void ExtractToFile(string destinationFileName, bool overwrite);
+ public void ExtractToFile(string destinationFileName, TarExtractOptions? options = null);
}
+public sealed class TarExtractOptions
+{
+ public bool OverwriteFiles { get; set; } = true;
+}
+public sealed class TarCreateOptions
+{
+ public bool IncludeBaseDirectory { get; set; } = true;
+}
API Usage
TarFile.CreateFromDirectory("D:/SourceDirectory/", "D:/destination.tar", new() { IncludeBaseDirectory = false });
Alternative Designs
No response
Risks
No response