- Usage
- Intermediate Download Page
- Skipping
dlink''Ice - Sorting matched URLs/versions
- Filtering The Matched URLs
- Examples
Load as a regular plugin via:
zinit light zdharma-continuum/z-a-readurlAfter executing the above command (possibly via zshrc), it's then possible to use the dlink'' and dlink0'' ices
and the special as'readurl|…' value of the as'' ice.
This Zinit extension allows to automatically download the newest version of a file to which the URL is hosted on a webpage.
The annex provides:
- Two new ices:
dlink''anddlink0''. - A handling of the special values of the
as''ice, i.e.: ofas'readurl',as'readurl|command', etc.
Note: The annex works only with snippets, not plugins.
It works as follows:
- invoke
snippet(or pass thehttp://…address using theforsyntax) on the web-page that hosts the URL to the file to download, - provide
dlink''ice with the expected file-download URL, replacing the version with the%VERSION%keyword, - also, provide
as''ice with one of the following values:readurl,readurl|command,readurl|completion,readurl|null; the part after the|has the same meaning as in the normalas''ice.
So, for example:
zinit for \
as'readurl|command' \
dlink'/junegunn/fzf-bin/releases/download/%VERSION%/fzf-%VERSION%-linux_amd64.tgz'
extract \
id-as'fzf'
https://github.com/junegunn/fzf-bin/releases/The snippet is just an example. The same effect is obtained by loading as junegunn/fzf-bin plugin with from'gh-r'
ice.
As demonstrated, the dlink'' can be a relative or an absolute path and also a full URL (i.e.: beginning with the
http://… prefix).
Sometimes, like in the case of the terraform command, the download link isn't
on the download page but on a page listed on it. In such cases utilize the dlink0'' ice and provide the pattern for
the additional, intermediate download page. For For example, in the case of terraform, the Zinit command is:
zinit for \
as'readurl|command' \
dlink0'/terraform/%VERSION%/' \
dlink'/terraform/%VERSION%/terraform_%VERSION%_linux_386.zip' \
extract \
id-as'terraform' \
http://releases.hashicorp.com/terraform/Sometimes the URL of the download page differs from the URL of the archive in just a few /-sections. In such a case,
it is possible to skip the dlink'' ice by appending a ++-separated fragment of the archive URL, like so:
zinit for \
as'readurl|command' \
extract \
http://domain.com/download-page++/archive.zipIf the archive URL has some different /-sections, then it's possible to strip the conflicting ones from the download
URL by using +++, ++++, etc. – the number of the /-section that'll be stripped equals the number of the + minus
2. So, for example:
zinit for \
as'readurl|command' \
extract \
http://domain.com/download-page/removed-section+++/archive.zipSometimes the download page doesn't list the package versions from newest to the oldest, but in some other order. In
such case, it's possible to sort the URLs / package versions by prepending the chosen dlink ice (dlink0'' or
dlink'') with the exclamation mark (dlink'!…', etc.). See the next section for an example:
Sometimes some unwanted URLs match the dlink''/dlink0'' regex/pattern. In such case it's possible to filter them out
by appending a filtering regex to the dlink'' ice as: dlink='the-main-regex~%the-unwanted-URLs-regex%' (or the same
for dlink0''). An example package that can benefit from this is the Open Shift client,
which doesn't sort the URLs from latest to the oldest – hence the exclamation mark (!) prepend – and it has special
URLs like stable-4.4 or candidate-4.5 together with the regular version URLs (like 4.5.0-rc.1):
zinit for \
as'readurl|command' \
dlink'openshift-client-windows-%VERSION%.zip' \
dlink0'!%VERSION%~%(stable|latest|fast|candidate).*%' \
id-as'ocp' \
https://mirror.openshift.com/pub/openshift-v4/clients/ocp/The above snippet of Zsh code / Zinit invocation will sort the URLs (dlink0'!…') and then filter out the special ones
from the results (via …~%(stable|latest|fast|candidate).*%), this way selecting the latest version of the Open Shift
client.
Pulumi, a tool to create, deploy, and manage modern cloud software.
zi for \
as'readurl|null' \
dlink'https://get.pulumi.com/releases/sdk/pulumi-%VERSION%-linux-x64.tar.gz' \
extract'!' \
id-as'pulumi' \
sbin'pulumi*' \
https://www.pulumi.com/docs/get-started/install/versions/