1. ホーム
  2. svn

[解決済み] Subversion のコミット作者のユーザ名の一覧を取得するには?

2023-05-03 08:30:46

質問

私は、SVN リポジトリ全体、または与えられたリソースパスのためのユニークなコミット作者のリストを取得する効率的な方法を探しています。私はこのために特別に SVN コマンドを見つけることができませんでした (そして、それを期待していません)。しかし、私がターミナル (OS X) でこれまで試したものより良い方法があるかもしれないと期待しています。

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

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

これらのどちらかは一行につき一人の著者名を与えてくれますが、どちらもかなりの量の余分な情報をフィルタリングする必要があります。また、同じ著者名の重複を扱わないので、少数の著者による多くのコミットに対して、大量の冗長性がワイヤー上を流れています。私は多くの場合、ユニークな作者のユーザ名を見たいだけなのです。(実際には があるかもしれません。 を推測するのは便利ですが、このような場合であっても、代わりに集計されたデータが送信されればよりよいでしょう)。

私は通常、クライアントのみのアクセスで作業しているので svnadmin コマンドはあまり役に立ちませんが、必要であれば、厳密に必要であればリポジトリ管理者に特別なお願いをすることができるかもしれませんし、はるかに効率的です。私が作業しているリポジトリには何万ものコミットと多くのアクティブ ユーザーがおり、誰にも迷惑をかけたくありません。

どのように解決するのですか?

重複をフィルタリングするために、出力を取ってパイプに通す。 sort | uniq . このように

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

あなたが尋ねたことを行うための方法であるとしても、私は驚かないでしょう。 Unixのツールはしばしば、ユーザーが他のツールで派手な処理や分析を行うことを期待します。

P.S. そういえば、マージして grepawk ...

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

P.P.S. Kevin Reid につきまして...

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

P 3 .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