加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

什么是管理luarocks rockspec文件的好方法,为什么?

发布时间:2020-12-14 21:47:33 所属栏目:大数据 来源:网络整理
导读:我正在研究我的第一个lua包,我对于我的rockpec(s)以及放置它们的位置感到非常困惑.我看到的每一个流行的lua包似乎都不同地处理了rockspecs.这与 Ruby非常不同,Ruby中每个宝石只有一个gemspec.这里有些例子: lua-cliargs:项目根目录中的单个rockspec(例如lu
我正在研究我的第一个lua包,我对于我的rockpec(s)以及放置它们的位置感到非常困惑.我看到的每一个流行的lua包似乎都不同地处理了rockspecs.这与 Ruby非常不同,Ruby中每个宝石只有一个gemspec.这里有些例子:

> lua-cliargs:项目根目录中的单个rockspec(例如lua_cliargs-3.0-1.rockspec)
> ldoc:项目根目录中的单个rockspec,以scm而不是版本号命名(例如ldoc-scm-2.rockspec)
> lua-MessagePack:存储在顶级rockspec /目录中的多个版本命名的rockspec(例如lua-messagepack-0.1.0-1.rockspec,… lua-messagepack-0.3.4-1.rockspec),然后是一些在包版本之前插入了额外的lua版本(例如lua-messagepack-lua53-0.3.6-1.rockspec).有时相同的包版本有两个rockspecs,一个包含lua53而另一个不包含.
> luafilesystem:存储在顶级/ rockspec目录中的多个版本命名的rockspec(例如luafilesystem-1.3.0-1.rockspec,… luafilesystem-1.6.1-1.rockspec),其次是一些有cvs的而不是在包版本之前插入的包版本号(例如luafilesystem-cvs-1.rockspec,luafilesystem-cvs-2.rockspec).
> lpeg:根本没有rockpec
> luasocket:root中包含scm而不是包号的一个rockspec(例如luasocket-scm-0.rockspec),以及包含带有包号的单个rockspec的/ rockspec目录(例如luasocket-3.0rc2-1.rockspec)

现在,this question解释了为什么一个人会有一个“工作”的rockspec文件和一个充满释放版本的rockspecs的单独目录,但我还有几个问题:

>什么是rockspec修订版? luarocks wiki说包发布应该用git标记版本号,它给出的例子不包括rockspec修订版.如果我的rockspec在VCS中,并且我标记了一个特定的提交,那么这不能有效地修复该提交中包含的rockspec(s),因此版本?对于rockspec的后续修订不可能在标记的提交中.
>如何将lpeg列入luarocks但缺少rockpec?
> luarocks wiki说如果你想让你的rockspec引用HEAD,那么scm应该用来代替包版本号.但是由于HEAD不断变化,并且rockspec必须列出所有文件,因此似乎需要不断增加scm rockspec的修订版号以跟上任何添加或删除的文件.人们可以通过不使用scm rockspecs的版本号来解决这个问题,但是我看到的版本编号很低(例如ldoc-scm-2.rockspec).这是一个错误吗?
>以上任何一个例子都被认为是最佳做法吗?

解决方法

What are rockspec revisions for?

rockspec修订版是rockspec文件本身的版本.假设你发布了Foo 1.0版;你创建了一个rockspec foo-1.0-1.rockspec.后来你了解到要在FreeBSD中编译Foo 1.0,你需要传递一个额外的-D标志;源代码根本不需要任何更改.您编辑rockspec添加platform override section并将其重新提交到luarocks.org作为foo-1.0-2.rockspec.

If my rockspec is in VCS,and I tag a particular commit,then doesn’t that effectively fix the rockspec(s) included in that commit and therefore version?

是.但这不是问题,因为建造时使用的rockspec不是源分布中包含的. .src.rock文件是一个存档,包含提交的.rockspec文件和源代码tarball(如果rockspec使用SCM协议,如git://,则在子目录中的源检出).

实际上,这会导致鸡蛋和鸡蛋问题,因为当从Github手动检查标签v1.0时,Foo 1.0的最新版本不存在,但这不是预期的工作流程:当使用LuaRocks时,用户将通常使用luarocks安装foo;如果他们想要查看一个项目的岩石规格,他们要么在luarocks.org访问Foo的页面,要么他们会查看HEAD中存储的rockspecs,这是人们最先停下来的地方.

请注意,如果想要分发包含rockspec的源tarball然后想要在rockspec中设置tarball source.url及其相应的source.md5,则会发生类似的鸡与蛋的情况.拥有MD5意味着rockpec本身不能在tarball内部.解决它的一种方法是简单地避免source.md5字段,或者在打包tarball时跳过rockspec.这与在上游tarball中包含Linux发行包元数据的情况相同;这里更明显,因为上游和打包者往往是同一个人.

How can lpeg be listed on luarocks but lack a rockspec?

可能是因为这是一个罕见的情况,上游和打包者不是同一个人. Roberto Ierusalimschy发布了lpeg,但截至2016年12月,Gary Vaughan上传了其中的岩石.

[…] the ones I see have low revision numbers (e.g. ldoc-scm-2.rockspec). Is this a mistake?

这可能有很多原因,也可能是错误.

>如果一个rockspec使用make builtin,那么当添加或删除文件时,scm rockspec可能不会改变;
>有些项目不会经常改变他们的文件集,因此修订版本仍然很低;
>一些开发人员将他们的scm rockspecs保留在-0(如“不是已发布的版本”),并且从不将它们上传到luarocks.org(仅保留已发布的版本).因此,获取git修订版时获得的版本是该快照的有效版本.增加修订是针对luarocks.org发布的rockpecs的预期做法;
> rockpec可能确实已经过时了,那就错了.

Are any of the above examples considered a best practice?

客观地说,由于当运行luarocks时使用的rockspec文件安装foo是捆绑在.src.rock文件中的一个文件,与源档案分开存储,对于开源商店中源源树的确切位置没有重大的实际后果他们的岩石.这是个人组织的问题.

保持最新的scm rockspec在根部有一个小优势,如果想要从本地检出树进行构建,它会被luarocks自动拾取.

但只要使用luarocks upload foo将rockspecs上传到服务器,最终用户体验就会相同,无论源树中的rockspecs在哪里.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读