ScoopInstaller / Scoop

A command-line installer for Windows.
https://scoop.sh
Other
20.92k stars 1.39k forks source link

Scoop doesn't extract .tar.* archives fully #3080

Closed Calinou closed 5 years ago

Calinou commented 5 years ago

If one writes an URL to a .tar.* archive (such as .tar.gz) in a manifest's url field, Scoop will download it but will only extract it to an xa-tmp.tar file. To fix this, 7-zip needs to be called twice on those files, so that the .tar is unpacked to its actual data.

asmgf commented 5 years ago

@Calinou, it seems that extraction should work.

Double extraction logic is already there: https://github.com/lukesampson/scoop/blob/2224da82f8a786b8ae9c203c67924b4c6ef2c652/lib/decompress.ps1#L24-L28

There are also a few manifests that point to .tar.gz archive, for example up: https://github.com/lukesampson/scoop/blob/a2fed1855865d3d2d8f0eb6564c52163db650177/bucket/up.json#L7 I tried running scoop install up and it worked fine for me.

Ash258 commented 5 years ago

@Calinou Is it OK or is some fix needed?

Calinou commented 5 years ago

I tried updating Scoop but can still reproduce the issue. This is the manifest I'm trying it with:

{
    "homepage": "https://sourceforge.net/projects/freecs-1-5/",
    "description": "Free software reimplementation of Counter-Strike 1.5 running on FTEQW",
    "version": "2019-01-16",
    "license": "GPL-2.0-or-later",
    "url": [
        "https://downloads.sourceforge.net/project/freecs-1-5/freecs-bin-2019-01-16.tar.gz",
        "https://downloads.sourceforge.net/project/freecs-1-5/cstrike-1.5-content.tar.gz"
    ],
    "hash": [
        "34c48ef1b300a811ebf19b975be6b43c6bb2182f780bd0718b1b1ce93ca3600b",
        "71929123b9e823ca7702f5a8c9cb53db3ac5e889785b56f53343278d14def81d"
    ],
    "notes": [
        "Optional but recommended: To avoid missing assets, place an Half-Life installation's \"valve\" folder in:",
        "",
        "\t$persist_dir\\"
    ]
}

Console log:

Installing 'freecs' (2019-01-16) [64bit]
Loading freecs-bin-2019-01-16.tar.gz from cache
Checking hash of freecs-bin-2019-01-16.tar.gz ... ok.
Loading cstrike-1.5-content.tar.gz from cache
Checking hash of cstrike-1.5-content.tar.gz ... ok.
Extracting freecs-bin-2019-01-16.tar.gz ... done.
Extracting cstrike-1.5-content.tar.gz ... done.
Linking ~\scoop\apps\freecs\current => ~\scoop\apps\freecs\2019-01-16
'freecs' (2019-01-16) was installed successfully!
Notes
-----
Optional but recommended: To avoid missing assets, place an Half-Life installation's "valve" folder in:

        C:\Users\Hugo\scoop\persist\freecs\

Those are files I can see in the app directory after installing (the file size matches the second file in the url array):

Explorer file view

niheaven commented 5 years ago

This is due to this .tar.gz has a diferrent name in inner .tar, and is fixed in #3204 https://github.com/lukesampson/scoop/pull/3204/commits/079c4a57269a2a570e29d4326fcb615e98f0b0b4