2010-03-16 31 views

Trả lời

2

Tôi nghĩ rằng bạn đúng rằng trước khi thông báo chưa tồn tại. nếu bạn sử dụng pretxncommit nó sẽ, nhưng tôi không chắc chắn 100% những gì nó cho phép bạn làm tại thời điểm đó là giao dịch gần như là hoàn tất.

+0

Hóa ra đó là một phần của câu trả lời (sử dụng pretxncommit). Tôi sẽ đăng một câu trả lời với các chi tiết. – davidavr

8

Hóa ra có hai điều xảy ra với cách tiếp cận ban đầu của tôi:

  1. Như jk chỉ ra, sự kiện precommit xảy ra trước khi cam kết để các dữ liệu meta cho các cam kết đang được xử lý không tồn tại chưa. Bằng cách sử dụng pretxncommit thay vào đó, dữ liệu meta tồn tại, nhưng giao dịch chưa được cam kết với cơ sở dữ liệu.
  2. Sử dụng changectx = repo[None] cung cấp cho bạn ngữ cảnh thay đổi cho thư mục hoạt động. Nhưng chúng tôi muốn thông tin cho cam kết hiện tại để sử dụng changectx = repo['tip'] thay vào đó cung cấp cho chúng tôi dữ liệu meta mới nhất.

Lưu ý rằng nếu bạn sử dụng changectx = repo['tip'] với sự kiện precommit, bạn sẽ thực sự nhận được cam kết cuối cùng được xử lý, chứ không phải hiện tại bạn đang làm việc.

+0

vâng tôi hơi lo lắng về điều này từ cuốn sách mặc dù "Cái móc này có thể truy cập siêu dữ liệu liên quan đến changeset gần như mới, nhưng nó không nên làm bất cứ điều gì vĩnh viễn với dữ liệu này. Nó cũng không phải sửa đổi thư mục làm việc." –

+2

Đây là lý do tại sao yêu cầu và trả lời câu hỏi của riêng bạn được khuyến khích trên Stack Overflow. Hơn một năm sau, câu trả lời này thực sự đã giúp tôi khi tôi trải qua [tài liệu rất thưa thớt] (http://mercurial.selenic.com/wiki/MercurialApi) có sẵn cho API HG. –

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