Subversion: генерировать полный diff из каждой регистрации, включающей имя пользователя - PullRequest
0 голосов
/ 22 апреля 2009

У меня есть профессор, который не очень хорошо понимает контроль источников. Он попросил нас использовать комментарии, чтобы определить, кто написал каждую строку кода. Большая часть класса использует электронную почту в качестве контроля версий и Visual C ++ в качестве языка, который приводит к путанице комментариев, вставок и сгенерированного кода. Моя группа использует Subversion и C #, и я бы предпочел получать историю из репозитория, а не загромождать код комментариями в каждой строке.

Мне нужен способ генерирования просматриваемой истории всех проверок, которая показывает, какой источник изменил каждый пользователь.

Такой формат был бы хорош

Andy
/trunk/doc/file.txt (57%)
/trunk/project/app.h (100%)

Brian
/trunk/doc/file.txt (43%)
/trunk/project/app.cpp (60%)

Jeff
/trunk/project/app.cpp (40%)

Как бы я поступил по этому поводу? Достаточно ли у BASH мощности для этого или я должен использовать python? (Я бы сгенерировал diff в системе linux)

Ответы [ 3 ]

5 голосов
/ 22 апреля 2009

Мне кажется, вы хотите что-то вроде svn blame.

Возможно, вам понадобится некоторая постобработка, если вам нужны проценты. И вам также придется беспокоиться о том, сколько модификаций будет считаться до последнего человека, который коснулся линии.

1 голос
/ 22 апреля 2009

Это не готовое решение, но я оставляю его вам:)

Для каждого файла, то есть с чем-то похожим на:

for i in `ls -1`; do svn blame...; done

пробег:

svn blame full_svn_path_to_file |tr -s '\040' |tr '\040' ';'|cut -d \; -f 3|sort -u

это дает вам уникальный список пользователей, которые изменяют файл full_svn_path_to_file.

Используя этот список и команды wc и for, вы можете попытаться вычислить проценты ...

Удачи!

1 голос
/ 22 апреля 2009

Чтобы ответить на вторую часть вашего вопроса, если вы знаете Python (или аналогичный), вы найдете библиотеки для обработки интеграции SVN. Это будет проще, чем разговаривать с SVN через bash и пытаться запросить вывод из исполняемых файлов SVN.

например. см Пысвн

...