![在 .diff 文件上显示要修补的文件并确定它们是否已被修补](https://linux22.com/image/680070/%E5%9C%A8%20.diff%20%E6%96%87%E4%BB%B6%E4%B8%8A%E6%98%BE%E7%A4%BA%E8%A6%81%E4%BF%AE%E8%A1%A5%E7%9A%84%E6%96%87%E4%BB%B6%E5%B9%B6%E7%A1%AE%E5%AE%9A%E5%AE%83%E4%BB%AC%E6%98%AF%E5%90%A6%E5%B7%B2%E8%A2%AB%E4%BF%AE%E8%A1%A5.png)
有了.diff
修补文件后,我尝试在 shell 脚本中采取行动,具体取决于.diff
文件中列出的文件是否:1)已修补,2)未修补,3)不可修补。
我发现 GNU Patch 上没有办法以非交互方式显示此信息。
无需修补文件即可知道需要修补哪些文件,这也很有用。这似乎更容易过滤文件,.diff
但如果 GNU Patch 有这些功能就更好了。
对此有什么建议吗?
答案1
我找到解决办法了。
显示要处理的文件列表:lsdiff
来自 patchutils。
为了确定树的补丁状态,我编写了这个 sh 函数:
checkpatch(){
local normal reverso file
file="$1"
patch -p1 --dry-run -fNs < "$file" &>/dev/null && normal=0 || normal=1
patch -p1 --dry-run -fRs < "$file" &>/dev/null && reverso=0 || reverso=1
if [ "$normal" == "1" ] && [ "$reverso" == "1" ]; then
echo Error ; return 2
else
if [ "$normal" == "0" ]; then
echo Not patched ; return 1
else
echo Patched ; return 0
fi
fi
}
使用checkpatch
后跟一个.diff
文件,它会告诉你树是否被修补。