std::unique_ptr<fs::LocalHandle> Arbiter::getLocalHandle( const std::string path, const Endpoint& tempEndpoint) const { std::unique_ptr<fs::LocalHandle> localHandle; if (isRemote(path)) { if (tempEndpoint.isRemote()) { throw ArbiterError("Temporary endpoint must be local."); } std::string name(path); std::replace(name.begin(), name.end(), '/', '-'); std::replace(name.begin(), name.end(), '\\', '-'); std::replace(name.begin(), name.end(), ':', '_'); tempEndpoint.put(name, getBinary(path)); localHandle.reset( new fs::LocalHandle(tempEndpoint.root() + name, true)); } else { localHandle.reset( new fs::LocalHandle(fs::expandTilde(stripType(path)), false)); } return localHandle; }