Reputation: 996
I want to be able to search within the commit logs of svn. I know you can do that on tortoise, but couldn't find a way using the command line.
We are moving to a two-tiered repository approach, so that the stable branch will only get stories fully completed and tested. To achieve that, we would need a way to search within the commit messages for the story code (eg:#s1322) and get a list of the revisions to be used in a subsequent merge command.
Ex: searchsvnapp http://[repo location root] #s1322
result: 4233,4249,4313
Upvotes: 7
Views: 13394
Reputation: 97282
For Subversion 1.8 The Natural Way (tm) is to use new options --search
+ --search-and
for filtering logs
svn log --search #s1322 URL
And, BTW, each story can be separated into own branch - in this case detection of revision-range is not needed at all and you just merge branch
Upvotes: 9
Reputation: 996
I ended up developing my own tool, using svnkit.
Further below is the main bit of the code that searches on the logs. I had to use the "SVNWCUtil.createDefaultAuthenticationManager" using a temporary folder so that it wouldn't mess with the svn configuration of a cmd line svn tool that I have in the same box that should run the tool. If there is enough interest I can make the whole webtool opensource. Please let me know (voting on the answer maybe?) if you are interested.
public Collection<SVNLogEntry> searchSVN(String url, String name,
String password, long startRevision, long endRevision,
String searchTerm, String svnUser) throws Exception {
DAVRepositoryFactory.setup();
SVNRepository repository = null;
repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
// changed the config folder to avoid conflicting with anthill svn use
ISVNAuthenticationManager authManager = SVNWCUtil
.createDefaultAuthenticationManager(new File("/tmp"), name,
password, false);
repository.setAuthenticationManager(authManager);
Collection<SVNLogEntry> resultLogEntries = new LinkedList();
Collection<SVNLogEntry> logEntries = repository.log(
new String[] { "" }, null, startRevision, endRevision, true,
true);
for (SVNLogEntry svnLogEntry : logEntries) {
if (svnLogEntry.getMessage().indexOf(searchTerm) > -1) {
if ((svnUser == null || svnUser.equals(""))
|| svnLogEntry.getAuthor().equals(svnUser)) {
resultLogEntries.add(svnLogEntry);
}
}
}
return resultLogEntries;
}
Upvotes: 0
Reputation: 11075
First, make sure you have the Subversion command line (collabnet is the distro I use) that matches your Tortoise 'Subversion' release. Check in the Tortoise about box to find the Subversion revision. Each subversion tool has its own copy of the Subversion client, and they're not always interchangeable. Major releases will break the compatibility.
From the command line:
svn log > svn.out
Then pop it up in your favourite editor!
Upvotes: 1
Reputation: 10687
Windows version of the_void's answer:
svn log | find "something"
Upvotes: 3