Upload multiple files in a single rsync command.

As with gets, this makes uploads 3x faster at least.

multi_put() is now renamed simply put(), and the old single-path put() is no more.

All tests pass (including the rsync ones), plus I've tried this out on 1000 files in our real repo.
Yes. Paths in the content store are logical paths, not filesystem paths. A
content store implementation is free to interpret them as it wishes. For
example, a RESTful content store would turn them into URLs, in which case
they would always use forward slashes, not the filesystem separator.

On Mon, Dec 29, 2014 at 5:04 PM, Jeffrey Jenkins <notifications@github.com>
wrote:

> In src/python/gitshed/content_store.py
> <https://github.com/foursquare/gitshed/pull/7#discussion-diff-22335650>:
>
> >      pool = ThreadPool(self._put_concurrency)
> > -    def do_put(src_path):
> > -      ret = self.put(src_path)
> > -      progress.increment()
> > -      return ret
> > +    def do_put(chunk):
> > +      cs_dir, work = chunk
> > +      n = sum(cardinality['{0}/{1}'.format(cs_dir, cs_basename)] for (_, cs_basename) in work)
>
> There are a few instances where you do this instead of os.path.join. Is
> there a reason?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/foursquare/gitshed/pull/7/files#r22335650>.
>