Piston 1.2.0 is here. From the ChangeLog:
New status subcommand. Shows M if locally or remotely modified.
Applies to one, many, all folders. This subcommand requires the
use of a Subversion 1.2.0 client. Thanks to Chris W. for the
inspiration. His Rake tasks are available at
Minor patch by Miguel Ibero Carreras to make Subversion always use
the C locale, instead of the current one. This allows Piston to be
used with internationalized versions of Subversion. David Bittencourt
later reported the same problem. Thanks!
Better handle how update finds it’s latest local revision to prevent
conflicts. If you had never locally changed your vendor repositories,
this fix will change nothing for you. This helps prevent local
conflicts if you had ever applied a local patch.
$ gem install piston
Successfully installed piston, version 1.2.0
(Allow some time for the RubyForge file release system to propagate the
There is no need to install “Piston”:http://piston.rubyforge.org/ on
your server. A local installation on your development machine is all
that you need to administer the remote code.
It is imperative that you locally update your piston:local-revision
property manually, just this once. Prior to 1.2.0, Piston would
almost never update the piston:local-revision property, meaning it
would always think there were local changes. With the new update
implementation, Piston would try to merge changes that had already
occured, causing many conflicts. You need to reset the value of
piston:local-revision to the revision where you last did a piston
update or import.
An example is in order.
$ svn propget piston:local-revision vendor\rails
$ svn log -r head:1 vendor/rails
r31 | francois | 2006-11-17 10:05:54 -0500 (ven., 17 nov. 2006) | 1 line
Updated to Rails r4500
r30 | francois | 2006-11-17 10:03:48 -0500 (ven., 17 nov. 2006) | 1 line
Import Rails r4393
$ svn propset piston:local-revision 31 vendor\rails
property ‘piston:local-revision’ set on ‘vendor\rails’
$ svn commit --quiet --message “Updated piston:local-revision to 31,
per ChangeLog instructions”
Visit http://piston.rubyforge.org/ for all the details.
== What is Piston ?
Piston is a utility that eases vendor branch management. This is
similar to svn:externals, except you have a local copy of the files,
which you can modify at will. As long as the changes are mergeable,
you should have no problems.
Piston has a similar purpose than svnmerge.py which you can find in
the contrib/client-side folder of the main Subversion. The main
difference is that Piston is designed to work with remote
repositories. You should also investigate if SVK would be a better fit
From Wikipedia’s 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 Piston, we retain the second meaning, to exert a force on a fluid
inside the cylinder. In our case, the fluid is the code copied from
the remote repository.