zyedidia / eget

Easily install prebuilt binaries from GitHub.
MIT License
954 stars 39 forks source link

Feature request: download only if hash doesn't match #14

Closed thorstenkampe closed 2 years ago

thorstenkampe commented 2 years ago

I'm downloading packages for later installation (eget --download-only zyedidia/eget). This downloads the same file every time it's executed even if there is no newer version (which I cannot know in advance).

Would it be possible to only download the file if the hashes of the file eget is going to download does not match the file that is already there?

zyedidia commented 2 years ago

I don't think there is any way to know the hash of the file to be downloaded without downloading it. Is there any way around that problem?

thorstenkampe commented 2 years ago

I was under the impression that the JSON data for the latest version (https://api.github.com/repos/zyedidia/eget/releases/latest for instance) includes the hash but apparently it doesn't.

Maybe the created_at or updated_at values could be used ("if there's already a local file with the same name and the file's modification timestamp is younger than the one I would download, don't download the file from GitHub.")

Simetraa commented 2 years ago

This is something that would be very useful for me also. Just comparing the last modification to the local file to created_at would be very useful. I'd be happy to implement this myself if you'd like.

zyedidia commented 2 years ago

That's a good suggestion, I've implemented it in the form of the upgrade-only flag.

thorstenkampe commented 2 years ago

Could you please reopen this issue? The --upgrade-only flag doesn't seem to work - the same same file is downloaded again and again:

> eget --download-only --upgrade-only zyedidia/eget
https://github.com/zyedidia/eget/releases/download/v1.1.0/eget-1.1.0-linux_amd64.tar.gz
Downloading 100% [========================================================================================================] (2.3/2.3 MB, 3.265 MB/s)
Extracted `eget-1.1.0-linux_amd64.tar.gz` to `eget-1.1.0-linux_amd64.tar.gz`

> eget --download-only --upgrade-only zyedidia/eget
https://github.com/zyedidia/eget/releases/download/v1.1.0/eget-1.1.0-linux_amd64.tar.gz
Downloading 100% [========================================================================================================] (2.3/2.3 MB, 5.922 MB/s)
Extracted `eget-1.1.0-linux_amd64.tar.gz` to `eget-1.1.0-linux_amd64.tar.gz`

└ > eget --download-only --upgrade-only zyedidia/eget
https://github.com/zyedidia/eget/releases/download/v1.1.0/eget-1.1.0-linux_amd64.tar.gz
Downloading 100% [========================================================================================================] (2.3/2.3 MB, 5.806 MB/s)
dufferzafar commented 2 years ago

@thorstenkampe --download-only is not expected to be specified in conjunction with --upgrade-only.

--download-only will only download the tarball, and not extract it, so when you run it again with --upgrade-only it will check for existence of eget (which doesn't exist because it was never extracted) and will download the tarball again.