I ended up writing a 130-line Python script to:
- Loop through some details I've hard-coded about items I'd like to deploy
- Look for them on my hard drive (where Eclipse stores copies of files)
- Zip up copies of them in an "uploadme.zip" file with a "package.xml" included
- Generate a string representing the base64 encoding of "uploadme.zip"
- Using 3 strings of XML representing minimalist SOAP envelopes the Metadata API, 1) log into my target Salesforce, 2) push the string representing "uploadme.zip" to a "deploy" API call specifying which tests to run, and 3) check how things went with a "checkDeployStatus" API call, printing the results to standard output.
Including firing up an IDE, typing in the things I want to deploy, & typing in my username/password, & tearing down (backspacing over my username & password when done and saving the script again), I'd say it saves about 10 minutes of my time over deploying via Eclipse with "Run All Tests" and about 2-8 minutes of my time over deploying with Change Sets & the Salesforce web user interface.
The efficiency really increases if I'm debugging a failing deploy and can leave the list of "things to deploy" alone between runs.