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
6
A
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.
Tôi đoán '$ {BRANCH: = default}' phải là 'BRANCH = $ {BRANCH: = default}'. – palacsint
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': = '. –
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