fix (decompress): Expand-7zipArchive only delete temp dir / $extractDir if it is empty#6092
fix (decompress): Expand-7zipArchive only delete temp dir / $extractDir if it is empty#6092niheaven merged 14 commits intoScoopInstaller:developfrom
Expand-7zipArchive only delete temp dir / $extractDir if it is empty#6092Conversation
|
If tests should be updated (tell me): Should be sufficient to add a Then check that |
|
Could you please sign your commit? And the logic should be tweaked by only check if |
|
For commit signing, you could ref https://docs.github.com/authentication/managing-commit-signature-verification |
|
Hmm, you should try to pass the tests now :) |
|
I think I've fixed the test errors now @niheaven: Can't do |
Expand-7zipArchive Only delete temp dir / $extractDir if it is empty
Expand-7zipArchive Only delete temp dir / $extractDir if it is emptyExpand-7zipArchive only delete temp dir / $extractDir if it is empty
* fix (decompress): `Expand-7zipArchive` only delete temp dir / `$extractDir` if it is empty (#6092) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * refactor(download): Move download-related functions to 'download.ps1' (#6095) * fix(download): Fallback to default downloader when aria2 fails (#4292) * fix(commands): Handling broken aliases (#6141) * fix(shim): properly check `wslpath`/`cygpath` command first (#6114) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * fix(scoop-bucket): Add missing import for `no_junction` envs (#6181) Signed-off-by: Chawye Hsu <su+git@chawyehsu.com> * docs(chglog): Update to 0.5.3 (#6258) * perf(shim): Update kiennq-shim to v3.1.2 (#6261) * fix(decompress): Replace deprecated 7ZIPEXTRACT_USE_EXTERNAL config (#6327) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * fix(scoop-uninstall): Fix uninstaller does not gain Global state (#6430) * global arg * changelog * refactor(Get-Manifest): Select actual source for manifest (#6142) * first step * Revert "first step" This reverts commit c5907c3. * refactor(Get-Manifest): Select actual source for installed manifest * rework sub-commands, `scoop-depends` is NOT working at this stage * URI manifest * opt * deprecated manifest * source of manifests * source of manifest pt2 - Mark URI(path/URL/UNC/etc.) query as standalone manifest - Drop `installed` and `available update` items for [query] and [installed] are different sources. * remove variable preventing I forget it * scoop-info: fix source of manifest on bucket * fix `scoop-depends` * Fix Standalone and Source detection * fix global install * Fix scoop-cat, scoop-home - Query for remote manifest * scoop-list: info +deprecated * manifest: Fix first selected manifest * gramma.. * Fix 61b3259 * length * fix(scoop-depends-tests): Mocking `USE_EXTERNAL_7ZIP` as $false (#6431) * fix(scoop-depends-tests): Mocking `USE_EXTERNAL_7ZIP` as $false to avoding error when it is $true * CHANGELOG * feat(autoupdate): GitHub predefined hashes support (#6416) * feat(autoupdate): predefined hash case for GitHub - Remove `sha256:` prefix in `format_hash()` - Add GitHub support in `get_hash_for_app()` Close #6381 * doc(chglog): GitHub auto hash update * fix(autoupdate): remove prefix only * docs(CHANGELOG): Update to 0.5.3 (#6432) * docs(CHANGELOG): Update to 0.5.3 * 6416 --------- Signed-off-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Olav Rønnestad Birkeland <6450056+o-l-a-v@users.noreply.github.com> Co-authored-by: kiennq <kien.n.quang@gmail.com> Co-authored-by: HUMORCE <humorce@outlook.com> Co-authored-by: Ryan <sitiom@proton.me> Co-authored-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Bassel Rachid <101208715+basselworkforce@users.noreply.github.com> Co-authored-by: Wordless Echo <wordless@echo.moe>
…ctDir` if it is empty (ScoopInstaller#6092) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com>
* chore(release): Bump to version 0.5.3 (ScoopInstaller#6257) * fix (decompress): `Expand-7zipArchive` only delete temp dir / `$extractDir` if it is empty (ScoopInstaller#6092) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * refactor(download): Move download-related functions to 'download.ps1' (ScoopInstaller#6095) * fix(download): Fallback to default downloader when aria2 fails (ScoopInstaller#4292) * fix(commands): Handling broken aliases (ScoopInstaller#6141) * fix(shim): properly check `wslpath`/`cygpath` command first (ScoopInstaller#6114) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * fix(scoop-bucket): Add missing import for `no_junction` envs (ScoopInstaller#6181) Signed-off-by: Chawye Hsu <su+git@chawyehsu.com> * docs(chglog): Update to 0.5.3 (ScoopInstaller#6258) * perf(shim): Update kiennq-shim to v3.1.2 (ScoopInstaller#6261) * fix(decompress): Replace deprecated 7ZIPEXTRACT_USE_EXTERNAL config (ScoopInstaller#6327) Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> * fix(scoop-uninstall): Fix uninstaller does not gain Global state (ScoopInstaller#6430) * global arg * changelog * refactor(Get-Manifest): Select actual source for manifest (ScoopInstaller#6142) * first step * Revert "first step" This reverts commit c5907c3. * refactor(Get-Manifest): Select actual source for installed manifest * rework sub-commands, `scoop-depends` is NOT working at this stage * URI manifest * opt * deprecated manifest * source of manifests * source of manifest pt2 - Mark URI(path/URL/UNC/etc.) query as standalone manifest - Drop `installed` and `available update` items for [query] and [installed] are different sources. * remove variable preventing I forget it * scoop-info: fix source of manifest on bucket * fix `scoop-depends` * Fix Standalone and Source detection * fix global install * Fix scoop-cat, scoop-home - Query for remote manifest * scoop-list: info +deprecated * manifest: Fix first selected manifest * gramma.. * Fix 61b3259 * length * fix(scoop-depends-tests): Mocking `USE_EXTERNAL_7ZIP` as $false (ScoopInstaller#6431) * fix(scoop-depends-tests): Mocking `USE_EXTERNAL_7ZIP` as $false to avoding error when it is $true * CHANGELOG * feat(autoupdate): GitHub predefined hashes support (ScoopInstaller#6416) * feat(autoupdate): predefined hash case for GitHub - Remove `sha256:` prefix in `format_hash()` - Add GitHub support in `get_hash_for_app()` Close ScoopInstaller#6381 * doc(chglog): GitHub auto hash update * fix(autoupdate): remove prefix only * docs(CHANGELOG): Update to 0.5.3 (ScoopInstaller#6432) * docs(CHANGELOG): Update to 0.5.3 * 6416 --------- Signed-off-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Olav Rønnestad Birkeland <6450056+o-l-a-v@users.noreply.github.com> Co-authored-by: kiennq <kien.n.quang@gmail.com> Co-authored-by: HUMORCE <humorce@outlook.com> Co-authored-by: Ryan <sitiom@proton.me> Co-authored-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Bassel Rachid <101208715+basselworkforce@users.noreply.github.com> Co-authored-by: Wordless Echo <wordless@echo.moe> * fix(autoupdate): Skiping github mode while hash.url already set --------- Signed-off-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Hsiao-nan Cheung <niheaven@gmail.com> Co-authored-by: Olav Rønnestad Birkeland <6450056+o-l-a-v@users.noreply.github.com> Co-authored-by: kiennq <kien.n.quang@gmail.com> Co-authored-by: Ryan <sitiom@proton.me> Co-authored-by: Chawye Hsu <su+git@chawyehsu.com> Co-authored-by: Bassel Rachid <101208715+basselworkforce@users.noreply.github.com> Co-authored-by: Wordless Echo <wordless@echo.moe>
| $ExtractDirTopPath = [string] "$DestinationPath\$($ExtractDir -replace '[\\/].*')" | ||
| if ((Get-ChildItem -Path $ExtractDirTopPath -Force -ErrorAction Ignore).Count -eq 0) { | ||
| Remove-Item -Path $ExtractDirTopPath -Recurse -Force -ErrorAction Ignore | ||
| } |
There was a problem hiding this comment.
While testing manifests, I happened to run into an issue here.
When the $ExtractDir depth is greater than or equal to three, like the one below ($ExtractDir : keep\sub\sub-sub), the folder 'keep' will not be removed. The return value of Get-ChildItem for folder 'keep' is always greater than 0 as there exists a sub-folder.
└─ keep
└─ sub
└─ sub-sub
└─ empty
└─ othersub
There was a problem hiding this comment.
So one should look for files specifically? Add -File -Recurse to Get-ChildItem?
There was a problem hiding this comment.
Add -File -Recurse to Get-ChildItem?
When extraction is done, we cannot tell whether the folder is newly created or already existed.
If the folder already exists before extraction, even if it is an empty folder, we should not remove it.
Perhaps we could check if the folder exists recursively before 7-Zip actually starts extracting?
keep
└─ sub
└─ sub-sub
- Check if the folder
$DestinationPath\keepexists.- If it does not exist, we can safely remove
$DestinationPath\keep. - If it does exist, proceed to step 2.
- If it does not exist, we can safely remove
- Check if the folder
$DestinationPath\keep\subexists.- If it does not exist, we can safely remove
$DestinationPath\keep\sub. - If it does exist, proceed to step 3.
- If it does not exist, we can safely remove
- ...
There was a problem hiding this comment.
Can you create a new issue with an example manifest where this problem occurs?
There is also this feature request which would make this logic unnecessary:
There was a problem hiding this comment.
Can you create a new issue with an example manifest where this problem occurs?
OK. I'm just about to do it.
There is also this feature request which would make this logic unnecessary
It would be even better if this new feature fixes the issue.
There was a problem hiding this comment.
Can you create a new issue with an example manifest where this problem occurs?

Description
decompress.ps1deletes$extractDireven if it's not empty, which can cause applications to not work after installation.More context and how I got to this solution in following comment:
Motivation and Context
Closes #6011, ScoopInstaller/Extras#13324
How Has This Been
Tested locally with
scoop install extras/tor-browser.Checklist:
developbranch.