Piston 1.3.0 is out the door.  There are two significant changes:
* Piston status shows the revision number of locked repositories.  Thanks to  Chris Wanstrath <http://errtheblog.com/>.
* New piston switch subcommand to switch repository locations.  Thanks to  Greg Spurrier for the prompt which resulted in finally implementing this.
Use piston switch like this:
 $ piston switch http://dev.rubyonrails.org/svn/rails/tags/rel_1-2-1vendor\rails Processing 'vendor\rails'...   Fetching remote repository's latest revision and UUID   Restoring remote repository to known state at r6010   Updating remote repository tohttp://dev.rubyonrails.org/svn/rails/tags/rel_1-2-1@5990   Processing adds/deletes   Removing temporary files / folders   Updating Piston properties   Updated to r5990 (663 changes)
= What is it ?
Piston is a utility that eases vendor branch management. This is similarto <tt>svn:externals</tt>, except you have a local copy ofthe files, which you can modify at will.  As long as the changes aremergeable, you should have no problems.
This tool has a similar purpose than svnmerge.py which you can find in thecontrib/client-side folder of the main Subversion repository athttp://svn.collab.net/repos/svn/trunk/contrib/client-side/svnmerge.py.The main difference is that Piston is designed to work with remoterepositories.  Another tool you might want to look at, SVK, situated athttp://svk.elixus.org.
From Wikipedia's Piston page (http://en.wikipedia.org/wiki/Piston):  In general, a piston is a sliding plug that fits closely inside the bore  of a cylinder.
  Its purpose is either to change the volume enclosed by the cylinder, or  to exert a force on a fluid inside the cylinder.
For this utility, I retain the second meaning, "to exert a force on a fluidinside the cylinder."  Piston forces the content of a remote repositorylocation back into our own.
= Installation
Nothing could be simpler:
 $ gem install --include-dependencies piston-- François Beausoleilhttp://blog.teksol.info/http://piston.rubyforge.org/