2010-06-16 17 views
35

क्या कोई अच्छा उपकरण है जो एक निश्चित समय अवधि में कोड की बदली हुई रेखाओं की संख्या को गणना करता है? statsvn की लाइनों के साथ कुछ बढ़िया होगा, लेकिन 6 महीने के भीतर कोड की बदली गई लाइनों की संख्या को गिनने के लिए कुछ भी होगा (एचजी लॉग के लिए तर्कों का एक चालाक संयोजन सहित)। धन्यवाद।समय के साथ कोड की बदली हुई लाइनों की गणना

पुनश्च: कृपया इस संख्या मापने के उद्देश्य पर चर्चा नहीं करते;)

+1

http://code.google.com/p/gource/ इसे करेगा और प्रक्रिया में सुंदर दिखाई देगा। :-) – Ken

उत्तर

9

मुझे ऐसा करने की ज़रूरत है, और एचजी चर्न एक्सटेंशन और इसी तरह के समाधान के साथ काफी समय बिताया।

अंत में, मैंने पाया है कि क्या काम मेरे लिए सबसे अच्छा Cloc (गणना संहिता की लाइन) था: http://cloc.sourceforge.net/

आप इसे एक परियोजना के दो संस्करणों युक्त दो फ़ोल्डर्स दे सकते हैं, और यह सभी की गणना होती है लाइनें जो समान हैं, संशोधित, जोड़े गए हैं, हटा दी गई हैं। यह कई भाषाओं और आइटम कोड, टिप्पणियां और खाली लाइनों को पहचानता है।

इसके इस्तेमाल के लिये मैं बाहर एचजी से मेरे कोड के दो संस्करण दो समानांतर फ़ोल्डरों में खींच लिया, और फिर इस्तेमाल किया cloc --diff --ignore-सफ़ेद

+4

यह "समस्या" का एक अच्छा समाधान है क्योंकि आप केवल एक पर्ल फ़ाइल डाउनलोड करते हैं। नोट वाक्यविन्यास है: './cloc।pl --ignore-whitespace --ignore-case --diff

' – Pascal

+0

यह गिट diff --shortstat के रूप में तेज़ नहीं है, लेकिन यह कॉपी किए गए डुप्लिकेट कोड को खोजने का एक बेहतर काम करता है। – cmcginty

11

संपादित: hg diff और hg log दोनों समर्थन एक --stat विकल्प जो आपके लिए यह कर सकता है, केवल बेहतर और तेज़।


मैं एक उपनाम lines कहा जाता है मेरे लिए बदल लाइनों (कोड की जरूरी नहीं कि लाइनों) गिनती करने के लिए बनाया है। तब

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

यह संशोधन पहले गुजरती हैं, किसी भी वैकल्पिक तर्क के बाद: अपने .hgrc फ़ाइल में इस उर्फ ​​डालने की कोशिश करो

hg lines tip या hg lines 123:456 -u brian

कभी-कभी आप लाइनों की संख्या जानना चाहते हैं व्हाइटस्पेस-केवल परिवर्तनों को छोड़कर बदल दिया गया। इसके लिए log -p के बजाय diff -w का उपयोग करना आवश्यक है। मैं इस के लिए एक linesw उर्फ ​​की स्थापना:

#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 या hg lines 123:456

नोट वे व्यवहार करते हैं कुछ अलग ढंग से diff क्योंकि और log व्यवहार अलग ढंग से - उदाहरण के लिए, log एक --user पैरामीटर जबकि diff नहीं होगा ले जाएगा, और जब सीमा पार हो जाती है, log श्रेणी में दिए गए पहले संशोधन में किए गए परिवर्तन दिखाएगा, जबकि diff नहीं होगा।

यह केवल बैश का उपयोग करके परीक्षण किया गया है।

+0

एचजी लॉग कमांड का उपयोग न करें। इसमें दो प्रतिबद्ध आईडी के बीच रैखिक रेपो हॉस्टरी में सभी परिवर्तन भी शामिल हैं, जिनमें वर्तमान शाखा में प्रतिबद्ध नहीं थे। – Paul