svnhook-在提交时,检查redmine问题当前状态是否已关闭
为了防止svn仓库的乱提交,我们规定了提交时,提交日志必须输入需求单或者bug链接,而且我们需要去检测当前的链接是有效并且状态时处于非关闭的,主要操作是下面两个步骤
1:验证输入链接的有效性:使用 curl
检查链接是否可以访问。
2:获取问题状态:通过 Redmine API 获取问题的状态,并检查其是否为非关闭状态。
# 检查提交日志是否包含指定字母 if ! echo "$LOGMSG" | grep -q "$URL"; then echo "请带上需求单或者bug链接" >&2 exit 1 fi # 提取日志中的 Redmine 问题链接 REDMINE_LINK=$(echo "$LOGMSG" | grep -oP '(http://192\.168\.xx\.xx:3000/issues/\d+)') # 检查链接是否有效 if [ -n "$REDMINE_LINK" ]; then # 使用 curl 检查链接是否可访问 HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$REDMINE_LINK?key=YOUR_API_KEY") if [ "$HTTP_STATUS" -ne 200 ]; then echo "Redmine 问题链接不可访问: $REDMINE_LINK" >&2 exit 1 fi # 获取问题状态 ISSUE_ID=$(echo "$REDMINE_LINK" | awk -F'/' '{print $NF}') ISSUE_STATUS=$(curl -s "http://192.168.xx.xx:3000/issues/$ISSUE_ID.json?key=YOUR_API_KEY" | jq -r '.issue.status.name') # 检查问题状态是否为非关闭状态 if [[ "$ISSUE_STATUS" == "已关闭" || "$ISSUE_STATUS" == "Closed" ]]; then echo "Redmine 问题状态为关闭,无法提交。" >&2 exit 1 fi else echo "未找到有效的 Redmine 问题链接" >&2 exit 1 fi