1 Star 0 Fork 5

汪重阳 / openEuler on riscv64

forked from zxs-un / openEuler on riscv64 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
spec-macro-skip-with-blank-cmd.md 2.01 KB
一键复制 编辑 原始数据 按行查看 历史
zxs-un 提交于 2022-02-16 14:40 . || :

构建过程中部分文件 not found 导致失败的跳过处理 ( || : )

Version: 2022-Feb-16

来源:lvxiaoqian 的一次 Pull Request

来源中使用的Shell命令非常巧妙,但跳过部分产物的行为及可能导致Clang产生的潜在问题,本文作者保留意见。

构建中的 not found 问题

在对RPM打包的软件进行多架构适配时,往往原有的spec是针对少部分处理器架构编写的。

此时进行构建,经常会出现一些文件 not found 问题。

在openEuler适配RISC-V的过程中,这种现象在构建软件的测试阶段(test suite,%check)时有发生。

判定可用时进行跳过处理

产物收集阶段(%file)的文件或过程不可随意跳过。

测试阶段(%check)的某些测试用例因架构运行速度太慢而失败,但软件本身可用; 除了增加 patch 延长超时,亦可于分案例测试时在 spec 中采用脚本命令跳过。

巧妙的 Shell 命令

  • | 竖线,Shell 的管道命令,当竖线左边的命令成功执行(对Shell返回0为成功)时,左边命令的输出就会成为右边命令的输入。常见的如 ls dir | grep file
  • || 双竖线,当双竖线左边的命令执行失败(对Shell返回非零正数为失败,而-1为异常)时,就执行双竖线右边的命令。
  • :冒号,Shell 的空命令,即什么都不做,但对Shell返回0,表示成功。

如此,想要跳过一个可能会失败的测试:

sh testcase.sh || :

即便testcase.sh执行失败,仍然会执行:对Shell返回成功。

可以更进一步,将默默跳过、假装成功,改进为输出信息、假装成功:

sh testcase.sh || echo " testcase.sh failed, but manually skipped"

巧妙之处:若有朝一日testcase.sh测试成功,则不会执行||右边部分,对Shell仍然返回成功,而不需要更改脚本。

1
https://gitee.com/wwccyang/doc-port2riscv64-openEuler.git
git@gitee.com:wwccyang/doc-port2riscv64-openEuler.git
wwccyang
doc-port2riscv64-openEuler
openEuler on riscv64
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891