mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
2b0e6c9760
* 使用 POSIX shell 来保证脚本的可移植性 * 使用未转义的文件名(文件名中切不可有换行符) + 在无更改时返回错误退出 - 移除 news 文章分类
77 lines
1.6 KiB
Bash
77 lines
1.6 KiB
Bash
#!/bin/sh
|
||
|
||
################################################################################
|
||
# 公用常量和函数
|
||
################################################################################
|
||
|
||
# 定义类别目录
|
||
export SRC_DIR='sources' # 未翻译
|
||
export TSL_DIR='translated' # 已翻译
|
||
export PUB_DIR='published' # 已发布
|
||
|
||
# 定义匹配规则
|
||
export CATE_PATTERN='(talk|tech)' # 类别
|
||
export FILE_PATTERN='[0-9]{8} [a-zA-Z0-9_.,() -]*\.md' # 文件名
|
||
|
||
# 获取用于匹配操作的正则表达式
|
||
# 用法:get_operation_regex 状态 类型
|
||
#
|
||
# 状态为:
|
||
# - A:添加
|
||
# - M:修改
|
||
# - D:删除
|
||
# 类型为:
|
||
# - SRC:未翻译
|
||
# - TSL:已翻译
|
||
# - PUB:已发布
|
||
get_operation_regex() {
|
||
STAT="$1"
|
||
TYPE="$2"
|
||
|
||
echo "^${STAT}\\s+\"?$(eval echo "\$${TYPE}_DIR")/"
|
||
}
|
||
|
||
# 确保两个变更文件一致
|
||
# 用法:ensure_identical X类型 X状态 Y类型 Y状态 是否仅比较文件名
|
||
#
|
||
# 状态为:
|
||
# - A:添加
|
||
# - M:修改
|
||
# - D:删除
|
||
# 类型为:
|
||
# - SRC:未翻译
|
||
# - TSL:已翻译
|
||
# - PUB:已发布
|
||
ensure_identical() {
|
||
TYPE_X="$1"
|
||
STAT_X="$2"
|
||
TYPE_Y="$3"
|
||
STAT_Y="$4"
|
||
NAME_ONLY="$5"
|
||
SUFFIX=
|
||
[ -n "$NAME_ONLY" ] && SUFFIX="_basename"
|
||
|
||
X_FILE="/tmp/changes_${TYPE_X}_${STAT_X}${SUFFIX}"
|
||
Y_FILE="/tmp/changes_${TYPE_Y}_${STAT_Y}${SUFFIX}"
|
||
|
||
cmp "$X_FILE" "$Y_FILE" 2> /dev/null
|
||
}
|
||
|
||
# 检查文章分类
|
||
# 用法:check_category 类型 状态
|
||
#
|
||
# 状态为:
|
||
# - A:添加
|
||
# - M:修改
|
||
# - D:删除
|
||
# 类型为:
|
||
# - SRC:未翻译
|
||
# - TSL:已翻译
|
||
check_category() {
|
||
TYPE="$1"
|
||
STAT="$2"
|
||
|
||
CHANGES="/tmp/changes_${TYPE}_${STAT}"
|
||
! grep -Eqv "^${CATE_PATTERN}/" "$CHANGES"
|
||
}
|