Changelogs (a list of changes between two versions of an application) are a valuable way to watch the progress of development and easily spot major changes in the code.
Whenever I create a new tag for a release version, I add a changelog to the commit message that states what the differences are between this version and the previous one.
Usually, this means creating a seperate textfile in which I keep track of all the changes I made while working on a new version. As I commit more and more, the list grows and grows. But actually, there is no need for a separate textfile. Commit logs should be little changelogs between revisions, and all information that is needed for a changelog is already in the repository. Why not use these messages as a starting point for a release changelog?
So, before creating the tag for the new release, we want to get a list of all changes made from the last tag up to now.
If you know the name of your last tag, but not the revision, do a
svn log -q --stop-on-copy http://svn.example.org/svn/project/tags/tagname
The result will look like this:
r360 | peter | 2006-04-14 16:46:42 +0200 (Fri, 14 Apr 2006)
r360 means that the tag was created in revision 360 of the repository.
If you don’t know the name of the last tag,
svn log -q http://svn.example.org/svn/project/tags/
will give you a list of all revisions of all tags. The first one in the list is the newest one.
All changes between revision (in our case, 360) and now are new. To get the logmessages for them, issue
svn log -r 361:HEAD
(of course, you need to use your revision number, not 361).
This cummulated changelog gives a good overview of what happened between the last tag and now and can be reduced in detail to make a good changelog for your next release.
Of course, this only works if you exercise some discipline when creating tags for releases (like never creating a release tag by going back in the trunk to a previous revision and tagging it; if you did that, you would have to not use HEAD, but rather the revision number you tagged).