如何管理luarocks rockspec文件以及为什么?

我正在开发我的第一个lua包,我深感困惑,不知道该如何命名我的rockspec文件以及该把它们放在哪里。我看到的每一个受欢迎的lua包好像都以不同的方式处理rockspecs。这与Ruby非常不同,Ruby中每个gem都只有一个单独的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版本的rockspec(例如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而不是包版本号的rockspec(例如luafilesystem-cvs-1.rockspecluafilesystem-cvs-2.rockspec)。
  • lpeg :根本没有rockspec
  • luasocket :在根目录中有一个包含scm而不是包的编号的rockspec文件(例如luasocket-scm-0.rockspec)和一个包含单个包编号的rockspec的/rockspec目录(例如 luasocket-3.0rc2-1.rockspec

现在,这个问题解释了为什么会有一个"working"的rockspec文件和一个完整的release版本的rockspecs目录,但是我仍然有一些问题:

  1. rockspec修订版本的作用是什么? luarocks wiki上说,包发布应该在git中用版本号标记,并且它给出的示例不包括rockspec修订版。如果我的rockspec在VCS中,并且我标记了特定的提交,那么那不就有效地固定了包含在该提交中的rockspec,因此版本?rockspec的后续修订版本不可能在标记的提交中。
  2. lpeg怎么可能被列在luarocks上却没有rockspec?
  3. luarocks wiki称如果你想让你的rockspec引用HEAD,则应该使用scm代替包版本号。但由于HEAD不断变化,且rockspec必须列出所有文件,因此似乎需要不断增加scm rockspec的revision号以跟上增加或删除的文件。要做到这一点,可以根本不使用修订号来为scm rockspecs命名,但是我看到的那些仍然拥有较低的修订号(例如ldoc-scm-2.rockspec)。这是一个错误吗?
  4. 上述示例中是否有任何最佳实践?
点赞