TranslateProject/scripts/check/identify.sh
Wenxuan Zhao 2b0e6c9760
绕过检查:完善规则 —— 检查文章分类以及变更一致性
* 使用 POSIX shell 来保证脚本的可移植性
* 使用未转义的文件名(文件名中切不可有换行符)
+ 在无更改时返回错误退出
- 移除 news 文章分类
2018-11-06 20:48:59 -08:00

95 lines
2.4 KiB
Bash

#!/bin/sh
# 匹配 PR 规则
set -e
################################################################################
# 读入:
# - /tmp/stats
# 写出:(无)
################################################################################
# 加载公用常量和函数
# shellcheck source=common.inc.sh
. "$(dirname "$0")/common.inc.sh"
echo "[匹配] 加载统计结果……"
# 加载统计结果
# shellcheck source=mock/stats.sh
. /tmp/stats
# 定义 PR 规则
# 绕过检查:绕过 PR 检查
rule_bypass_check() {
[ -f /tmp/bypass ] && echo "匹配规则:绕过检查"
}
# 添加原文:添加至少一篇原文
rule_source_added() {
[ "$SRC_A" -ge 1 ] \
&& check_category SRC A \
&& [ "$TOTAL" -eq "$SRC_A" ] && echo "匹配规则:添加原文 ${SRC_A}"
}
# 申领翻译:只能申领一篇原文
rule_translation_requested() {
[ "$SRC_M" -eq 1 ] \
&& check_category SRC M \
&& [ "$TOTAL" -eq 1 ] && echo "匹配规则:申领翻译"
}
# 提交译文:只能提交一篇译文
rule_translation_completed() {
[ "$SRC_D" -eq 1 ] && [ "$TSL_A" -eq 1 ] \
&& ensure_identical SRC D TSL A \
&& check_category SRC D \
&& check_category TSL A \
&& [ "$TOTAL" -eq 2 ] && echo "匹配规则:提交译文"
}
# 校对译文:只能校对一篇
rule_translation_revised() {
[ "$TSL_M" -eq 1 ] \
&& check_category TSL M \
&& [ "$TOTAL" -eq 1 ] && echo "匹配规则:校对译文"
}
# 发布译文:发布多篇译文
rule_translation_published() {
[ "$TSL_D" -ge 1 ] && [ "$PUB_A" -ge 1 ] && [ "$TSL_D" -eq "$PUB_A" ] \
&& ensure_identical SRC D TSL A 1 \
&& check_category TSL D \
&& [ "$TOTAL" -eq $((TSL_D + PUB_A)) ] \
&& echo "匹配规则:发布译文 ${PUB_A}"
}
# 定义常见错误
# 未知错误
error_undefined() {
echo "未知错误:无匹配规则,请尝试只对一篇文章进行操作"
}
# 申领多篇
error_translation_requested_multiple() {
[ "$SRC_M" -gt 1 ] \
&& echo "匹配错误:申领多篇,请一次仅申领一篇"
}
# 执行检查并输出匹配项目
do_check() {
rule_bypass_check \
|| rule_source_added \
|| rule_translation_requested \
|| rule_translation_completed \
|| rule_translation_revised \
|| rule_translation_published \
|| {
error_translation_requested_multiple \
|| error_undefined
exit 1
}
}
do_check