Dans un référentiel occupé, je peux prévoir certains fichiers avec trop de logique centrale au même endroit étant édité constamment. P>
Y a-t-il un moyen de trouver de tels fichiers en demandant à Mercurial, via des extensions groupées, des extensions 3ème partie ou des outils externes? P>
Fondamentalement, j'aimerais que certaines statistiques montrent des fichiers éditées le plus au fil du temps, afin que je puisse utiliser cela pour trouver des candidats à la scission, comme refactoring le code dans plusieurs fichiers, pour éviter d'avoir une douleur à fusion constante pour les fichiers simples. . P>
Je suis au courant de l'extension de la baratte, mais il semble que cela ne se concentre que sur la quantité de chaque auteur au référentiel, pas ce que les auteurs le font. P>
3 Réponses :
Je ne pense pas que l'une des extensions de baratte, d'activité ou de graphique ne pense pas exactement que, même si elles sont toutes un simple rafale de celui-ci, je pense (ils ont un groupe par l'utilisateur non par fichier).
vous pouviez Utilisez une boucle comme: p> puis total par fichier. p> p>
Il suffit de dire que votre réponse, et un peu de creuser dans la sortie et l'utilisation du client de ligne de commande m'a fait démarrer un projet C # pour créer une enveloppe de la ligne de commande pour l'utilisation de .NET. Un ensemble de statistiques sera l'un des résultats de cette situation. Ma bibliothèque de classe peut être trouvée ici: bitbucket.org/lassevk/mercurial.net - Merci pour l'inspiration! B>
La bibliothèque de classe est depuis longtemps déplacée vers Codépex: mercurialnet.codeplex.com - juste édition de cela depuis que j'ai eu un Votez sur la question aujourd'hui, alors au moins il a attiré une attention particulière.
Normalement, plus de C # Code dans le monde me rendrait triste, mais s'il s'agit de la placement de Mercurial sur Git dans la communauté Csharpnetdot tellement mieux!
Basé sur Ry4an J'ai créé le script PowerShell suivant:
Il ignore les modifications qui contiennent le mot «fusion» dans la première ligne de description. Un fichier CSV est généré. J'ouvre cela dans Excel et pivotez la table pour agréger les modifications par fichier. P>
$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
Ceci est ma prise "Donnez-moi les 10 fichiers les plus modifiés dans la base de code du projet": Il prend un certain temps à exécuter (sur un disque non SSD, de toute façon) , mais ça marche parfaitement. P> Pour ceux qui voudraient une promenade, je récupère une liste de tous les fichiers Source Java sous le directeur actuel, récupérer et compter les entrées de journal HG pour ce fichier, émis le numéro. des entrées de journal avec le nom de fichier, trier par le décompte de la modification et filtrez tout sauf les 10 fichiers les plus modifiés. P> L'approche pourrait facilement être modifiée pour inclure des fichiers d'un type différent, un système SCM différent, une plage de date spécifique, etc. Bash et HG à leur meilleur. ;) p> p>