2009-06-25 24 views
8

Đối với tập lệnh mà tôi đang thực hiện để triển khai chia đôi bằng CVS, tôi muốn tìm hiểu 'dấu thời gian' của thanh toán hiện tại là gì. Nói cách khác, nếu tôi đang ở trên một chi nhánh/thẻ, tôi muốn biết dấu thời gian cuối cùng một cái gì đó đã cam kết với chi nhánh/thẻ đó. Nếu tôi đứng đầu, tôi muốn biết dấu thời gian cuối cùng trên đầu.Cách lập trình lấy ngày cam kết mới nhất trên thanh toán CVS

Tôi biết điều này không được đảm bảo 100%, vì các lần kiểm tra cv có thể có các tệp khác nhau tại các dấu thời gian/bản sửa đổi khác nhau ... nhưng giải pháp đúng trong trường hợp là tốt nhất đối với tôi.

ngây thơ, tôi nghĩ rằng

cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1 

đang diễn ra để làm điều đó, nhưng nó quay ra nó đi qua toàn bộ lịch sử cam kết, cho tất cả các chi nhánh/thẻ.

Trả lời

2

Tệp CVS trên nhánh đang ở các dấu thời gian khác nhau, độ chính xác của việc chọn bất kỳ tệp nào để nhận thông tin thời gian cuối cùng cho chi nhánh này hầu như không đáng giá.

Tuy nhiên, nó có thể trở nên tốt hơn nếu có một số tệp sẽ được thay đổi thường xuyên. Ví dụ, ở một trong các căn cứ của tôi, có một tệp version.h được cập nhật trên mọi phiên bản thay đổi (nhỏ hoặc lớn). Điều đó có thể được sử dụng cho thông tin thời gian trên phiên bản hiện tại (một lần nữa không chính xác cho tất cả các tập tin trong chi nhánh, nhưng nó cung cấp cho một dòng dưới cùng).

Vì vậy, nếu bạn biết một tập tin có thể cung cấp cho bạn một giá trị mấu chốt,

cvs log path/to/version.h -r branch/tag | grep ^date | sort | tail -1 

sẽ cung cấp cho bạn những dấu thời gian cuối cùng cho tập tin đó.


Nếu bạn có thể liệt kê toàn bộ tập tin cài đặt của các cơ sở như thế này,

find /base/dir -type f | grep -v CVS > files.txt 

sau đó, bạn có thể lặp các cvs lệnh trên cho từng tập tin,

rm -f allFiles.txt 
for f in $(<files.txt); do cvs log $f ...etc... tail -1 >> allFiles.txt 
sort allFiles.txt | tail -1 

Dòng cuối cùng sắp xếp sẽ cung cấp cho bạn ngày chính xác cho lần commit gần đây nhất.
Than ôi, bạn sẽ không nhận được tên tệp (cũng có thể được thực hiện bằng một số chi tiết khác)

+0

Đó là điều duy nhất tôi có thể nghĩ ra. Cuối cùng, tôi đã làm một cvs đăng nhập mặc dù, và phân tích cú pháp đó cho tất cả các tập tin. Làm nó trên mỗi tập tin sẽ chết chậm. –

+0

Tôi nghĩ rằng điều này không hỗ trợ ngày dính, tức là nó vẫn sẽ cung cấp ngày gần đây nhất thay vì ngày được chọn. – Penz

0

Cách nhanh nhất để thay đổi tệp (được xây dựng dựa trên câu trả lời của nik) là:

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date 

Nếu bạn muốn nhận được chỉ ngày, sử dụng:

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date | sed 's/date: \([^ ]*\).*/\1/' 

này sử dụng lá cờ -b trong đó sử dụng các chi nhánh mặc định và -d cho phép bạn nói CVS bạn chỉ quan tâm đến các phiên bản mới nhất cho đến một thời điểm nhất định. Biểu thức `` sau đó chuyển ngày hiện tại làm giới hạn, cho bạn cam kết mới nhất.

Trên kho lưu trữ CVS gnuplot, sử dụng cờ -d làm giảm thời gian thực hiện từ ~ 4s xuống ~ 1.5s.

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