有没有一种简单的方法可以在Ubuntu源代码可用时自动打补丁并上传到PPA?

我正在寻找一个工具来完成以下任务:
  • 自动检测一组源包的更新(特别是gtk+2和gtk+3)
  • 下载源包
  • 应用自定义补丁到源代码
  • 正确提交补丁(使用dpkg-source --commit [something-or-other]命令?)
  • 如果成功,将其上传到Launchpad上的PPA中(然后可以像通常那样将我的系统指向该PPA)。
Launchpad能够完成这些任务吗?
如果不能,有没有一个工具可以从cron作业中自动完成所有这些任务?
如果以上都不行,我会自己编写一个工具,但是我需要哪些命令来完成以下任务:
  • 检测和下载源包的更新?(我更喜欢类似于(bzr|git) pull的方式,而不是每次都apt-get source获取全新的副本)
  • 自动在本地提交补丁(我每次都会使用相同的提交描述)?
  • 以非交互方式将源代码上传到PPA?
我找到了一个问题(如何为自定义PPA打补丁的正确方法是什么?),它与我的问题相似,但答案中的步骤仍然基本上是手动和交互式的。一个完全无需干预的版本加上源代码更新的自动检测将会非常有帮助。
1个回答

嗯,听起来打包食谱是这里的解决办法。基本上,打包食谱可以在Launchpad上的bzr分支更改时自动创建Ubuntu源代码包并将其上传到PPA。在线文档非常好,但我会给出一些例子...
首先,您需要指定要跟踪的分支(例如,lp:gtk3),然后添加一个命令将您自己的Debian打包分支嵌套到该分支中。看看我为Inkscape的每日构建创建的这个食谱
# bzr-builder format 0.4 deb-version 1:0.48+devel+{revno}+{revno:packaging}
lp:inkscape
nest packaging lp:~inkscape.dev/inkscape/debian-packaging debian

这个配方每天使用最新的Inkscape上游源代码创建一个Ubuntu软件包,但是将自定义的Debian打包指令从lp:~inkscape.dev/inkscape/debian-packaging分支复制到名为"debian"的子文件夹中。
在Launchpad上的打包配方页面允许您指定要自动上传软件包的PPA。在我们的情况下,它被上传到here
作为一种替代方法,您可以基于现有的Ubuntu软件包来制作您的配方,而不是直接使用上游源代码。例如,lp:ubuntu/gtk+3.0。然后,您需要创建这个代码的一个分支,并提交任何所需的修改。我们可以称之为lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build,例如。然后,您将创建一个配方来自动地合并您的更改,而不是嵌套打包指令。这个配方可能会像这样:
# bzr-builder format 0.4 deb-version {debversion}+{date}
lp:ubuntu/gtk+3.0
merge my-custom-build lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build

因此,这个配方会自动构建一个定制的Ubuntu源代码包,并在官方Ubuntu软件包发生变化时将其上传到您的PPA。
如果您采用这种"合并"方法,那么您有两种选择来应用您的补丁。一种是直接在您的分支中编辑上游源代码,并让bzr负责合并;另一种是使用quilt在debian/文件夹中创建补丁文件。每种方法都有其优缺点。前一种方法更加智能...如果您的其中一个补丁被上游开发人员采纳,合并通常仍然有效,Ubuntu软件包也能正常构建。后一种方法允许您使用标准的基于Debian的方法来处理补丁,即将打包代码与上游代码分开...但是,如果上游开发人员采纳了您的其中一个补丁,quilt将无法应用(重复的)补丁,软件包将无法构建。

但是lp:ubuntu/gtk+3.0跟踪的是哪个gtk-3版本?当前稳定版还是当前开发版? - Khurshid Alam