diff --git a/CHANGELOG.md b/CHANGELOG.md index 81e03b058c..269a2c56fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - **scoop-(un)hold:** Correct output the messages when manifest not found, (already|not) held ([#5519](https://github.com/ScoopInstaller/Scoop/issues/5519)) - **scoop-update:** Change error message to a better instruction ([#5677](https://github.com/ScoopInstaller/Scoop/issues/5677)) - **manifest:** Correct source of manifest ([#5575](https://github.com/ScoopInstaller/Scoop/issues/5575)) +- **decompress:** Remove unused parent dir w/ 'extract_dir' ([#5682](https://github.com/ScoopInstaller/Scoop/issues/5682)) - **shim:** Check literal path in `Get-ShimPath` ([#5680](https://github.com/ScoopInstaller/Scoop/issues/5680)) - **shim:** Avoid unexpected output of `list` subcommand ([#5681](https://github.com/ScoopInstaller/Scoop/issues/5681)) - **scoop-reset:** Don't abort when multiple apps are passed and an app is running ([#5687](https://github.com/ScoopInstaller/Scoop/issues/5687)) diff --git a/lib/decompress.ps1 b/lib/decompress.ps1 index bdee90d620..4fade6dd0a 100644 --- a/lib/decompress.ps1 +++ b/lib/decompress.ps1 @@ -46,12 +46,6 @@ function Expand-7zipArchive { if (!$Status) { abort "Failed to extract files from $Path.`nLog file:`n $(friendly_path $LogPath)`n$(new_issue_msg $app $bucket 'decompress error')" } - if (!$IsTar -and $ExtractDir) { - movedir "$DestinationPath\$ExtractDir" $DestinationPath | Out-Null - } - if (Test-Path $LogPath) { - Remove-Item $LogPath -Force - } if ($IsTar) { # Check for tar $Status = Invoke-ExternalCommand $7zPath @('l', $Path) -LogPath $LogPath @@ -63,8 +57,15 @@ function Expand-7zipArchive { abort "Failed to list files in $Path.`nNot a 7-Zip supported archive file." } } + if (!$IsTar -and $ExtractDir) { + movedir "$DestinationPath\$ExtractDir" $DestinationPath | Out-Null + # Remove temporary directory + Remove-Item "$DestinationPath\$($ExtractDir -replace '[\\/].*')" -Recurse -Force -ErrorAction Ignore + } + if (Test-Path $LogPath) { + Remove-Item $LogPath -Force + } if ($Removal) { - # Remove original archive file if (($Path -replace '.*\.([^\.]*)$', '$1') -eq '001') { # Remove splited 7-zip archive parts Get-ChildItem "$($Path -replace '\.[^\.]*$', '').???" | Remove-Item -Force @@ -72,6 +73,7 @@ function Expand-7zipArchive { # Remove splitted RAR archive parts Get-ChildItem "$($Path -replace '\.part(\d+)\.rar$', '').part*.rar" | Remove-Item -Force } else { + # Remove original archive file Remove-Item $Path -Force } } @@ -112,17 +114,19 @@ function Expand-ZstdArchive { abort "Failed to extract files from $Path.`nLog file:`n $(friendly_path $LogPath)`n$(new_issue_msg $app $bucket 'decompress error')" } $IsTar = (strip_ext $Path) -match '\.tar$' + if ($IsTar) { + # Check for tar + $TarFile = Join-Path $DestinationPath (strip_ext (fname $Path)) + Expand-7zipArchive -Path $TarFile -DestinationPath $DestinationPath -ExtractDir $ExtractDir -Removal + } if (!$IsTar -and $ExtractDir) { movedir (Join-Path $DestinationPath $ExtractDir) $DestinationPath | Out-Null + # Remove temporary directory + Remove-Item "$DestinationPath\$($ExtractDir -replace '[\\/].*')" -Recurse -Force -ErrorAction Ignore } if (Test-Path $LogPath) { Remove-Item $LogPath -Force } - if ($IsTar) { - # Check for tar - $TarFile = Join-Path $DestinationPath (strip_ext (fname $Path)) - Expand-7zipArchive -Path $TarFile -DestinationPath $DestinationPath -ExtractDir $ExtractDir -Removal - } } function Expand-MsiArchive {