mirror of
https://github.com/ScoopInstaller/Scoop.git
synced 2026-09-23 05:46:30 +00:00
Sync 'master' branch
This commit is contained in:
@@ -4,6 +4,12 @@
|
||||
|
||||
- **scoop-search:** Use SQLite for caching apps to speed up local search ([#5851](https://github.com/ScoopInstaller/Scoop/issues/5851), [#5918](https://github.com/ScoopInstaller/Scoop/issues/5918))
|
||||
|
||||
## [v0.4.1](https://github.com/ScoopInstaller/Scoop/compare/v0.4.0...v0.4.1) - 2024-04-25
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- **core:** Fix `Invoke-ExternalCommand` regression ([#5923](https://github.com/ScoopInstaller/Scoop/issues/5923))
|
||||
|
||||
## [v0.4.0](https://github.com/ScoopInstaller/Scoop/compare/v0.3.1...v0.4.0) - 2024-04-18
|
||||
|
||||
### Features
|
||||
|
||||
+8
-3
@@ -757,9 +757,14 @@ function Invoke-ExternalCommand {
|
||||
}
|
||||
if ($ArgumentList.Length -gt 0) {
|
||||
$ArgumentList = $ArgumentList | ForEach-Object { [regex]::Split($_.Replace('"', ''), '(?<=(?<![:\w])[/-]\w+) | (?=[/-])') }
|
||||
if ($FilePath -match '^((cmd|cscript|wscript|msiexec)(\.exe)?|.*\.(bat|cmd|js|vbs|wsf))$') {
|
||||
$Process.StartInfo.Arguments = $ArgumentList -join ' '
|
||||
} elseif ($Process.StartInfo.ArgumentList.Add) {
|
||||
# Use legacy argument escaping for commands having non-standard behavior
|
||||
# with regard to argument passing. `msiexec` requires some args like
|
||||
# `TARGETDIR="C:\Program Files"`, which is non-standard, therefore we
|
||||
# treat it as a legacy command.
|
||||
# ref-1: https://learn.microsoft.com/en-us/powershell/scripting/learn/experimental-features?view=powershell-7.4#psnativecommandargumentpassing
|
||||
$LegacyCommand = $FilePath -match '^((cmd|cscript|find|sqlcmd|wscript|msiexec)(\.exe)?|.*\.(bat|cmd|js|vbs|wsf))$'
|
||||
$SupportArgumentList = $Process.StartInfo.PSObject.Properties.Name -contains 'ArgumentList'
|
||||
if ((-not $LegacyCommand) -and $SupportArgumentList) {
|
||||
# ArgumentList is supported in PowerShell 6.1 and later (built on .NET Core 2.1+)
|
||||
# ref-1: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.argumentlist?view=net-6.0
|
||||
# ref-2: https://docs.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.2#net-framework-vs-net-core
|
||||
|
||||
@@ -158,11 +158,13 @@ Describe 'Decompression function' -Tag 'Scoop', 'Windows', 'Decompress' {
|
||||
} elseif (!(installed lessmsi)) {
|
||||
scoop install lessmsi
|
||||
}
|
||||
Copy-Item "$working_dir\MSITest.msi" "$working_dir\MSI Test.msi"
|
||||
$test1 = "$working_dir\MSITest.msi"
|
||||
$test2 = "$working_dir\MSITestNull.msi"
|
||||
$test2 = "$working_dir\MSI Test.msi"
|
||||
$test3 = "$working_dir\MSITestNull.msi"
|
||||
}
|
||||
|
||||
It 'extract normal MSI file' {
|
||||
It 'extract normal MSI file using msiexec' {
|
||||
Mock get_config { $false }
|
||||
$to = test_extract 'Expand-MsiArchive' $test1
|
||||
$to | Should -Exist
|
||||
@@ -170,12 +172,32 @@ Describe 'Decompression function' -Tag 'Scoop', 'Windows', 'Decompress' {
|
||||
(Get-ChildItem "$to\MSITest").Count | Should -Be 1
|
||||
}
|
||||
|
||||
It 'extract empty MSI file using lessmsi' {
|
||||
It 'extract normal MSI file with whitespace in path using msiexec' {
|
||||
Mock get_config { $false }
|
||||
$to = test_extract 'Expand-MsiArchive' $test2
|
||||
$to | Should -Exist
|
||||
"$to\MSITest\empty" | Should -Exist
|
||||
(Get-ChildItem "$to\MSITest").Count | Should -Be 1
|
||||
}
|
||||
|
||||
It 'extract normal MSI file using lessmsi' {
|
||||
Mock get_config { $true }
|
||||
$to = test_extract 'Expand-MsiArchive' $test1
|
||||
$to | Should -Exist
|
||||
}
|
||||
|
||||
It 'extract normal MSI file with whitespace in path using lessmsi' {
|
||||
Mock get_config { $true }
|
||||
$to = test_extract 'Expand-MsiArchive' $test2
|
||||
$to | Should -Exist
|
||||
}
|
||||
|
||||
It 'extract empty MSI file using lessmsi' {
|
||||
Mock get_config { $true }
|
||||
$to = test_extract 'Expand-MsiArchive' $test3
|
||||
$to | Should -Exist
|
||||
}
|
||||
|
||||
It 'works with "-Removal" switch ($removal param)' {
|
||||
Mock get_config { $false }
|
||||
$test1 | Should -Exist
|
||||
|
||||
Reference in New Issue
Block a user