gpt4 book ai didi

linux - 检测是否应用了补丁

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:24 26 4
gpt4 key购买 nike

我正在从事一个项目,该项目要求我修补第 3 方开源库以便在我的应用程序中使用。为简单起见,我只使用 Makefile 和一个简单的配置脚本来构建应用程序。我有多个补丁需要应用,因此我使用 Makefile 依赖项来打补丁:

all: patch1 patch2 patch3
do-build-stuff-here
patch1:
patch -p0 < patch1.patch && touch patch1
patch2:
patch -p0 < patch2.patch && touch patch2
patch3:
patch -p0 < patch3.patch && touch patch3

我知道 Quilt,Debian 打包系统将其用于维护者补丁。我用过,确实有效。然而,它引入了不必要的依赖性,特别是对于那些没有 Debian 的人。

有时,并不是所有的补丁都被应用以允许我(和其他开发人员)在某些条件下重新测试建筑物和应用程序。当我调用“clean”或“distclean”时,我通常会反转补丁:

clean: rmpatch1 rmpatch2 rmpatch3
do-clean-stuff-here
rmpatch1:
patch -p0 -R < patch1.patch
rmpatch2:
patch -p0 -R < patch2.patch
rmpatch3:
patch -p0 -R < patch3.patch

(忽略我可以删除原始来源并重新开始的事实。)

但是,如果未应用补丁 #3 而补丁 #1 和 #2 应用,则补丁可能会失败。因此,我依赖于每个 rmpatch 的补丁副本:

rmpatch1: patch1
patch -p0 -R < patch1.patch
rmpatch2: patch2
patch -p0 -R < patch2.patch
rmpatch3: patch3
patch -p0 -R < patch3.patch

但这仍然没有解决我的问题,“make clean”最终会先修补源代码,然后再取消修补!

我想我的问题是:有什么方法可以检测是否应用了补丁?我知道当交互式运行补丁时,它会告诉你它找到了一个以前应用的补丁。能否以非交互方式重现此行为?

另一个问题(有点相关)是这种修补方法是否有效,如果不是,我可以使用哪种顺序修补方法(仅通过 Makefile)。

最佳答案

你可以用这样的东西来欺骗 Makefile:

all: patch1 patch2 patch3
do-build-stuff-here
patch1:
patch -p0 < patch1.patch && touch patch1
touch $@
patch2:
patch -p0 < patch2.patch && touch patch2
touch $@
patch3:
patch -p0 < patch3.patch && touch patch3
touch $@

这样,一旦应用补丁,就会为每个规则创建一个文件。您可以测试它在规则中的存在以取消应用补丁,或者使用它来决定是否需要重新应用补丁。

关于linux - 检测是否应用了补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12189645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com