11 #ifndef AVAILABLESOFTWARE_C 12 #define AVAILABLESOFTWARE_C 17 # include <TObjArray.h> 19 # include <TPRegexp.h> 20 # include <TObjString.h> 52 if (l.GetEntries() > 0)
return &l;
53 TString c(
"wget -q http://alimonitor.cern.ch/packages/ -O - | " 54 "sed -n -e '/<tr class=table_row/,/<\\/tr>/ p' | " 55 "sed -n -e '/<td/,/<\\/td>/ p' | " 56 "sed -e '/\\/*td.*>/d' | " 57 "sed -e 's/<a.*>\\(.*\\)<\\/a>/\\1/'");
59 TObjArray* tokens = values.Tokenize(
"\n");
60 Int_t n = tokens->GetEntries();
61 std::ofstream out(
"values");
62 out << values << std::endl;
66 for (
Int_t i = 0; i < n; i += 1) {
67 TObject* opack = tokens->At(i+0);
73 TObjString* odeps =
static_cast<TObjString*
>(tokens->At(i+1));
74 TObjString* oblank=
static_cast<TObjString*
>(tokens->At(i+2));
75 TObjString* oavail=
static_cast<TObjString*
>(tokens->At(i+3));
76 TObjString* odate =
static_cast<TObjString*
>(tokens->At(i+4));
81 ::Warning(
"",
"blanck is not blanck: \"%s\"", oblank->GetName());
85 if (!avail.EqualTo(
"Available"))
continue;
89 pack.ReplaceAll(
"VO_ALICE@",
"");
93 deps.ReplaceAll(
"VO_ALICE@",
"");
94 if (!(pack.BeginsWith(
"AliPhysics") ||
95 pack.BeginsWith(
"AliRoot") ||
96 pack.BeginsWith(
"ROOT")))
continue;
97 if (pack.Contains(
".post_install"))
continue;
99 l.Add(
new TNamed(pack, deps));
126 Bool_t list = (query.Contains(
"list", TString::kIgnoreCase) ||
127 query.Contains(
"help", TString::kIgnoreCase));
128 Bool_t last = (query.Contains(
"last", TString::kIgnoreCase) ||
129 query.Contains(
"newest", TString::kIgnoreCase));
130 Bool_t nots = (query.Contains(
"nonspecial", TString::kIgnoreCase) ||
131 query.Contains(
"regular", TString::kIgnoreCase) ||
132 query.Contains(
"normal", TString::kIgnoreCase) ||
133 query.Contains(
"standard", TString::kIgnoreCase));
134 Bool_t rele = (query.Contains(
"release", TString::kIgnoreCase));
135 Bool_t anat = (query.Contains(
"analysis", TString::kIgnoreCase));
136 if (!query.IsNull() && (!list && !last && !nots && !rele && !anat)) {
137 Info(
"GetPackage",
"%s=%s already specified, leaving that",
138 name.Data(), query.Data());
139 TObject* o = l->FindObject(Form(
"%s::%s",name.Data(),query.Data()));
144 relPat.Form(
"%s::v[0-9]-[0-9]{2}+-(Rev-|)[0-9]{2}", name.Data());
145 if (name.Contains(
"AliPhysics")) relPat.Append(
"-[0-9]{2}");
146 if (name.Contains(
"ROOT")) relPat.Append(
"(-alice[0-9]*|)");
147 relPat.Append(
"(-[0-9]+|)$");
148 TPRegexp pRele(relPat);
149 TPRegexp pAnat(Form(
"%s::vAN-[0-9]{8}(-[0-9]+|)$", name.Data()));
150 TString vers(Form(
"%s::%s", name.Data(), query.Data()));
154 if (nots) qual.Append(
"regular ");
155 if (rele) qual.Append(
"release ");
156 if (anat) qual.Append(
"analysis ");
158 Printf(
"Available %sversion of %s", qual.Data(), name.Data());
160 TIter prev(l, kIterBackward);
164 while ((o = prev())) {
166 if (!n.BeginsWith(name)) {
175 Bool_t isRele = pRele.MatchB(n);
176 Bool_t isAnat = pAnat.MatchB(n);
177 Bool_t isSpec = !(isRele || isAnat);
178 if (nots && isSpec)
continue;
179 if (anat && !isAnat)
continue;
180 if (rele && !isRele)
continue;
182 n.ReplaceAll(Form(
"%s::", name.Data()),
"");
183 Printf(
"\t%s", n.Data());
189 if (!vers.EqualTo(n))
continue;
194 Warning(
"GetPackage",
"No match found for %s", vers.Data());
204 ret = pack->GetName();
205 ret.ReplaceAll(Form(
"%s::", name.Data()),
"");
220 if (!pack)
return false;
221 TString deps(pack->GetTitle());
225 while ((s = static_cast<TObjString*>(next()))) {
227 if (t.BeginsWith(which)) {
229 ret.ReplaceAll(Form(
"%s::",which.Data()),
"");
235 return !(ret.IsNull());
242 Bool_t show = (aliphysics.Contains(
"list", TString::kIgnoreCase) ||
243 aliroot.Contains(
"list", TString::kIgnoreCase) ||
244 root.Contains(
"list", TString::kIgnoreCase));
247 GetVer(foundPhysics,
"AliPhysics", aliphysics);
248 GetDep(foundPhysics,
"AliRoot", aliroot);
251 GetVer(foundAliRoot,
"AliRoot", aliroot);
252 GetDep(foundAliRoot,
"ROOT", root);
255 GetVer(foundRoot,
"ROOT", root);
257 if (show)
return false;
259 if (aliphysics.IsNull() ||
262 Warning(
"Check",
"Missing packages (%s,%s,%s)",
263 aliphysics.Data(), aliroot.Data(), root.Data());
272 TString aliphysics(Form(
"list,%s", phy.Data()));
273 TString aliroot (Form(
"list,%s", ali.Data()));
274 TString root (Form(
"list,%s", roo.Data()));
275 Printf(
"Checking with AliPhysics=%s AliROOT=%s ROOT=%s",
276 phy.Data(), ali.Data(), roo.Data());
279 aliphysics = Form(
"last,%s",phy.Data());
280 aliroot = Form(
"last,%s",ali.Data());
281 root = Form(
"last,%s",roo.Data());
282 if (AvailableSoftware::Check(aliphysics,aliroot, root))
283 Printf(
"Got AliPhysics=%s AliROOT=%s ROOT=%s",
284 aliphysics.Data(), aliroot.Data(), root.Data());
289 Printf(
"All available");
292 Printf(
"All regular");
295 Printf(
"All releases");
298 Printf(
"All analysis tags");
static const char * GetField(TObject *o)
static void Test(const TString &phy, const TString &ali=TString(), const TString &roo=TString())
static Bool_t GetVer(TObject *pack, const TString &name, TString &ret)
static Bool_t Check(TString &aliphysics, TString &aliroot, TString &root)
static Bool_t GetDep(TObject *pack, const TString &which, TString &ret)
static TObject * GetPackage(const TString &name, const TString &query)