Well let me give a shot. You can parse the SVN update command output and generate copy instructions that only copy the files that were changed?
http://svnbook.red-bean.com/en/1.1/ch03s05.html
Let's examine the output of svn update
a bit more. When the server sends
changes to your working copy, a letter
code is displayed next to each item to
let you know what actions Subversion
performed to bring your working copy
up-to-date:
U foo
File foo was Updated (received
changes from the server).
A foo
File or directory foo was Added
to your working copy.
D foo
File or directory foo was
Deleted from your working copy.
R foo
File or directory foo was
Replaced in your working copy; that
is, foo was deleted, and a new item
with the same name was added. While
they may have the same name, the
repository considers them to be
distinct objects with distinct
histories.
G foo
File foo received new changes
from the repository, but your local
copy of the file had your
modifications. Either the changes did
not intersect, or the changes were
exactly the same as your local
modifications, so Subversion has
successfully merGed the repository's
changes into the file without a
problem.
C foo
File foo received Conflicting
changes from the server. The changes
from the server directly overlap your
own changes to the file. No need to
panic, though. This overlap needs to
be resolved by a human (you); we
discuss this situation later in this
chapter.
Or if you prefer a semi-manual solution you can use a diff tool like WinMerge or Araxis Merge to sync both directories.
EDIT:
I don't think "svn update" will work exactly, but what I settled on was:
- svn checkout of the current (old) prod revision
- svn switch to the revision that is ready for prod (new)
I wrote a script to capture the output of the "switch". It translates U and A operations to "adds" to a zip archive. It translates D operations to delete commands to be executed on the production server. On the production server, we just need to unzip the archive and run the delete commands.