2010-06-16 36 views
35

Có công cụ nào tốt để tính số lượng các dòng mã đã thay đổi trong một khoảng thời gian nhất định trong một kho lưu trữ thủy ngân không? Một cái gì đó dọc theo các dòng của statsvn sẽ là tuyệt vời, nhưng bất cứ điều gì đếm số lượng các dòng mã thay đổi trong vòng 6 tháng sẽ làm (bao gồm một sự kết hợp thông minh của các đối số để nhật ký hg). Cảm ơn.Đếm các dòng mã đã thay đổi theo thời gian

PS: Xin đừng bàn về mục đích đo số này;)

+1

http://code.google.com/p/gource/ sẽ làm điều đó và trông khá đẹp trong quy trình. :-) – Ken

Trả lời

9

Tôi cần thực hiện việc này và dành một chút thời gian với tiện ích mở rộng hg và các giải pháp tương tự.

Cuối cùng, tôi thấy rằng những gì làm việc tốt nhất cho tôi là CLOC (Đếm Ngành Mã): http://cloc.sourceforge.net/

Bạn có thể cung cấp cho nó hai thư mục có chứa hai phiên bản của một dự án, và nó sẽ đếm tất cả các các dòng giống nhau, đã sửa đổi, thêm, xóa. Nó nhận ra nhiều ngôn ngữ và mã hóa các mục, các chú thích và các dòng trống.

Để sử dụng nó, tôi kéo ra hai phiên bản của mã của tôi từ Hg vào hai thư mục song song, và sau đó sử dụng cloc --diff --ignore-trắng

+4

Đó là một giải pháp tốt cho "vấn đề" khi bạn chỉ tải xuống một tệp Perl. Lưu ý cú pháp là: './cloc.pl --ignore-whitespace --ignore-case --diff

' – Pascal

+0

không nhanh như git diff --shortstat, nhưng thực hiện tốt hơn việc tìm mã trùng lặp đã được sao chép. – cmcginty

11

Sửa: hg diffhg log cả hỗ trợ một --stat tùy chọn có thể làm điều này cho bạn, chỉ tốt hơn và nhanh hơn.


Tôi đã tạo bí danh được gọi là lines để đếm các dòng đã thay đổi (không nhất thiết là dòng mã) cho tôi. Hãy thử đặt bí danh này trong tập tin .hgrc của bạn:

[alias] 
lines = !echo `hg log -pr [email protected] | grep "^+" | wc -l` Additions; echo `hg log -pr [email protected] | grep "^-" | wc -l` Deletions; 

Sau đó vượt qua nó sửa đổi đầu tiên, tiếp theo là bất kỳ đối số tùy chọn:

hg lines tip hoặc hg lines 123:456 -u brian

Đôi khi bạn muốn biết số dòng đã thay đổi trừ các thay đổi chỉ khoảng trắng. Điều này yêu cầu sử dụng diff -w bên dưới thay vì log -p. Tôi thiết lập một bí danh linesw cho việc này:

#ignore whitespace 
linesw = ![[ $1 =~ : ]] && r=$1 || r="$1~1:$1"; echo `hg diff -wr $r | grep "^+\([^+]\|$\)" | wc -l` Additions; echo `hg diff -wr $r | grep "^-\([^-]\|$\)" | wc -l` Deletions; 

hg linesw tip hoặc hg lines 123:456

Lưu ý họ cư xử hơi khác vì difflog cư xử khác nhau - ví dụ, log sẽ mất một tham số --user khi diff sẽ không, và khi vượt qua phạm vi, log sẽ hiển thị các thay đổi được cam kết trong bản sửa đổi đầu tiên được đưa ra trong phạm vi, trong khi diff sẽ không hiển thị.

Điều này chỉ được kiểm tra bằng bash.

+0

Không sử dụng lệnh hg log. Điều này cũng bao gồm tất cả các thay đổi trong lô hàng repo tuyến tính giữa hai ID cam kết, bao gồm các cam kết không được cam kết trong nhánh hiện tại. – Paul

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