2005年7月23日星期六

试试quilt

作为一个偶尔的hacker,维护一个软件包的一堆patch是非常痛苦的事情,尤其是有的patch对另外一些有依赖时。一个例子是原来对 dillo感兴趣时搜集了第三方patch,另一个例子是目前在维护的sylpheed-claws的cygwin移植版本。结果是:1. 我放弃了对dillo-enhanced的cygwin版本的维护; 2. sylpheed-claws的cygwin我现在也只提供一个all-in-one的补丁,不再提供各个改动分开的patch了 :-(

看见Debian Planet上有DD说已经在用quilt来维护一个软件包的补丁,说是很不错。于是找来玩了一下。

quilt就是为了解决前面那一类问题诞生的。它基于原来Andrew Morton为维护内核补丁而制作的一堆脚本(想想维护1000个补丁是什么感觉?)


我按照文档试用了一下,感觉这个东西大致是这样工作的
首先,quilt只需要一个源代码树, 其次,quilt的工作对象是patch
quilt new foobar1.diff 开始一个新的patch,然后你就应该在这个patch上工作
quilt edit some/file.c指定要对some/file.c做一些修改,quilt会自动备份这个文件
如果你后面还要修改some/file.c,可以直接用vi some/file.c,不一定要再quilt edit some/file.c
quilt refresh 完成当前的patch工作,生成输出foobar1.diff
当然,在你开始一个新的patch之前,你还是可以继续修改,然后用refresh重新生成补丁
quilt add foobar2.diff 如果你要在foobar1.diff的基础上开始一个新的patch,就用这个命令
quilt pop 抛出当前的patch,如果当前栈内只有一个,那么原来树就复原了
quilt push 将series中下一个补丁压入栈,就是apply那个补丁
quilt import some-patch.diff 从一个patch文件中导入一个补丁

举个例子,某个源代码包我通过quilt维护了1.diff, 2.diff, 3.diff三个补丁,但现在新的upstream release来了
quilt push 应用第一个补丁
quilt push 应用第二个补丁,
但这个补丁应用失败,怎么办? 用quilt push -f强制补丁,然后编辑源代码,修复被拒绝的文件,然后
quilt refresh 刷新第二个补丁
然后
quilt push 应用第三个补

没有评论: