2017-04-20 54 views
0

我想爲git寫一個prepare-commit-msg鉤子。該腳本應該做以下步驟:不能提取正則表達式的子字符串

  1. 獲取當前的git分支名(工作)
  2. 提取issue-id(不工作)
  3. 檢查是否issue-id已經在提交味精
  4. 如果沒有插入[issue-id]提交信息前

issue-id了這種模式[a-zA-Z]+-\d+和分支的名稱應該是舒美特像feature/issue-id-my-small-description一樣興奮。

但現在,提取的部分是不正常...

這是我準備提交 - 味精腳本:

# Regex used to extract the issue id 
REGEX_ISSUE_ID="s/([a-zA-Z]+-\d+)//" 

# Find current branch name 
BRANCH_NAME=$(git symbolic-ref --short HEAD) 

# Extract issue id from branch name 
ISSUE_ID= $BRANCH_NAME | sed -r $REGEX_ISSUE_ID 

# Check if the issue id is already in the msg 
ISSUE_IN_COMMIT=$(grep -c "\[$ISSUE_ID\]" $1) 

# Check if branch name is not null and if the issue id is already in the commit msg 
if [ -n "$BRANCH_NAME" ] && ! [[ $ISSUE_IN_COMMIT -ge 1 ]]; then 
    # Prefix with the issue id surrounded with brackets 
    sed -i.bak -e "1s/^/[$ISSUE_ID] /" $1 
fi 

編輯添加輸入/輸出例如

輸入$1是git commit消息,類似於

fix bug on login 

fix MyIssue-234 which is a bug on login 

輸出應該是這個問題的ID即輸入:

[MyIssue-123] fix bug on login 
+0

請發佈**輸入**和期望**輸出的樣本** –

+0

@PedroLobito發佈更新。我認爲我使用我的正則表達式w/sed的方式是錯誤的 – ylerjen

+0

Inian現在刪除的答案顯示了主要問題。你應該關閉它並打開一個新問題,或編輯問題以顯示新腳本*和*當你運行它時會發生什麼。 – torek

回答

0

我不知道什麼以及爲什麼這樣做,你做什麼,但是這是最接近我通過固定我的想法得到了在你的代碼加以糾正:

# Regex used to extract the issue id 
REGEX_ISSUE_ID="s/\[([a-zA-Z]+-[0-9]+)\].*/\1/" 

# Find current branch name 
BRANCH_NAME=$(git symbolic-ref --short HEAD) 
if [[ -z "$BRANCH_NAME" ]]; then 
    echo "No brach name... "; exit 1 
fi 

# Extract issue id from branch name 
ISSUE_ID=$(echo "$BRANCH_NAME" | sed -r "$REGEX_ISSUE_ID") 

# Check if the issue id is already in the msg 
ISSUE_IN_COMMIT=$(echo "[email protected]" | grep -c "^\[*$ISSUE_ID\]*") 

# Check if branch name is not null and if the issue id is already in the commit msg 
if [[ -n "$BRANCH_NAME" ]]; then 
    if [[ $ISSUE_IN_COMMIT -gt 0 ]]; then 
     shift # Drop the issue if from the msg 
    fi 
    # Prefix with the issue id surrounded with brackets 
    MESSAGE="[$ISSUE_ID] [email protected]" 
fi 

echo "$MESSAGE" 

其中[email protected]是所有你之後「修理」(如提供的話。 "[email protected]" = "bug" "on" "login")。其餘的我希望你在把它與你的原始代碼進行比較後能夠理解。

+0

經過一些嘗試,我修復了sed的正則表達式,這個工作。謝謝 – ylerjen