I'm currently evaluating TC as a replacement for CruiseControl.NET. I have two or three branches that I make builds from, that are obviously all in the same directory.
One of the things I did with CC was have the build number be the 'last committed' SVN revision number. This effectively isolates the branches, so if :
- Revision 5440 is in branches/2.0
- Revision 5441 is in trunk
- Revision 5442 is in trunk
Then when I do a build of the 2.0 branch, instead of it saying revision 5442, it says 5440.
With CC.NET, this was accomplished using the svnRevisionLabeller plugin: http://code.google.com/p/svnrevisionlabeller/
We are using revision numbers for the build because it integrates nicely with the rest of our practices: the revision number is the last part of all version numbers; seeing a comment in a ticket that says "fixed in trunk revision 5441" makes it clear to QA that they need to use build 5441 or higher to test that fix; Seeing a version number makes it perfectly clear which revision source code was used for the build (without an extra lookup step).
I initially used just the highest number like TC does by default, but this caused a lot of confusion because someone would see build "debug r5442" of 2.0, and then wonder why there was no rev 5442 in 2.0, or even more often, get a debug 126.96.36.19940 right after 5440 was committed, and then more fixes would go to trunk, and then there'd be a nightly 188.8.131.5242 release build, and QA would freak out and wonder what the difference was between 184.108.40.20640 and 220.127.116.1142 (you have to look at revision history to know). When the release build is just 18.104.22.16840 (even though the svn revision is actually 5442) it just makes those problems go away.
I tried putting in the exact path for each project as my svn repository URL, but it's still using the highest global revision number.
Is it possible to use the highest committed revision number as the build number in TC? Even being able to run a custom command would work.