--- src/GetJob.cc 23 Apr 2007 07:11:45 -0000 1.28 +++ src/GetJob.cc 28 Dec 2007 11:12:35 -0000 @@ -99,33 +99,44 @@ bool GetJob::IsRemoteNonURL(const Parsed // store & put || !store & get return (!url.proto && (mode==FA::STORE ^ !reverse)); } +bool GetJob::IsLocalNonURL(const ParsedURL &url,FA::open_mode mode) +{ + // store & get || !store & put + return (!url.proto && (mode==FA::STORE ^ reverse)); +} bool GetJob::IsLocal(const ParsedURL &url) { return !url.proto || !strcasecmp(url.proto,"file"); } +// create copy peer from a cloned session FileCopyPeer *GetJob::CreateCopyPeer(FileAccess *session,const char *path,FA::open_mode mode) { ParsedURL url(path,true); if(IsRemoteNonURL(url,mode)) return new FileCopyPeerFA(session,path,mode); Delete(session); // delete cloned session. - return CreateCopyPeer(url,mode); + return CreateCopyPeer(url,path,mode); } +// create copy peer using a session reference FileCopyPeer *GetJob::CreateCopyPeer(const FileAccessRef& session,const char *path,FA::open_mode mode) { ParsedURL url(path,true); if(IsRemoteNonURL(url,mode)) return new FileCopyPeerFA(session,path,mode); - return CreateCopyPeer(url,mode); + return CreateCopyPeer(url,path,mode); } -FileCopyPeer *GetJob::CreateCopyPeer(const ParsedURL &url,FA::open_mode mode) +FileCopyPeer *GetJob::CreateCopyPeer(const ParsedURL &url,const char *path,FA::open_mode mode) { + if(IsLocalNonURL(url,mode)) + return CreateCopyPeer(path,mode); if(IsLocal(url)) - return (mode==FA::STORE) - ? DstLocal(url.path) - : SrcLocal(url.path); + return CreateCopyPeer(url.path,mode); return new FileCopyPeerFA(&url,mode); } +FileCopyPeer *GetJob::CreateCopyPeer(const char *path,FA::open_mode mode) +{ + return mode==FA::STORE ? DstLocal(path) : SrcLocal(path); +} void GetJob::NextFile() { --- src/GetJob.h 23 Apr 2007 07:11:46 -0000 1.15 +++ src/GetJob.h 28 Dec 2007 11:10:07 -0000 @@ -29,8 +29,10 @@ class GetJob : public CopyJobEnv { FileCopyPeer *SrcLocal(const char *src); FileCopyPeer *DstLocal(const char *dst); - FileCopyPeer *CreateCopyPeer(const ParsedURL &url,FA::open_mode mode); + FileCopyPeer *CreateCopyPeer(const ParsedURL &url,const char *path,FA::open_mode mode); + FileCopyPeer *CreateCopyPeer(const char *path,FA::open_mode mode); bool IsRemoteNonURL(const ParsedURL &url,FA::open_mode mode); + bool IsLocalNonURL(const ParsedURL &url,FA::open_mode mode); static bool IsLocal(const ParsedURL &url); protected: