2010-06-21 9 views
5

Chciałbym wiedzieć na podstawie linii po linii, jaki odsetek kodu źródłowego w repozytorium subversion został zmodyfikowany między dwoma zatwierdzeniami.Czy Subversion może zgłosić procent zmiany kodu w czasie?

Na przykład. powiedzmy, że wersja 2100 ma 150 000 linii kodu, ale wersja 2600 zawiera 165 000 linii kodu, gdzie zmodyfikowano 8 000 linii oryginalnego 150 000 kodu. Zgłaszałbym to jako 142 000/165,000 = 86% to samo, 14% "nowe". Nie mam ochoty oddzielać Javadoc, XML, komentarzy ani testów jednostkowych ... po prostu zgrupować je wszystkie jako "źródło".

Każdy pomysł, jak to zrobić?

Odpowiedz

4

Po prostu zrobiłem to dzisiaj, korzystając z bezpłatnego narzędzia open source CLOC. Pozwala to na rekurencyjne porównywanie dwóch katalogów, więc wszystko, co musisz zrobić, to wypróbować obie wersje i uruchomić na nim program.

Daje również podsumowania dla poszczególnych języków i łącznie, na przykład:

Language      files   blank  comment   code 
-------------------------------------------------------------------------------- 
SUM: 
same       1556    0   76662   165546 
modified      137    0   159   570 
added       2   241   257   1250 
removed       30   591   906   2271 

Jak widać z „pustym” statystyki tam, to nie jest idealne, ale na pewno daje pole do gry.

2

Nie wiem o prosty sposób to zrobić, ale można parsować diffs generowane z plików źródłowych. Korzystając z opcji -r do zmieniania, możesz określić żądany zakres, tj. 2100: 2600. Używając ujednoliconego pliku różnicowego, liczba zmienionych (usuniętych lub edytowanych) linii prawdopodobnie byłaby liczbą linii w pliku różnic rozpoczynającym się od "-". Porównanie ich z liniami całkowitymi powinno przybliżyć ci odpowiedź. Jest to oczywiście tylko przybliżenie. Jeśli przez jakiś czas pracowałeś z łatkami, będziesz wiedział, że po prostu zmiana kolejności niektórych linii spowoduje wygenerowanie różnic pokazujących więcej linii niż można się spodziewać, więc weź liczbę zwróconą z przymrużeniem oka.

Wikipedia ma numer short description of the formats. Domyślne dla svn powinno być ujednolicone porównanie.

1

Można użyć diff, jak mówi wds, i wykonać kilka skryptów bash/awk/sed w celu uzyskania różnych raportów. Nie znam konkretnego narzędzia do tego, ale kodowanie byłoby prostym i zabawnym zadaniem.

1

SVN nie ma wbudowanych narzędzi do tego. Dostępne są komercyjne narzędzia, takie jak Fisheye, które mogą generować różne raporty dotyczące aktywności repozytorium, a także udostępniać funkcje przeglądania/wyszukiwania. Możesz na to patrzeć i zobaczyć, czy spełnia twoje potrzeby.

Inną opcją byłoby użycie "svn log" i "svn diff", w połączeniu z niektórymi skryptami, aby powiedzieć ci, czego szukasz.

3

Metryka, której szukasz (tak mi się wydaje) to code churn.

Na tym is a previous SO question!

+0

Rzeczywiście to, czego szukam, to specyficzny rodzaj rezygnacji z kodu. Poprzednie pytanie SO odwołuje się do StatSVN, który raportuje codzienne odświeżanie kodu na wykresie, ale wydaje się nie wyświetlać zbiorczego przerzucania kodu z jednego poziomu wersji na inny ... chyba że ma API, którego nie mogę znaleźć. Bardzo pomocna odpowiedź jednak ... i StatSVN wygląda bardzo fajnie. – HDave

+0

Twórca StatSVN jest bardzo pomocny. Spotkałem się z nim kilka razy. Poza tym - założę się, że możesz wyprowadzić algorytm z kodu statystycznego i napisać perl, żeby tak się stało. –

Powiązane problemy