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

 

posted @ 2024-10-08 10:22  Hiro-D  阅读(5)  评论(0编辑  收藏  举报