2011-07-18 24 views
8

Tôi muốn có thể nhận được toàn bộ lịch sử của một hàm hoặc một khối văn bản cụ thể bên trong mã của tôi.Lịch sử chức năng với Mercurial

Tôi biết tôi có thể có sự khác biệt của tất cả các cam kết trên một tệp cụ thể, nhưng tôi chỉ muốn theo dõi cuộc sống của một khối nhỏ văn bản cụ thể bên trong tệp của tôi (ví dụ: hàm C++).

Tôi muốn nhìn thấy nó thay đổi mặc dù các phiên bản trước đây, không có vấn đề nếu được di chuyển bên trong các tập tin hoặc tập tin khác hoặc thậm chí đổi tên (phần còn lại của hàm còn lại nhiều hơn hoặc ít hơn như nhau khi đổi tên)

Tôi nghe Mercurial có thể làm điều này một cách dễ dàng nhờ vào việc ghi lại lịch sử của nó một cách dễ dàng, nhưng tôi không nhớ nơi tôi nghe thấy (trong giấc mơ của tôi?) Và tôi không thể tìm thấy bất kỳ công cụ hay cách nào để làm điều đó ngoại trừ lịch sử truyền thống và các công cụ khác. Có thể tôi không tìm kiếm bằng từ khóa phù hợp ... Bất kỳ ai cũng có thể trợ giúp?

Cảm ơn

PS: Tôi vẫn sử dụng SVN cho các dự án khác, và nếu ai đó biết một cách để thực hiện điều tương tự với SVN, tôi mang nó quá :-)

Trả lời

0

Bằng cách nhìn vào các vùng đồng bằng và/hoặc nhật ký hg nó dường như không thể làm những gì bạn yêu cầu hoặc có đủ thông tin để viết một kịch bản để regex ra các thông tin. Nếu bạn muốn, bạn có thể thấy các thay đổi đã xảy ra với một tệp trong một khoảng thời gian và tìm kiếm thông tin đó cho những gì bạn đang tìm kiếm.

4

Điều này thực sự khá khả thi với hg grep. Một ví dụ nói cho chính nó:

$ hg grep 'def revrange' --all 
mercurial/cmdutil.py:14319:-:def revrange(repo, revs): 
mercurial/scmutil.py:14319:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3707:-:def revrange(ui, repo, revs): 
mercurial/cmdutil.py:3707:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3090:+:def revrange(ui, repo, revs): 
mercurial/commands.py:3090:-:def revrange(ui, repo, revs): 
mercurial/commands.py:2331:-:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:2331:+:def revrange(ui, repo, revs): 
mercurial/commands.py:705:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:705:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:697:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:697:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:580:+:def revrange(ui, repo, revs = [], revlog = None): 

Tôi hỏi hg để tìm def revrange (định nghĩa hàm). Kết hợp với cờ --all thành grep, điều này sẽ in mọi bản sửa đổi có chứa thay đổi về trạng thái đối sánh.

Vì vậy, chúng ta có thể dễ dàng nhìn thấy sự tiến hóa của chức năng này:

  • nó lần đầu tiên được giới thiệu trong phiên bản 580, trong commands.py
  • 697 loại bỏ các mặc định để lập luận revs
  • 705 có vẻ là một hợp nhất
  • 2331 đã xóa đối số revlog
  • 3090 đã chuyển hàm sang cmdutil.py
  • 3707 loại bỏ các lập luận ui
  • và cuối cùng, 14.319 chuyển các chức năng để scmutil.py

Tất nhiên, đây không phải là hoàn hảo, vì nếu hàm được đổi tên, chuỗi sẽ kết thúc sau khi đổi tên. Nhưng tùy thuộc vào trường hợp sử dụng cụ thể của bạn, điều này có thể là đủ.

Để tinh vi hơn, bạn có thể viết một tập lệnh tương đối đơn giản thậm chí có thể làm theo các đổi tên.

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