2010-11-06 8 views
6

व्यस्त भंडार में, मैं एक ही स्थान पर लगातार संपादित किया जा रहा बहुत ज्यादा केंद्रीय तर्क के साथ कुछ फ़ाइलों का पूर्वानुमान कर सकते हैं।मर्कुरियल रिपोजिटरी आंकड़े, उम्मीदवारों को रिफैक्टरिंग के लिए ढूंढने के लिए?

वहाँ किसी भी तरह से मर्क्युरियल पूछकर ऐसी फ़ाइलों को खोजने के लिए है, या तो बंडल एक्सटेंशन, 3 पार्टी एक्सटेंशन, या किसी भी बाहरी उपकरण के माध्यम से?

असल में मुझे कुछ आंकड़े पसंद हैं जो अधिकतर समय संपादित किए गए फाइलें दिखाते हैं, ताकि मैं अलग-अलग फ़ाइलों में कोड को दोबारा जोड़ने के लिए उम्मीदवारों को ढूंढने के लिए इसका उपयोग कर सकूं, ताकि सिंगल के लिए निरंतर विलय दर्द से बचने के लिए फ़ाइलें।

मैं मंथन विस्तार के बारे में पता कर रहा हूँ, लेकिन यह केवल कितना प्रत्येक लेखक भंडार, नहीं लेखकों क्या यह करने के लिए क्या करने के लिए करता है पर ध्यान केंद्रित करने लगता है।

+0

दिलचस्प सवाल! –

उत्तर

4

मैं मंथन, गतिविधि, या चार्ट एक्सटेंशन के किसी भी नहीं लगता कि वास्तव में करता है, हालांकि वे सभी एक सरल ट्वीक कर रहे हैं इससे दूर मुझे लगता है कि (वे फ़ाइल से नहीं उपयोगकर्ता द्वारा समूह)। फ़ाइल से

for therev in $(seq 1 $(hg id -n -r tip)) ; do 
    hg diff --change $therev --stats 
done 

और फिर कुल:

आप की तरह एक पाश इस्तेमाल कर सकते हैं।

+0

यह कहने का पर्याप्त कारण है कि आपका उत्तर, और कमांड लाइन क्लाइंट के आउटपुट और उपयोग में खुदाई करने के लिए मुझे .NET में उपयोग के लिए कमांड लाइन का एक रैपर बनाने के लिए सी # प्रोजेक्ट शुरू किया गया। एक आंकड़ा पैकेज इसके परिणामों में से एक होने जा रहा है। मेरी कक्षा पुस्तकालय यहां पाया जा सकता है: http://bitbucket.org/lassevk/mercurial.net - ** प्रेरणा के लिए धन्यवाद! ** –

+0

कक्षा पुस्तकालय लंबे समय से कोडप्लेक्स में स्थानांतरित हो गया है: http: //mercurialnet.codeplex। कॉम/- बस इसे संपादित करने के बाद से मुझे इस सवाल पर वोट मिला, इसलिए कम से कम इसने कुछ ध्यान आकर्षित किया। –

+0

आम तौर पर दुनिया में अधिक सी # कोड मुझे दुखी कर देगा, लेकिन अगर यह कतरपनेटडॉट समुदाय में गिट पर मर्कुरियल की जगह को मजबूत कर रहा है तो बेहतर! –

1

Ry4an के आधार पर मैं निम्नलिखित powershell स्क्रिप्ट बनाया:

यह changesets कि पहली वर्णन पंक्ति में शब्द 'मर्ज' शामिल ध्यान नहीं देता। एक सीएसवी फ़ाइल उत्पन्न होती है। मैं इसे एक्सेल में खोलता हूं और प्रति फ़ाइल में परिवर्तन को एकत्र करने के लिए तालिका को पिवोट करता हूं। (वैसे भी एक गैर एसएसडी डिस्क पर,)

for f in `find . -name '*.java'`; do c=`hg log $f | grep changeset | wc -l`; echo "$c $f" ; done | sort -n | tail -n 10 

यह कुछ समय लगता है चलाने के लिए:

$revisions = @{}; 

function GetFileChanges([int] $revision){ 
    try{ 
     $logDescription = hg log -r $revision --template '{desc|firstline}'   
     if ($logDescription.ToLower().Contains("merge")){ 
      write-output "Skipping merges " $logDescription 
     } else { 
      $fileChanges = hg diff --change $revision --stat 
      $fileModifications = @{}; 
      foreach($fileChange in $fileChanges){ 
       if ($fileChange){ #when you have a branch operation, no files are changed. 
        $fileLineDetail = $fileChange.split('|'); 
        $changes = select-string -InputObject $fileLineDetail[1] -pattern '(\d+)' | % { $_.Matches } | % { $_.Value }  
        if ($changes){   
         $fileModifications.Add($fileLineDetail[0].trim(), [int] $changes);     
        } 
       } 
      } 
      $revisions.Add($revision, $fileModifications); 
     }  
    } 
    catch [exception] 
    { 
     "caught an exception" 
     write-error $revision 
    } 

} 

$previous = hg identify -r build-3.4.139.0 -n 
$now = hg identify -r tip -n 
for($i = [int] $previous; $i -le [int] $now; $i++){ 
    GetFileChanges($i); 
} 

# hg diff -r 3610:tip --stat 

$exportTable = @(); 

foreach($key in $revisions.Keys){ 

    $revision2= $revisions[$key]; 
    foreach($file in $revision2.Keys){ 

    $tempreport = New-Object PSObject 
    $tempreport | Add-Member -type NoteProperty -Name Revision -Value $key 
    $tempreport | Add-Member -type NoteProperty -Name File -Value $file 
    $tempreport | Add-Member -type NoteProperty -Name Changes -Value $revisions[$key][$file] 
    $exportTable += $tempreport; 
    } 

} 

$exportTable | export-csv "stats.csv" -noType 
0

यह "मुझे इस परियोजना के कोड बेस में 10 सबसे संशोधित फ़ाइलों दे" पर मेरी ले है , लेकिन यह पूरी तरह से काम करता है।

उन लोगों के लिए जो चलने की इच्छा रखते हैं, मैं वर्तमान डीआईआर के तहत सभी जावा स्रोत फ़ाइलों की एक सूची पुनर्प्राप्त करता हूं, उस फ़ाइल के लिए एचजी लॉग प्रविष्टियों को पुनर्प्राप्त और गिनती करता हूं, फ़ाइल नाम के साथ लॉग प्रविष्टियों की संख्या को आउटपुट करता हूं, परिवर्तन गिनती द्वारा क्रमबद्ध करें और 10 सबसे संशोधित फ़ाइलों के अलावा सबकुछ फ़िल्टर करें।

दृष्टिकोण को आसानी से अपने बेहतरीन पर एक अलग प्रकार की फ़ाइलों को, एक अलग एससीएम प्रणाली, विशिष्ट दिनांक सीमा आदि बैश और एचजी शामिल करने के लिए संशोधित किया जा सकता है। ;)

संबंधित मुद्दे