demo/同步脚本.zsh
2024-09-06 09:22:03 +08:00

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
初始化
镜像同步