Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a list of all Subversion commit author usernames?

I'm looking for an efficient way to get the list of unique commit authors for an SVN repository as a whole, or for a given resource path. I haven't been able to find an SVN command specifically for this (and don't expect one) but I'm hoping there may be a better way that what I've tried so far in Terminal (on OS X):

svn log --quiet | grep "^r" | awk '{print $3}'  svn log --quiet --xml | grep author | sed -E "s:</?author>::g" 

Either of these will give me one author name per line, but they both require filtering out a fair amount of extra information. They also don't handle duplicates of the same author name, so for lots of commits by few authors, there's tons of redundancy flowing over the wire. More often than not I just want to see the unique author usernames. (It actually might be handy to infer the commit count for each author on occasion, but even in these cases it would be better if the aggregated data were sent across instead.)

I'm generally working with client-only access, so svnadmin commands are less useful, but if necessary, I might be able to ask a special favor of the repository admin if strictly necessary or much more efficient. The repositories I'm working with have tens of thousands of commits and many active users, and I don't want to inconvenience anyone.

like image 922
Quinn Taylor Avatar asked Mar 22 '10 19:03

Quinn Taylor


People also ask

How do I see all commits in svn?

See the log command in the SVN Book. Show activity on this post. If you're using TortoiseSVN (on windows), then you can use the "Show log" function to see a list of all commits. In this dialog you can also open some statistics/graphs such as "number of commits per week" (for each user).

How do I view svn logs?

Examples. You can see the log messages for all the paths that changed in your working copy by running svn log from the top: $ svn log ------------------------------------------------------------------------ r20 | harry | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line Tweak.

How can I see last commit in svn?

To find information about the history of a file or directory, use the svn log command. svn log will provide you with a record of who made changes to a file or directory, at what revision it changed, the time and date of that revision, and, if it was provided, the log message that accompanied the commit.


1 Answers

To filter out duplicates, take your output and pipe through: sort | uniq. Thus:

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

I woud not be surprised if this is the way to do what you ask. Unix tools often expect the user to do fancy processing and analysis with other tools.

P.S. Come to think of it, you can merge the grep and awk...

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

P.P.S. Per Kevin Reid...

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

P3.S. Per kan, using the vertical bars instead of spaces as field separators, to properly handle names with spaces (also updated the Python examples)...

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

For more efficient, you could do a Perl one-liner. I don't know Perl that well, so I'd wind up doing it in 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) 

Or, if you wanted counts:

#!/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]) 

Then you'd run:

svn log --quiet | ./authorfilter.py 
like image 119
Mike DeSimone Avatar answered Sep 28 '22 01:09

Mike DeSimone