[Feature]: Advanced PreInstall
yanecc opened this issue · comments
1. Your usage scenarios?
一些情况下,插件能够获取到的URL可能会更加复杂,如:需要请求头,动态链接等。这些是小的改进需求,当前可以使用http.download_file
在插件中实现,但是更希望通过vfox的下载功能来实现以获得统一的使用体验。
2. What is your expected outcome?
插件PreInstall函数支持返回headers,支持识别动态链接文件的格式并解压。
我尝试使插件支持Windows平台夜间构建,它能够在GitHub Actions的CI产物中获得,链接如下:
https://api.github.com/repos/crystal-lang/crystal/actions/artifacts/1454949225/zip
第一个问题,需要设置请求头,可以在PreInstallHookResult中增加Headers map[string]string
字段实现支持;
第二个问题,当前vfox对于链接,通过url.URL.Path
的最后一个字段命名,以上面的链接为例,识别到的文件名是zip
,vfox无法确定压缩文件类型,不会进行解压,当前需要通过PostInstall来解压。希望可以参考scoop的方案,允许插件在链接后添加#/crystal-nightly-windows.zip
来指定文件类型。
如果你认为这些提议不错,我很乐意提交PR。
一些情况下,插件能够获取到的URL可能会更加复杂,如:需要请求头,动态链接等。这些是小的改进需求,当前可以使用
http.download_file
在插件中实现,但是更希望通过vfox的下载功能来实现以获得统一的使用体验。
这正是我一开始设计PreInstall钩子的初衷, 在PreInstall阶段把需要的下载或者移动的文件资源, vfox帮助插件提前准备好. 然后在PostInstall统一处理, 而不是在次下载.
第一个问题,需要设置请求头,可以在PreInstallHookResult中增加
Headers map[string]string
字段实现支持;
可以.
第二个问题,当前vfox对于链接,通过
url.URL.Path
的最后一个字段命名,以上面的链接为例,识别到的文件名是zip
,vfox无法确定压缩文件类型,不会进行解压,当前需要通过PostInstall来解压。希望可以参考scoop的方案,允许插件在链接后添加#/crystal-nightly-windows.zip
来指定文件类型。
现在应该可以吧. 你直接url#/crystal-nightly-windows.zip 应该能识别成zip压缩包. 因为我单纯通过后缀来判断文件类型的.
如果你认为这些提议不错,我很乐意提交PR。
欢迎PR ;)
现在应该可以吧. 你直接url#/crystal-nightly-windows.zip 应该能识别成zip压缩包. 因为我单纯通过后缀来判断文件类型的.
当前不行,因为Go的url.URL.Path是排除了Fragment的。