Sujunkite „kloką“ su „git vynu“

cloc leidžia suskaičiuoti kiekvienos rūšies kataloge (tuščias, komentaras ar kodas) įrašytų kodų eilutės skaičių.

git blame leidžia jums pamatyti, kuri failo dalis priklauso kam.

Aš ieškau būdų, kaip suderinti abu, kad gautumėte trimatę matricą, kurioje pateikiami kiekvienos rūšies kiekvieno kodo kodo eilutės.

Ar yra kokių nors elegantiškų įmontuotų būdų, kaip tai padaryti, ar jums reikia „ cloc kiekvieno vartotojo „kaltės“ dalis (paleisdami „ grep po git blame ) ir paleiskite cloc , kad būtų galima apskaičiuoti lentelę kiekvienam vartotojui


PAKEITIMAS

Naivus požiūris (pagrįstas @Jubobs komentaru):

  • Pirmiausia sukurkite kaltės failą kiekvienam failui kataloge (nebūtinai aiškiai).
  • Paleiskite grep su kažkuo panašiu grep "^[^(]*([^)]*)" kad pasiektumėte visų naudotojų sąrašą ir gautumėte unikalų naudodami sort ir uniq .
  • Kiekvienam vartotojui: sukurkite aplanko šešėlinę kopiją ir grep naudojant grep "^[^(]*($user)" , kad būtų paliktos tik vartotojo linijos.
  • Vykdyti kloką šešėlinėje kopijoje.
  • Padarykite tai kiekvienam vartotojui, išsaugokite rezultatus ir pateikite juos kartu.

Tai daugiau ar mažiau būdas sukurti norimą rezultatą. Tačiau, kaip matote, šis metodas leidžia jums daug nukopijuoti (arba bent laikyti ją atmintyje), ir jūs galite iš tikrųjų apskaičiuoti kiekvienam vartotojui skirtas eilutes, paleisdami failą vieną kartą vietoj kelių kartų.


Pageidaujamas išėjimas :

kažkas panašaus:

 +--------+--------------------------------+--------------------------------+ |User | C# | XML | +--------+-------+-------+---------+------+-------+-------+---------+------+ | | files | blank | comment | code | files | blank | comment | code | +--------+-------+-------+---------+------+-------+-------+---------+------+ | Foo | 12 | 75 | 148 | 2711 | 2 | 42 | 0 | 0 | | Bar | 167 | 1795 | 1425 | 2 | 16 | 0 | 512 | 1678 | +--------+-------+-------+---------+------+-------+-------+---------+------+ | Total | 179 | 1870 | 1573 | 2713 | 18 | 42 | 512 | 1678 | +--------+-------+-------+---------+------+-------+-------+---------+------+ 
16
25 авг. nustatė Willem Van Onsem 25 rug . 2014-08-25 14:18 '14, 14:18, 2014-08-25 14:18
ответ 1 atsakymas

Tai senas klausimas, bet jis pasiekė didžiausią, ir aš pradėjau žaisti su juo, bandydamas ją išspręsti. Tai nesukuria geros ataskaitos, tačiau ji pateikia duomenis į csv su trimis stulpeliais: file extension , email of committer , # lines this user has committed for this file type . Ji taip pat nesuteikia erdvių, komentarų, kodų eilutės kaip klokas. Jei turėsiu laiko, aš stengsiu, kad visa tai gerai veiktų, bet maniau, kad tai gali būti „pakankamai geras“ sprendimas arba bent jau pradėti dirbti teisinga kryptimi.

 #!/bin/bash LIST_OF_GIT_FILES=/tmp/gitfiles.txt GIT_BLAME_COMBINED_RESULTS=/tmp/git-blame.txt OUTPUT=/tmp/git-blame-output.txt SUMMARY=code-summary.csv rm $GIT_BLAME_COMBINED_RESULTS git ls-files > $LIST_OF_GIT_FILES while read p; do git blame -e -f $p >> $GIT_BLAME_COMBINED_RESULTS done < $LIST_OF_GIT_FILES awk -F ' ' '{print $2 "," $3}' $GIT_BLAME_COMBINED_RESULTS | tr -d '(<>' | awk -F ',' '{n = split($1, a, "."); print a[n] "," $2}' > $OUTPUT sort $OUTPUT | uniq -c | sort -n | awk -F ' ' '{print $2 "," $1}' | sort > $SUMMARY rm $GIT_BLAME_COMBINED_RESULTS rm $LIST_OF_GIT_FILES rm $OUTPUT 
2
09 июня '16 в 15:46 2016-06-09 15:46 Atsakymą pateikė Jarredas Olsonas birželio 09, 16 d. 15:46 2016-06-09 15:46

Žr. Kitus klausimus, susijusius su arba Užduoti klausimą