能否将一个补丁包含在当前版本中?如果可以,应该如何操作?

所以之前我报告了Compiz的窗口定位插件的一个错误。对于受其影响的人来说,这是一个相当重要的退化问题:根据报告主要是那些使用Gnome-Fallback的人。

不久后出现了一个补丁。我创建了一个PPA用于测试,到目前为止,参与其中的每个人都报告说问题已经解决。它甚至修复了另一个错误。我在标准的Unity桌面上进行了测试,并且可以说(根据我的测试),没有看到任何不良反应。

我想立即将这个补丁推送到Ubuntu,原因有两个:

  • 我很自私。我不想每次Compiz的新版本推送到12.04时都需要更新我的PPA。
  • 我不希望Ubuntu用户因为一个愚蠢的小错误导致他们的窗口飞来飞去。

我希望尽快将这个补丁推送到Ubuntu的Compiz版本中,这样我们就可以标记这些错误已经修复,并继续我们的生活。

我需要找谁才能立即让这个补丁被合并到Ubuntu中?

我不维护这个项目,这是一个上游问题,但对于Ubuntu来说非常重要。我可以去找Compiz,但我想如果他们接受这个补丁的话,至少在发布之前会有几个月的时间。

当我找到合适的人时,我如何使整个过程尽可能顺利?

我希望他们看到我的请求后,能够说“没问题,看起来都很好,完成了”,然后就结束了。我不想进行十七轮电子邮件讨论关于补丁的各个方面。更重要的是,我也不想浪费他们的时间。

那么我需要向他们提供什么?我的打包技能……实在令人遗憾。这是我第一次尝试修补一个用于重新分发的软件包,所以我可能犯了人们所知的所有打包错误。他们会满意原始的补丁(这样他们可以自己应用),还是我应该重新打包,使得diff/changelog更清晰一些(我试了几次,版本控制乱七八糟的)。

注意:这个问题确实涉及到Compiz,但我更希望答案也能涵盖其他风格的软件包,这样我们就能有一份权威和全面的解决方案。

2个回答

正如Dobey所提到的,为了使补丁被接受并纳入已发布的Ubuntu版本中,必须经过稳定发布更新(SRU)流程。SRU的门槛相当高。简单来说,这个流程背后的思想可以总结为:“我们知道的错误比我们不知道的错误更好。”实际上,这意味着只允许有针对性的错误修复,而不允许过于“侵入性”的更改。
要进行SRU,必须满足一些要求:
  • 该错误已在当前开发版本(即量子)中修复。
  • 必须更新错误报告的描述,包括修复在稳定版本中所需的理由,重现错误并验证其已修复的测试用例,以及对修复可能引起的回归的讨论。
  • 应将Launchpad团队ubuntu-sru订阅到错误报告中。
  • 然后将软件包上传到release-proposed。为了实现这一点,您需要通过sponsorship process(更多信息请参见下文)。

在所有这些事情发生之后,SRU团队将验证-proposed中的软件包是否解决了该错误。然后,在经过最少7天的老化期后,该软件包将被推送到-updates中。

寻找合适的人员

你的问题暗示了有时Launchpad似乎是补丁“死亡之地”。遗憾的是,如果你不知道这个过程,会感觉很糟糕,但是我保证它并不是真的那么糟糕。幸运的是,你需要知道的主要事情很简单。查看赞助流程获取所有详细信息和一些提示,但最重要的部分是将ubuntu-sponsors团队订阅到错误报告中。这可以确保它将出现在赞助队列中,并由Ubuntu开发人员进行查看。

如果你需要实时交流一些内容,Freenode IRC上的#ubuntu-devel能够解决问题。查看频道主题以获取当前的补丁飞行员。他们会帮助你的。如果没有飞行员值班,请随意在频道中寻求帮助,但请耐心等待。

准备好一切

为了使整个过程尽可能快地进行,有一些事情要做。

将错误描述更新为以下内容:

[影响]

这里解释了错误对用户的影响,并对将修复程序回溯到稳定版本的理由进行了说明。

[测试用例]

  1. 步骤

  2. 通过

  3. 步骤

  4. 说明

  5. 验证

  6. 修复方法

[回归风险]

这里讨论了任何可能出现的回归风险。

[原始报告]

保留了以前在描述中的所有内容。

接下来,准备好你的补丁。如果你提供debdiffs来处理所有的打包细节,事情会快得多,而不是针对上游源码的补丁。这包括使用软件包的补丁系统(如果有的话)。幸运的是,ubuntu-dev-tools Install ubuntu-dev-tools中的add-patch可以为你处理这些。
让我们一起来看看。首先,在错误报告中获取源代码和补丁:
$ pull-lp-source compiz precise
$ wget https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/974242/+attachment/3141645/+files/fix-974242.patch 

现在我们将把补丁添加到源代码包中:
$ cd compiz-0.9.7.8/
$ add-patch ../fix-974242.patch

这将把补丁添加到`debian/patches`并运行`dch`,提示您向`debian/changelog`添加一个新条目。调整条目以针对建议并递增版本号,使其低于下一个上传到开发发布版的版本。如下所示:
compiz (1:0.9.7.8-0ubuntu1.1) precise-proposed; urgency=low

  * debian/patches/fix-974242.patch: [DESCRIBE CHANGES HERE]

 -- Your Name <you@example.com>  Mon, 11 Jun 2012 17:37:59 -0400

文件 debian/patches/fix-974242.patch 还有一些标题可能需要编辑:
## Description: add some description
## Origin/Author: add some origin or author
## Bug: bug URL

现在开始构建您的新源代码包:
$ debuild -S -us

创建debdiff:
$ cd ..
$ debdiff compiz_0.9.7.8-0ubuntu1.dsc compiz_0.9.7.8-0ubuntu1.1.dsc > sru-for-lp-974242.debdiff

现在您可以将生成的debdiff文件附加到您的错误报告中。

非常好的回答,很棒。你可能需要注意的是,至少在12.04/12.10版本中,命令是pull-lp-source。我没有更早的版本来查看是否以前是pull-launchpad-source - doug