> 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在哪里.