47 TList* TFileStager::GetStaged(TCollection *pathlist)
50 Error(
"GetStaged",
"list of pathnames was not specified!");
54 TList* stagedlist =
new TList();
57 Bool_t local = (!strcmp(GetName(),
"local")) ? kTRUE : kFALSE;
59 TString pn = TFileStager::GetPathName(o);
61 Warning(
"GetStaged",
"object is of unexpected type %s - ignoring", o->ClassName());
62 }
else if (local || IsStaged(pn))
63 stagedlist->Add(
new TObjString(pn));
67 stagedlist->SetOwner(kTRUE);
68 Info(
"GetStaged",
"%d files staged", stagedlist->GetSize());
76 Bool_t TFileStager::Stage(TCollection *pathlist, Option_t *opt)
80 Bool_t success = kFALSE;
83 TString pn = TFileStager::GetPathName(o);
85 Warning(
"Stage",
"found object of unexpected type %s - ignoring",
91 success &= Stage(pn, opt);
102 TFileStager *TFileStager::Open(
const char *stager)
108 ::Error(
"TFileStager::Open",
"stager name missing: do nothing");
112 if (!gSystem->IsPathLocal(stager) &&
113 (h = gROOT->GetPluginManager()->FindHandler(
"TFileStager", stager))) {
114 if (h->LoadPlugin() == -1)
116 s = (TFileStager *) h->ExecPlugin(1, stager);
118 s =
new TFileStager(
"local");
126 Bool_t TFileStager::IsStaged(
const char *f)
130 u.SetOptions(
"filetype=raw");
131 TFile *ff = TFile::Open(u.GetUrl());
133 if (!ff || ff->IsZombie()) {
147 Int_t TFileStager::Locate(
const char *u, TString &f)
159 Int_t TFileStager::LocateCollection(TFileCollection *fc, Bool_t)
163 TIter it(fc->GetList());
166 while ((fi = dynamic_cast<TFileInfo *>(it.Next()))) {
167 const char *ourl = fi->GetCurrentUrl()->GetUrl();
170 if (Locate(ourl, endp) == 0) {
171 fi->AddUrl(endp.Data(), kTRUE);
172 fi->SetBit(TFileInfo::kStaged);
176 fi->ResetBit(TFileInfo::kStaged);
189 TString TFileStager::GetPathName(TObject *o)
192 TString cn(o->ClassName());
194 pathname = ((TUrl*)o)->GetUrl();
195 }
else if (cn ==
"TObjString") {
196 pathname = ((TObjString*)o)->GetName();
197 }
else if (cn ==
"TFileInfo") {
198 TFileInfo *fi = (TFileInfo *)o;
199 pathname = (fi->GetCurrentUrl()) ? fi->GetCurrentUrl()->GetUrl() :
"";
200 if (fi->GetCurrentUrl()) {
201 if (strlen(fi->GetCurrentUrl()->GetAnchor()) > 0) {
202 TUrl url(*(fi->GetCurrentUrl()));
204 pathname = url.GetUrl();
207 pathname = fi->GetCurrentUrl()->GetUrl();