-
Improvement
-
Resolution: Unresolved
-
Major
-
None
-
Win7 x64
Jenkins v1.590.1
SVN plugin v1.48
Currently the SVN plugin only provides a single SVN revision number for any given URL (ignoring for the moment the fact you can provide multiple URLs in one configuration). Further, ad-hoc tests reveal that this one SVN revision number represents the "last changed revision" for the provided URL.
In certain cases it would be useful to also have access to the "latest" revision as well - ie: the revision of the repository after the most recent checkout or update operation.
I suspect such an enhancement could be made in a non-breaking way as well. For example, perhaps the SVN plugin could provide an option - either globally in the main Jenkins configuration area, or per-job in the SCM configuration section of each job - to have the SVN_REVISION Jenkins property defined by either the last changed revision or the latest revision, as desired. Alternatively, perhaps a new Jenkins property could be introduced, say SVN_LATEST_REVISION, which would contain the appropriate value.
NOTE: I suspect that this enhancement could be used as a workaround to some (but not all) of the workflows being discussed on JENKINS-1241. Also given the fact that either solution I suggested would be non-breaking it could conceivably be implemented and released on all currently supported versions of the plugin.
Potential Use Case #3:
Suppose again that you have a single SVN repository and you have a Jenkins configuration with 2 jobs, one dependent on the other, both stored in this single repository. Next lets suppose you have the Parameterized Trigger Plugin installed and configured so that downstream job A triggers upstream job B, passing along the Subversion revision number - to ensure the triggered instance of Job B uses the same revision as job A.
Now, lets suppose you are working on a change that requires modification to both module A and B. Since both modules are in independent folders (albeit in the same repo) the commits to module A and B will generate two unique revision numbers (say revision 123 and 124 respectively).
So when job A triggers (ie: via an SCM polling operation) it will first do an update to module A and set the SVN revision number. Now because the Jenkins plugin uses the last change revision it will set the revision of this execution to 123. Once complete job A will trigger job B passing revision 123 - and job B will fail... because it needs revision 124 to be successful.
In this case, if Jenkins were to use the "latest revision" rather than the "last change revision", then job A would have performed its update and pulled down the latest version of itself (ie: v123) but the latest revision would actually be v124 (assuming that both changes were committed before job A started it's build - which is often the case so long as you have a reasonable "quiet period" configured for the job). Then, if this more appropriate version number were propagated to job B then it would have succeeded as expected.