Как добраться, список всей Подверсии фиксируют имена пользователей автора?

Я ищу эффективный способ получить список уникальных авторов фиксации для репозитория SVN в целом, или для данного пути ресурса. Я не смог найти команду SVN специально для этого (и не ожидайте один), но я надеюсь, что может быть лучший путь это, что я попробовал до сих пор в Терминале (на OS X):

svn log --quiet | grep "^r" | awk '{print $3}'

svn log --quiet --xml | grep author | sed -E "s:</?author>::g"

Любой из них даст мне одно имя автора на строку, но они оба требуют отфильтровывания изрядного объема дополнительной информации. Они также не обрабатывают дубликаты того же имени автора, таким образом, для большого количества фиксаций немногими авторами, существуют тонны дублирования, текущего по проводу. Как правило, я просто хочу видеть уникальные имена пользователей автора. (На самом деле могло бы быть удобно вывести счет фиксации для каждого автора при случае, но даже в этих случаях было бы лучше, если бы агрегированные данные были отправлены через вместо этого.)

Я обычно работаю с доступом только для клиента, таким образом, svnadmin команды менее полезны, но при необходимости, я смог просить о специальном одолжении администратора репозитория если строго необходимый или намного более эффективный. Репозитории, с которыми я работаю, имеют десятки тысяч фиксаций и многих активных пользователей, и я не хочу причинять беспокойство любому.

72
задан Quinn Taylor 22 March 2010 в 19:07
поделиться

1 ответ

Чтобы отфильтровать дубликаты, возьмите ваш вывод и передайте через: sort | uniq. Таким образом:

svn log --quiet | grep "^r" | awk '{print $3}' | sort | uniq

Я не удивлюсь, если это и есть способ сделать то, о чем вы спрашиваете. Инструменты Unix часто ожидают, что пользователь будет выполнять причудливую обработку и анализ с помощью других инструментов.

P.S. Если подумать, вы можете объединить grep и awk...

svn log --quiet | awk '/^r/ {print $3}' | sort | uniq

P.P.S. Пер. Кевина Рида...

svn log --quiet | awk '/^r/ {print $3}' | sort -u

P3.S. Пер. kan, использование вертикальных полос вместо пробелов в качестве разделителей полей, чтобы правильно обрабатывать имена с пробелами (также обновлены примеры Python)...

svn log --quiet | awk -F ' \\\\|' '/^r/ {print $2}' | sort -u

Для большей эффективности можно сделать однострочный пример на Perl. Я не очень хорошо знаю Perl, поэтому я бы сделал это на Python:

#!/usr/bin/env python
import sys
authors = set()
for line in sys.stdin:
    if line[0] == 'r':
        authors.add(line.split('|')[1].strip())
for author in sorted(authors):
    print(author)

Или, если вам нужны подсчеты:

#!/usr/bin/env python
from __future__ import print_function # Python 2.6/2.7
import sys
authors = {}
for line in sys.stdin:
    if line[0] != 'r':
        continue
    author = line.split('|')[1].strip()
    authors.setdefault(author, 0)
    authors[author] += 1
for author in sorted(authors):
    print(author, authors[author])

Тогда вы выполните:

svn log --quiet | ./authorfilter.py
87
ответ дан 24 November 2019 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: