2012-03-06 8 views
16

Tôi đang trong quá trình viết một móc thay đổi thủy ngân. Tôi chưa có mọi thứ để tìm ra, nhưng quá trình thử và sai được thực hiện đau đớn hơn bởi thực tế là tôi phải tiếp tục cam kết và đẩy chỉ để kiểm tra công việc của tôi đang tiến triển.Cách dễ dàng, không đau để kiểm tra các móc kim loại mới (đang hoạt động)

Có cách nào để 'giả mạo' một trình kích hoạt để thực hiện móc khóa changegroup của tôi với trạng thái hiện tại của kho lưu trữ được sử dụng cho các tham số của nó không?

Bất kỳ trợ giúp nào để hợp lý hóa quy trình này sẽ được đánh giá rất nhiều. Cảm ơn Nick

Trả lời

18

Tôi e rằng không có khả năng gỡ lỗi tích hợp cho việc này. Những gì tôi làm khi viết một cái móc là để thiết lập hai kho địa phương:

$ hg init repo 
$ hg clone repo clone 

và sau đó cấu hình móc changegroup trong repo. Bây giờ, hãy đi vào clone và làm

$ echo a > a 
$ hg add a 
$ hg commit -m 'a file' 

để thiết lập clone. Mỗi khi tôi muốn kiểm tra móc, tôi chạy

$ hg push; hg -R ../repo rollback 

bên trong clone. Tôi giữ nó trong lịch sử dòng lệnh của mình để tôi có thể chỉ cần bấm + Trả lại để thực hiện nó lặp đi lặp lại. Các hg rollback là chìa khóa: có hiệu quả hủy bỏ các hg push để tôi có thể lặp lại nó một lần nữa và một lần nữa.

Bạn dĩ nhiên sẽ cần phải điều chỉnh điều này khi cần thiết cho móc của mình. Nếu móc kiểm tra tên người gửi, sau đó sử dụng hg commit -u someone để đặt điều này nếu cần. Nếu hook cần nhiều hơn một changeset trong changegroup, sau đó thực hiện hai hoặc nhiều commit trước khi push - rollback sẽ xử lý việc loại bỏ tất cả các changeset được đẩy. Nếu móc được điều hành bởi hgweb, sau đó chạy

$ hg serve --config 'web.push_ssl=no' --config 'web.allow_push=*' 

trong một thiết bị đầu cuối để phục vụ repo trong khi bạn đẩy nó trong thiết bị đầu cuối khác.

+0

Xin cảm ơn, điều đó đơn giản hóa cách tôi thực hiện theo nhiều cách! :) –

6

Gần đây tôi đã viết một móc python cho Mercurial bằng API. Để kiểm tra nó, tôi đã làm như sau, sau khi khởi chạy trình thông dịch python bên trong thư mục kho lưu trữ.

from mercurial import ui, hg 
repo = hg.repository(ui.ui(), '.') 
execfile('./myhook.py') 
myhook(repo.ui, repo, 'hash', 'outgoing') 

đâu myhook là chức năng móc của bạn (nằm trong myhook.py), hash là hash của changeset bạn muốn kiểm tra móc của bạn với, và outgoing là loại móc.

Nếu móc của bạn không hoạt động như mong đợi, bạn có thể sửa đổi tập lệnh và thực hiện lại hai dòng sau để thử lại.