2011-01-22 38 views
6

Có móc móc hiện tại trong Mercurial, như changegroup, cho phép thực hiện các thao tác, nhưng cho phép tôi thực hiện nhiều thao tác (hoặc thay đổi) dựa trên nhánh nào bị ảnh hưởng bởi các changesets trong đó? Ví dụ, tôi cần thông báo cho người nghe tại một địa chỉ khi push được thực hiện nhưng lý tưởng là nó sẽ thông báo cho các url khác nhau dựa trên nhánh nào bị ảnh hưởng mà không chỉ xóa tất cả chúng.Móc Mercurial Changegroup thay đổi dựa trên các nhánh

Trả lời

7

Không có móc nhánh chi tiết, nhưng bạn có thể thực hiện logic đó trong chính móc. Ví dụ trong hgrc của bạn:

[hooks] 
changeset = actions-by-branch.sh 

và sau đó trong bạn actions-by-branch.sh bạn muốn làm:

#!/bin/bash 
BRANCH=$(hg log --template '{branch}' -r $HG_NODE) 
BRANCH=${BRANCH:-default} # set value to 'default' if it was empty 

if [ "$BRANCH" == "default" ] ; then 
    do something 
elif [ "$BRANCH" == "release" ] ; then 
    do something else 
else 
    do a different thing 
fi 

ý rằng tôi đã sử dụng một changeset hơn là móc changegroup. Một nhóm thay đổi duy nhất có thể có các thay đổi trên nhiều nhánh, điều này sẽ làm phức tạp logic. Nếu bạn quyết định đi tuyến đường đó, bạn cần phải lặp lại từ $HG_NODE tất cả các cách đến tip để hành động trên mỗi thay đổi trong nhóm.

+1

Tôi đoán '$ {BRANCH: = default}' phải là 'BRANCH = $ {BRANCH: = default}'. – palacsint

+0

Nó hoạt động như được viết. Từ trang bash man "$ {parameter: = word} Chỉ định giá trị mặc định. Nếu tham số không được đặt hoặc null, thì việc mở rộng từ được gán cho tham số . Giá trị của param- eter sau đó được thay thế. Các tham số có thể không được gán theo cách này. " Nếu chúng ta muốn câu lệnh gán chi tiết hơn, chúng ta sẽ sử dụng ': -' thay cho': = '. –

+1

Ok, tôi đã tìm ra vấn đề. Bash cố gắng chạy giá trị của '$ BRANCH' như một lệnh. Đó là lý do tại sao tôi nhận được thông báo lỗi 'mybranchname: command not found'. Vì vậy, bạn cần phân công hoặc sử dụng bash no-op (': $ {BRANCH: = default}') để tránh lỗi này. – palacsint

Các vấn đề liên quan