PowerShell / Microsoft.PowerShell.Archive

Archive PowerShell module contains cmdlets for working with ZIP archives
https://technet.microsoft.com/en-us/library/dn818910.aspx
MIT License
94 stars 37 forks source link

Archive module preview 1 PR #131

Closed ayousuf23 closed 2 years ago

ayousuf23 commented 2 years ago

PR Summary

This PR includes code for the preview 1 release of the Microsoft.PowerShell.Archive v2.0.0 module.

This PR is a rewrite if the Compress-Archive cmdlet in C# (previously, it was written in PowerShell Script). It has support for creating, updating, and overwriting archives. As of now, only zip and zip64 are supported (the .NET APIs for zip and zip64 are the same).

The PR has support for preserving path structure in relative paths. It also has a -Format parameter which can used to specify the format of the archive. As of now, -Format has only one option: -Format zip. When additional formats are supported by the module in preview 3, the -Format parameter will be more useful by providing options for tar and compressed tar.

An abstraction was created for archives -- the IArchive interface -- so new archive formats can be added to the module easily.

To update an archive, use the -WriteMode Update parameter. To overwrite an archive, use the -WriteMode Overwrite parameter.

For more information regarding behavior of the parameters, please see the RFC #117.

PR Context

To keep the PowerShell/Microsoft.PowerShell.Archive repository up to date with preview 1 code.

iSazonov commented 2 years ago

What are the benefits of c# vs ps?

ayousuf23 commented 2 years ago

What are the benefits of c# vs ps?

The main benefit is performance, which has been an issue for the archive module.

iSazonov commented 2 years ago

Where exactly is the perf problem? I very much doubt that the problem was in PowerShell Engine.

ayousuf23 commented 2 years ago

Where exactly is the perf problem? I very much doubt that the problem was in PowerShell Engine.

Mainly compressing and expanding archives would take a long time. Although we are limited by the .NET APIs, rewriting the module in C# reduces overhead.

iSazonov commented 2 years ago

I'd split the PR on some ones:

  1. .globalconfig, .editorconfig, .gitignore, .gitattributes, ...
  2. build ps1 scripts and yml files
  3. sln and cs files with dummy cmdlets and dummy tests so that we get working dev environment
  4. PR with new cmdlets and tests
ayousuf23 commented 2 years ago

I have to step out soon. I'll try to get through all unresolved conversations.