Skip to content

[API Proposal]: Add TarExtractOptions/TarCreateOptions #69780

Open
@tmds

Description

@tmds

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions