如何在Launchpad上从带有子模块的git仓库构建PPA软件包?

我目前正在努力恢复我们的项目PPA,因为我们两个月前开始使用Git子模块,并且由于不支持子模块,导入到Bazaar停止工作。所以我移除了bzr,并成功将我们的存储库作为Git导入到Launchpad。
可惜的是,在我尝试使用新创建的构建配方构建时失败了,因为存储库没有递归克隆,子模块仍然不存在。我在Launchpad自己的文档中找不到任何帮助,虽然它有一个名为“nesting”的支持功能,但似乎不是解决递归克隆的好选择。
我该如何在构建之前让Launchpad递归克隆存储库?

1一个可能的解决办法是在你的食谱中使用嵌套。 - pr.nizar
https://bugs.launchpad.net/git-build-recipe/+bug/1733603/comments/8 这里是我放置了解决方法的描述。 - Sergey Ponomarev
1个回答

目前还没有办法做到这一点,但这是一个已知的 bug,应该可以修复。(如果你着急的话,可以随时查看 git-build-recipe 源代码并提出修复建议。)

解决方法

然而,有一个解决方法。首先,在Launchpad中导入所有的子模块(您可以使用不同的项目,或者在同一个项目中使用不同的git存储库)。

一个例子

例如,这里Marker的源代码包配方。Marker需要子模块scidown,而scidown需要charter,而charter又需要tinyexpr

首先,我在Launchpad上注册了这些项目,并将GitHub存储库镜像到lp:scidownlp:charterlp:tinyexpr

源代码配方如下:

# git-build-recipe format 0.4 deb-version 2020.04.04-0~{revtime}
lp:marker master
nest scidown lp:scidown src/scidown a7b7f063de4f272ef0ec12d00b98470888e8cb32
nest charter lp:charter src/scidown/src/charter a25dee1214ea9ba5882325066555cb813efbb489
nest tinyexpr lp:tinyexpr src/scidown/src/charter/src/tinyexpr 9476568b69de4c384903f1d5f255907b92592f45

第二行告诉launchpad使用lp:marker的master分支。
第三行将lp:scidown(在提交a7b7f063de4f272ef0ec12d00b98470888e8cb32中)的所有内容复制到Marker存储库的src/scidown目录中。
第四行将lp:charter(在提交a25dee1214ea9ba5882325066555cb813efbb489中)的所有内容复制到Marker存储库的src/scidown/src/charter目录中(charter是构建scidown所需的子模块)。
第五行将lp:tinyexpr(在提交9476568b69de4c384903f1d5f255907b92592f45中)的所有内容复制到Marker存储库的src/scidown/src/charter/src/tinyexpr目录中(tinyexpr是构建charter所需的子模块)。