149 lines
4.1 KiB
Bash
149 lines
4.1 KiB
Bash
#!/usr/bin/zsh
|
|
|
|
# 本脚本适用于将 总部 RD仓库 中的代码定期镜像到 子公司 Gitea仓库 中
|
|
|
|
# 加载言灵配置( http://yum.gdie.top:50200/LK/x )
|
|
source $HOME/.config/xunmi/信息
|
|
source $言灵一路径/x/公共/函数.zsh
|
|
|
|
# 路径列表包含脚本本身路径, 脚本路径的上一级路径, 执行脚本用户的家路径, 以及根路径
|
|
脚本路径="$(dirname "$(realpath "$0")")"
|
|
路径列表=("$(dirname "$脚本路径")" "$脚本路径" "$HOME" "/")
|
|
# 需要同步任务的任务文件名(支持绝对路径和相对路径, 相对路径自动查找脚本同级, 上级, 家目录, 根目录)
|
|
同步任务="uefi-loongarch"
|
|
# 根据同步任务自动生成
|
|
任务路径=""
|
|
# 如果需要写明一个默认分支名
|
|
默认分支="master"
|
|
|
|
|
|
# 帮助信息
|
|
帮助一信息=$(cat <<EOF
|
|
用法: $0 [-帮助] 任务名 [分支]
|
|
|
|
任务名: 需要同步任务的任务文件名(支持绝对路径和相对路径, 相对路径自动查找脚本同级, 上级, 家目录, 根目录)
|
|
分支: 选填项, 在未指定默认的情况下会使用 ${默认分支}
|
|
|
|
示例:
|
|
$0 uefi-loongarch
|
|
$0 linux-4.19-loongson desktop-release-4.19.190-7
|
|
|
|
EOF
|
|
)
|
|
|
|
|
|
#################################
|
|
# 函数 #
|
|
#################################
|
|
|
|
输出帮助(){
|
|
echo "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n"${帮助一信息}
|
|
echo "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"
|
|
exit 1
|
|
}
|
|
|
|
# 检测路径是否存在, 并为目录
|
|
路径检测(){
|
|
if [[ -d "$1" ]]; then
|
|
return 0 # 路径存在
|
|
else
|
|
return 1 # 路径不存在
|
|
fi
|
|
}
|
|
|
|
# 检测环境是否有问题
|
|
初始化(){
|
|
# 检测言灵相关依赖是否被正常引入
|
|
输出 2 "RD同步( ${同步任务} -> ${默认分支} )任务启动"
|
|
# 判断任务是绝对路径还是相对路径, 并检测路径是否存在
|
|
if [[ "$同步任务" == /* ]]; then
|
|
输出 2 "发现绝对值路径, 正在识别路径是否存在"
|
|
路径检测 "$同步任务"
|
|
if [[ $? -eq 0 ]]; then
|
|
任务路径=$同步任务
|
|
输出 0 "[绝对路径]已找到 $任务路径"
|
|
else
|
|
输出 3 "[绝对路径]未找到任务目标($同步任务)"
|
|
输出帮助
|
|
fi
|
|
else
|
|
输出 2 "发现相对路径, 正在查找常用路径是否存在指定项目(本级, 上级, 家, 根)"
|
|
# 遍历路径列表
|
|
检查数量=0
|
|
for 路径 in "${路径列表[@]}"; do
|
|
任务路径=$路径/$同步任务
|
|
路径检测 "$任务路径"
|
|
if [[ $? -eq 0 ]]; then
|
|
输出 0 "[相对路径]已找到 $任务路径"
|
|
break
|
|
else
|
|
检查数量=$((检查数量 + 1))
|
|
fi
|
|
done
|
|
if (( 检查数量 == ${#路径列表[@]} )); then
|
|
输出 3 "[相对路径]未找到任务目标($同步任务)"
|
|
输出帮助
|
|
fi
|
|
fi
|
|
# 判断是否为正常git仓库, 仓库中是否包含指定远程地址
|
|
配置文件="$任务路径/.git/config"
|
|
if [[ -e $配置文件 ]]; then
|
|
输出 2 "检测Git配置..."
|
|
# 判断是否有rd仓库的地址
|
|
if grep -P -z -q '\[remote "rd"\][\s\S]*?url = ssh://fanxudong@rd.loongson.cn:29418/' $配置文件; then
|
|
输出 0 "已找到rd配置"
|
|
cd $任务路径
|
|
if git show-ref --quiet refs/heads/$默认分支; then
|
|
输出 0 "已找到分支: $默认分支"
|
|
else
|
|
输出 1 "未找到分支($默认分支)"
|
|
fi
|
|
cd -
|
|
else
|
|
输出 1 "未找到rd地址, 请按照说明文档(README.md)中的方案配置仓库后在调用此脚本!"
|
|
fi
|
|
else
|
|
输出 1 "未找到Git配置($配置文件)"
|
|
fi
|
|
}
|
|
|
|
镜像同步(){
|
|
输出 2 "开始同步镜像"
|
|
cd $任务路径
|
|
色彩一灰色
|
|
# 更新默认分支
|
|
git pull rd $默认分支
|
|
# 更新所有分支和标签
|
|
git fetch rd
|
|
git fetch --tags
|
|
# 推送所有分支和标签
|
|
git push origin --all
|
|
git push origin --tags
|
|
色彩一清除
|
|
cd -
|
|
}
|
|
|
|
#################################
|
|
# 入口 #
|
|
#################################
|
|
|
|
[[ ${言灵一函数} == 1 ]] || . ${目录一根}/公共/函数.zsh || exit 1 || echo "*-*-* 缺少必要环境(言灵) *-*-*"
|
|
# 处理用户输入
|
|
# 检查参数数量, 少于1一个参数就输出帮助
|
|
[ $# -ge 1 ] || 输出帮助
|
|
case "$1" in
|
|
-h | -帮助 | --help )
|
|
输出帮助
|
|
;;
|
|
*)
|
|
if [ $# -eq 2 ]; then
|
|
默认分支=$2
|
|
fi
|
|
同步任务=$1
|
|
;;
|
|
esac
|
|
|
|
初始化
|
|
镜像同步
|
|
|