00001
00002
00003
00004
00005
00006
00007
00008
00013 #include <zypp/parser/yum/YUMPatchParser.h>
00014 #include <zypp/parser/yum/YUMPrimaryParser.h>
00015 #include <istream>
00016 #include <string>
00017 #include "zypp/parser/xml_parser_assert.h"
00018 #include <libxml/xmlreader.h>
00019 #include <libxml/tree.h>
00020 #include <zypp/parser/LibXMLHelper.h>
00021 #include <zypp/base/Logger.h>
00022 #include <zypp/parser/yum/schemanames.h>
00023 #include <zypp/ZYppFactory.h>
00024
00025 using namespace std;
00026 namespace zypp
00027 {
00028 namespace parser
00029 {
00030 namespace yum
00031 {
00032
00033 YUMPatchParser::~YUMPatchParser()
00034 { }
00035
00036 YUMPatchParser::YUMPatchParser(std::istream &is, const std::string& baseUrl, parser::ParserProgress::Ptr progress )
00037 : XMLNodeIterator<YUMPatchData_Ptr>(is, baseUrl,PATCHSCHEMA, progress)
00038 , _zypp_architecture( getZYpp()->architecture() )
00039 {
00040 fetchNext();
00041 }
00042
00043 YUMPatchParser::YUMPatchParser()
00044 : _zypp_architecture( getZYpp()->architecture() )
00045 { }
00046
00047 YUMPatchParser::YUMPatchParser(YUMPatchData_Ptr& entry)
00048 : XMLNodeIterator<YUMPatchData_Ptr>(entry)
00049 , _zypp_architecture( getZYpp()->architecture() )
00050 { }
00051
00052
00053
00054 bool
00055 YUMPatchParser::isInterested(const xmlNodePtr nodePtr)
00056 {
00057 return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "patch";
00058 }
00059
00060
00061 YUMPatchData_Ptr
00062 YUMPatchParser::process(const xmlTextReaderPtr reader)
00063 {
00064 xml_assert(reader);
00065 YUMPatchData_Ptr patchPtr = new YUMPatchData;
00066 xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00067 xml_assert(dataNode);
00068 patchPtr->timestamp = _helper.attribute(dataNode,"timestamp");
00069 patchPtr->patchId = _helper.attribute(dataNode,"patchid");
00070 patchPtr->engine = _helper.attribute(dataNode,"engine");
00071
00072
00073 patchPtr->rebootNeeded = false;
00074 patchPtr->packageManager = false;
00075
00076
00077 YUMPrimaryParser prim;
00078
00079 for (xmlNodePtr child = dataNode->children;
00080 child && child != dataNode;
00081 child = child->next)
00082 {
00083 if (_helper.isElement(child))
00084 {
00085 string name = _helper.name(child);
00086 if (name == "name")
00087 {
00088 patchPtr->name = _helper.content(child);
00089 }
00090 else if (name == "arch")
00091 {
00092 patchPtr->arch = _helper.content(child);
00093 try
00094 {
00095 if (!Arch(patchPtr->arch).compatibleWith( _zypp_architecture ))
00096 {
00097 patchPtr = NULL;
00098 break;
00099 }
00100 }
00101 catch ( const Exception & excpt_r )
00102 {
00103 ZYPP_CAUGHT( excpt_r );
00104 DBG << "Skipping malformed " << patchPtr->arch << endl;
00105 patchPtr = NULL;
00106 break;
00107 }
00108 }
00109 else if (name == "summary")
00110 {
00111 patchPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00112 }
00113 else if (name == "description")
00114 {
00115 patchPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00116 }
00117 else if (name == "license-to-confirm")
00118 {
00119 patchPtr->license_to_confirm.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00120 }
00121 else if (name == "version")
00122 {
00123 patchPtr->epoch = _helper.attribute(child,"epoch");
00124 patchPtr->ver = _helper.attribute(child,"ver");
00125 patchPtr->rel = _helper.attribute(child,"rel");
00126 }
00127 else if (name == "provides")
00128 {
00129 prim.parseDependencyEntries(& patchPtr->provides, child);
00130 }
00131 else if (name == "conflicts")
00132 {
00133 prim.parseDependencyEntries(& patchPtr->conflicts, child);
00134 }
00135 else if (name == "obsoletes")
00136 {
00137 prim.parseDependencyEntries(& patchPtr->obsoletes, child);
00138 }
00139 else if (name == "prerequires")
00140 {
00141 prim.parseDependencyEntries(& patchPtr->prerequires, child);
00142 }
00143 else if (name == "requires")
00144 {
00145 prim.parseDependencyEntries(& patchPtr->requires, child);
00146 }
00147 else if (name == "recommends")
00148 {
00149 prim.parseDependencyEntries(& patchPtr->recommends, child);
00150 }
00151 else if (name == "suggests")
00152 {
00153 prim.parseDependencyEntries(& patchPtr->suggests, child);
00154 }
00155 else if (name == "supplements")
00156 {
00157 prim.parseDependencyEntries(& patchPtr->supplements, child);
00158 }
00159 else if (name == "enhances")
00160 {
00161 prim.parseDependencyEntries(& patchPtr->enhances, child);
00162 }
00163 else if (name == "freshens")
00164 {
00165 prim.parseDependencyEntries(& patchPtr->freshens, child);
00166 }
00167 else if (name == "category")
00168 {
00169 patchPtr->category = _helper.content(child);
00170 }
00171 else if (name == "reboot-needed")
00172 {
00173 patchPtr->rebootNeeded = true;
00174 }
00175 else if (name == "package-manager")
00176 {
00177 patchPtr->packageManager = true;
00178 }
00179 else if (name == "update-script")
00180 {
00181 patchPtr->updateScript = _helper.content(child);
00182 }
00183 else if (name == "atoms")
00184 {
00185 parseAtomsNode(patchPtr, child);
00186 }
00187 else
00188 {
00189 WAR << "YUM <data> contains the unknown element <" << name << "> "
00190 << _helper.positionInfo(child) << ", skipping" << endl;
00191 }
00192 }
00193 }
00194 return patchPtr;
00195 }
00196
00197
00198 void
00199 YUMPatchParser::parseAtomsNode(YUMPatchData_Ptr dataPtr,
00200 xmlNodePtr formatNode)
00201 {
00202 xml_assert(formatNode);
00203 for (xmlNodePtr child = formatNode->children;
00204 child != 0;
00205 child = child ->next)
00206 {
00207 if (_helper.isElement(child))
00208 {
00209 string name = _helper.name(child);
00210 XXX << "parseAtomsNode(" << name << ")" << endl;
00211 if (name == "package")
00212 {
00213 parsePackageNode( dataPtr, child );
00214 }
00215 else if (name == "script")
00216 {
00217 parseScriptNode( dataPtr, child );
00218 }
00219 else if (name == "message")
00220 {
00221 parseMessageNode( dataPtr, child );
00222 }
00223 else
00224 {
00225 WAR << "YUM <atoms> contains the unknown element <" << name << "> "
00226 << _helper.positionInfo(child) << ", skipping" << endl;
00227 }
00228 }
00229 }
00230 }
00231
00232 void
00233 YUMPatchParser::parseFormatNode(YUMPatchPackage *dataPtr,
00234 xmlNodePtr formatNode)
00235 {
00236 xml_assert(formatNode);
00237 dataPtr->installOnly = false;
00238
00239
00240 YUMPrimaryParser prim;
00241
00242 for (xmlNodePtr child = formatNode->children;
00243 child != 0;
00244 child = child ->next)
00245 {
00246 if (_helper.isElement(child))
00247 {
00248 string name = _helper.name(child);
00249 if (name == "license")
00250 {
00251 dataPtr->license = _helper.content(child);
00252 }
00253 else if (name == "vendor")
00254 {
00255 dataPtr->vendor = _helper.content(child);
00256 }
00257 else if (name == "group")
00258 {
00259 dataPtr->group = _helper.content(child);
00260 }
00261 else if (name == "buildhost")
00262 {
00263 dataPtr->buildhost = _helper.content(child);
00264 }
00265 else if (name == "sourcerpm")
00266 {
00267 dataPtr->sourcerpm = _helper.content(child);
00268 }
00269 else if (name == "header-range")
00270 {
00271 dataPtr->headerStart = _helper.attribute(child,"start");
00272 dataPtr->headerEnd = _helper.attribute(child,"end");
00273 }
00274 else if (name == "provides")
00275 {
00276 prim.parseDependencyEntries(& dataPtr->provides, child);
00277 }
00278 else if (name == "conflicts")
00279 {
00280 prim.parseDependencyEntries(& dataPtr->conflicts, child);
00281 }
00282 else if (name == "obsoletes")
00283 {
00284 prim.parseDependencyEntries(& dataPtr->obsoletes, child);
00285 }
00286 else if (name == "prerequires")
00287 {
00288 prim.parseDependencyEntries(& dataPtr->prerequires, child);
00289 }
00290 else if (name == "requires")
00291 {
00292 prim.parseDependencyEntries(& dataPtr->requires, child);
00293 }
00294 else if (name == "recommends")
00295 {
00296 prim.parseDependencyEntries(& dataPtr->recommends, child);
00297 }
00298 else if (name == "suggests")
00299 {
00300 prim.parseDependencyEntries(& dataPtr->suggests, child);
00301 }
00302 else if (name == "supplements")
00303 {
00304 prim.parseDependencyEntries(& dataPtr->supplements, child);
00305 }
00306 else if (name == "enhances")
00307 {
00308 prim.parseDependencyEntries(& dataPtr->enhances, child);
00309 }
00310 else if (name == "file")
00311 {
00312 dataPtr->files.push_back
00313 (FileData(_helper.content(child),
00314 _helper.attribute(child,"type")));
00315 }
00316
00317 else if (name == "authors")
00318 {
00319 prim.parseAuthorEntries(& dataPtr->authors, child);
00320 }
00321 else if (name == "keywords")
00322 {
00323 prim.parseKeywordEntries(& dataPtr->keywords, child);
00324 }
00325 else if (name == "dirsizes")
00326 {
00327 prim.parseDirsizeEntries(& dataPtr->dirSizes, child);
00328 }
00329 else if (name == "freshens")
00330 {
00331 prim.parseDependencyEntries(& dataPtr->freshens, child);
00332 }
00333 else if (name == "install-only")
00334 {
00335 dataPtr->installOnly = true;
00336 }
00337 else
00338 {
00339 WAR << "YUM <atom/package/format> contains the unknown element <"
00340 << name << "> "
00341 << _helper.positionInfo(child) << ", skipping" << endl;
00342 }
00343 }
00344 }
00345 }
00346
00347 void
00348 YUMPatchParser::parsePkgPlainRpmNode(YUMPatchPackage *dataPtr,
00349 xmlNodePtr formatNode)
00350 {
00351 YUMPlainRpm plainRpm;
00352 plainRpm.arch = _helper.attribute( formatNode, "arch" );
00353 plainRpm.filename = _helper.attribute( formatNode, "filename" );
00354 plainRpm.downloadsize = _helper.attribute( formatNode, "downloadsize" );
00355 plainRpm.md5sum = _helper.attribute( formatNode, "md5sum" );
00356 plainRpm.buildtime = _helper.attribute( formatNode, "buildtime" );
00357 for (xmlNodePtr child = formatNode->children;
00358 child != 0;
00359 child = child ->next)
00360 {
00361 if (_helper.isElement(child))
00362 {
00363 string name = _helper.name(child);
00364 WAR << "YUM <atom/package/pkgfiles/plain> contains the unknown element <"
00365 << name << "> "
00366 << _helper.positionInfo(child) << ", skipping" << endl;
00367 }
00368 }
00369 dataPtr->plainRpms.push_back(plainRpm);
00370 }
00371
00372 void
00373 YUMPatchParser::parsePkgPatchRpmNode(YUMPatchPackage *dataPtr,
00374 xmlNodePtr formatNode)
00375 {
00376 YUMPatchRpm patchRpm;
00377 patchRpm.arch = _helper.attribute( formatNode, "arch" );
00378 patchRpm.filename = _helper.attribute( formatNode, "filename" );
00379 patchRpm.downloadsize = _helper.attribute( formatNode, "downloadsize" );
00380 patchRpm.md5sum = _helper.attribute( formatNode, "md5sum" );
00381 patchRpm.buildtime = _helper.attribute( formatNode, "buildtime" );
00382 patchRpm.media = "1";
00383 for (xmlNodePtr child = formatNode->children;
00384 child != 0;
00385 child = child ->next)
00386 {
00387 if (_helper.isElement(child))
00388 {
00389 string name = _helper.name(child);
00390 if (name == "base-version")
00391 {
00392 YUMPatchBaseVersion base_version;
00393 parsePkgPatchBaseVersionNode( &base_version, child);
00394 patchRpm.baseVersions.push_back( base_version );
00395 }
00396 else if (name == "location")
00397 {
00398 patchRpm.location = _helper.attribute(child,"href");
00399 patchRpm.media = _helper.attribute(child,"base","#1");
00400 int pos = patchRpm.media.find("#");
00401 if (pos > 0)
00402 patchRpm.media = patchRpm.media.substr(pos + 1);
00403 }
00404 else if (name == "media")
00405 {
00406 patchRpm.media = _helper.content(child);
00407 }
00408 else if (name == "checksum")
00409 {
00410 patchRpm.checksumType = _helper.attribute(child,"type");
00411 patchRpm.checksum = _helper.content(child);
00412 }
00413 else if (name == "time")
00414 {
00415 patchRpm.buildtime = _helper.attribute(child,"build");
00416 }
00417 else if (name == "size")
00418 {
00419 patchRpm.downloadsize = _helper.attribute(child,"package");
00420 }
00421 else
00422 {
00423 WAR << "YUM <atom/package/pkgfiles/patch> contains the unknown element <"
00424 << name << "> "
00425 << _helper.positionInfo(child) << ", skipping" << endl;
00426 }
00427 }
00428 }
00429 dataPtr->patchRpms.push_back(patchRpm);
00430 }
00431
00432 void
00433 YUMPatchParser::parsePkgDeltaRpmNode(YUMPatchPackage *dataPtr,
00434 xmlNodePtr formatNode)
00435 {
00436 YUMDeltaRpm deltaRpm;
00437 deltaRpm.arch = _helper.attribute( formatNode, "arch" );
00438 deltaRpm.filename = _helper.attribute( formatNode, "filename" );
00439 deltaRpm.downloadsize = _helper.attribute( formatNode, "downloadsize" );
00440 deltaRpm.md5sum = _helper.attribute( formatNode, "md5sum" );
00441 deltaRpm.buildtime = _helper.attribute( formatNode, "buildtime" );
00442 deltaRpm.media = "1";
00443 for (xmlNodePtr child = formatNode->children;
00444 child != 0;
00445 child = child ->next)
00446 {
00447 if (_helper.isElement(child))
00448 {
00449 string name = _helper.name(child);
00450 if (name == "base-version")
00451 {
00452 parsePkgDeltaBaseVersionNode( &(deltaRpm.baseVersion), child);
00453 }
00454 else if (name == "location")
00455 {
00456 deltaRpm.location = _helper.attribute(child,"href");
00457 deltaRpm.media = _helper.attribute(child,"base","#1");
00458 int pos = deltaRpm.media.find("#");
00459 if (pos > 0)
00460 deltaRpm.media = deltaRpm.media.substr(pos + 1);
00461 }
00462 else if (name == "media")
00463 {
00464 deltaRpm.media = _helper.content(child);
00465 }
00466 else if (name == "checksum")
00467 {
00468 deltaRpm.checksumType = _helper.attribute(child,"type");
00469 deltaRpm.checksum = _helper.content(child);
00470 }
00471 else if (name == "time")
00472 {
00473 deltaRpm.buildtime = _helper.attribute(child,"build");
00474 }
00475 else if (name == "size")
00476 {
00477 deltaRpm.downloadsize = _helper.attribute(child,"package");
00478 }
00479 else
00480 {
00481 WAR << "YUM <atom/package/pkgfiles/delta> contains the unknown element <"
00482 << name << "> "
00483 << _helper.positionInfo(child) << ", skipping" << endl;
00484 }
00485 }
00486 }
00487 dataPtr->deltaRpms.push_back(deltaRpm);
00488 }
00489
00490
00491 void
00492 YUMPatchParser::parsePkgPatchBaseVersionNode(YUMPatchBaseVersion *dataPtr,
00493 xmlNodePtr formatNode)
00494 {
00495 dataPtr->edition.epoch = _helper.attribute( formatNode, "epoch" );
00496 dataPtr->edition.ver = _helper.attribute( formatNode, "ver" );
00497 dataPtr->edition.rel = _helper.attribute( formatNode, "rel" );
00498 }
00499
00500 void
00501 YUMPatchParser::parsePkgDeltaBaseVersionNode(YUMDeltaBaseVersion *dataPtr,
00502 xmlNodePtr formatNode)
00503 {
00504 dataPtr->edition.epoch = _helper.attribute( formatNode, "epoch" );
00505 dataPtr->edition.ver = _helper.attribute( formatNode, "ver" );
00506 dataPtr->edition.rel = _helper.attribute( formatNode, "rel" );
00507 dataPtr->md5sum = _helper.attribute( formatNode, "md5sum" );
00508 dataPtr->buildtime = _helper.attribute( formatNode, "buildtime" );
00509 dataPtr->sequence_info = _helper.attribute( formatNode, "sequence_info" );
00510 }
00511
00512 void
00513 YUMPatchParser::parsePkgFilesNode(YUMPatchPackage *dataPtr,
00514 xmlNodePtr formatNode)
00515 {
00516 for (xmlNodePtr child = formatNode->children;
00517 child != 0;
00518 child = child ->next)
00519 {
00520 if (_helper.isElement(child))
00521 {
00522 string name = _helper.name(child);
00523 if (name == "plainrpm")
00524 {
00525 parsePkgPlainRpmNode( dataPtr, child );
00526 }
00527 else if (name == "patchrpm")
00528 {
00529 parsePkgPatchRpmNode( dataPtr, child );
00530 }
00531 else if (name == "deltarpm")
00532 {
00533 parsePkgDeltaRpmNode( dataPtr, child );
00534 }
00535 else
00536 {
00537 WAR << "YUM <atom/package/pkgfiles> contains the unknown element <"
00538 << name << "> "
00539 << _helper.positionInfo(child) << ", skipping" << endl;
00540 }
00541 }
00542 }
00543 }
00544
00545
00546
00547
00548
00549
00550 void
00551 YUMPatchParser::parsePackageNode(YUMPatchData_Ptr dataPtr,
00552 xmlNodePtr formatNode)
00553 {
00554 shared_ptr<YUMPatchPackage> package(new YUMPatchPackage);
00555 package->type = _helper.attribute(formatNode,"type");
00556 package->installOnly = false;
00557 package->media = "1";
00558
00559
00560 YUMPrimaryParser prim;
00561
00562 for (xmlNodePtr child = formatNode->children;
00563 child != 0;
00564 child = child ->next)
00565 {
00566 if (_helper.isElement(child))
00567 {
00568 string name = _helper.name(child);
00569 XXX << "parsePackageNode(" << name << ")" << endl;
00570 if (name == "name")
00571 {
00572 package->name = _helper.content(child);
00573 }
00574 else if (name == "arch")
00575 {
00576 package->arch = _helper.content(child);
00577 }
00578 else if (name == "version")
00579 {
00580 package->epoch = _helper.attribute(child,"epoch");
00581 package->ver = _helper.attribute(child,"ver");
00582 package->rel = _helper.attribute(child,"rel");
00583 }
00584 else if (name == "checksum")
00585 {
00586 package->checksumType = _helper.attribute(child,"type");
00587 package->checksumPkgid = _helper.attribute(child,"pkgid");
00588 package->checksum = _helper.content(child);
00589 }
00590 else if (name == "summary")
00591 {
00592 package->summary = _helper.content(child);
00593 }
00594 else if (name == "description")
00595 {
00596 package->description = _helper.content(child);
00597 }
00598 else if (name == "packager")
00599 {
00600 package->packager = _helper.content(child);
00601 }
00602 else if (name == "url")
00603 {
00604 package->url = _helper.content(child);
00605 }
00606 else if (name == "time")
00607 {
00608 package->timeFile = _helper.attribute(child,"file");
00609 package->timeBuild = _helper.attribute(child,"build");
00610 }
00611 else if (name == "size")
00612 {
00613 package->sizePackage = _helper.attribute(child,"package");
00614 package->sizeInstalled = _helper.attribute(child,"installed");
00615 package->sizeArchive = _helper.attribute(child,"archive");
00616 }
00617 else if (name == "location")
00618 {
00619 package->location = _helper.attribute(child,"href");
00620 package->media = _helper.attribute(child,"base","#1");
00621 int pos = package->media.find("#");
00622 if (pos > 0)
00623 package->media = package->media.substr(pos + 1);
00624 }
00625 else if (name == "format")
00626 {
00627 parseFormatNode (&*package, child);
00628 }
00629 else if (name == "pkgfiles")
00630 {
00631 parsePkgFilesNode (&*package, child);
00632 }
00633 else if (name == "license-to-confirm")
00634 {
00635 package->license_to_confirm.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00636 }
00637 else
00638 {
00639 WAR << "YUM <atoms/package> contains the unknown element <"
00640 << name << "> "
00641 << _helper.positionInfo(child) << ", skipping" << endl;
00642 }
00643 }
00644 }
00645 dataPtr->atoms.push_back(package);
00646 }
00647
00648 void
00649 YUMPatchParser::parseScriptNode(YUMPatchData_Ptr dataPtr,
00650 xmlNodePtr formatNode)
00651 {
00652 shared_ptr<YUMPatchScript> script(new YUMPatchScript);
00653 script->do_media = "1";
00654 script->undo_media = "1";
00655
00656
00657 YUMPrimaryParser prim;
00658
00659 for (xmlNodePtr child = formatNode->children;
00660 child != 0;
00661 child = child ->next)
00662 {
00663 if (_helper.isElement(child))
00664 {
00665 string name = _helper.name(child);
00666 if (name == "name")
00667 {
00668 script->name = _helper.content(child);
00669 }
00670 else if (name == "version")
00671 {
00672 script->epoch = _helper.attribute(child,"epoch");
00673 script->ver = _helper.attribute(child,"ver");
00674 script->rel = _helper.attribute(child,"rel");
00675 }
00676 else if (name == "do")
00677 {
00678 script->do_script = _helper.content(child);
00679 }
00680 else if (name == "undo")
00681 {
00682 script->undo_script = _helper.content(child);
00683 }
00684 else if (name == "do-location")
00685 {
00686 script->do_location = _helper.attribute(child,"href");
00687 script->do_media = _helper.attribute(child,"base","#1");
00688 int pos = script->do_media.find("#");
00689 if (pos > 0)
00690 script->do_media = script->do_media.substr(pos + 1);
00691 }
00692 else if (name == "undo-location")
00693 {
00694 script->undo_location = _helper.attribute(child,"href");
00695 script->undo_media = _helper.attribute(child,"base","#1");
00696 int pos = script->undo_media.find("#");
00697 if (pos > 0)
00698 script->undo_media = script->undo_media.substr(pos + 1);
00699 }
00700 else if (name == "do-checksum")
00701 {
00702 script->do_checksum_type = _helper.attribute(child,"type");
00703 script->do_checksum = _helper.content(child);
00704 }
00705 else if (name == "undo-checksum")
00706 {
00707 script->undo_checksum_type = _helper.attribute(child,"type");
00708 script->undo_checksum = _helper.content(child);
00709 }
00710 else if (name == "provides")
00711 {
00712 prim.parseDependencyEntries(& script->provides, child);
00713 }
00714 else if (name == "conflicts")
00715 {
00716 prim.parseDependencyEntries(& script->conflicts, child);
00717 }
00718 else if (name == "obsoletes")
00719 {
00720 prim.parseDependencyEntries(& script->obsoletes, child);
00721 }
00722 else if (name == "requires")
00723 {
00724 prim.parseDependencyEntries(& script->requires, child);
00725 }
00726 else if (name == "prerequires")
00727 {
00728 prim.parseDependencyEntries(& script->prerequires, child);
00729 }
00730 else if (name == "recommends")
00731 {
00732 prim.parseDependencyEntries(& script->recommends, child);
00733 }
00734 else if (name == "suggests")
00735 {
00736 prim.parseDependencyEntries(& script->suggests, child);
00737 }
00738 else if (name == "supplements")
00739 {
00740 prim.parseDependencyEntries(& script->supplements, child);
00741 }
00742 else if (name == "enhances")
00743 {
00744 prim.parseDependencyEntries(& script->enhances, child);
00745 }
00746 else if (name == "freshens")
00747 {
00748 prim.parseDependencyEntries(& script->freshens, child);
00749 }
00750 else
00751 {
00752 WAR << "YUM <atoms/script> contains the unknown element <"
00753 << name << "> "
00754 << _helper.positionInfo(child) << ", skipping" << endl;
00755 }
00756 }
00757 }
00758 dataPtr->atoms.push_back(script);
00759 }
00760
00761 void
00762 YUMPatchParser::parseMessageNode(YUMPatchData_Ptr dataPtr,
00763 xmlNodePtr formatNode)
00764 {
00765 shared_ptr<YUMPatchMessage> message(new YUMPatchMessage);
00766
00767
00768 YUMPrimaryParser prim;
00769
00770 for (xmlNodePtr child = formatNode->children;
00771 child != 0;
00772 child = child ->next)
00773 {
00774 if (_helper.isElement(child))
00775 {
00776 string name = _helper.name(child);
00777 if (name == "name")
00778 {
00779 message->name = _helper.content(child);
00780 }
00781 else if (name == "version")
00782 {
00783 message->epoch = _helper.attribute(child,"epoch");
00784 message->ver = _helper.attribute(child,"ver");
00785 message->rel = _helper.attribute(child,"rel");
00786 }
00787 else if (name == "text")
00788 {
00789 message->text.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00790 }
00791 else if (name == "provides")
00792 {
00793 prim.parseDependencyEntries(& message->provides, child);
00794 }
00795 else if (name == "conflicts")
00796 {
00797 prim.parseDependencyEntries(& message->conflicts, child);
00798 }
00799 else if (name == "obsoletes")
00800 {
00801 prim.parseDependencyEntries(& message->obsoletes, child);
00802 }
00803 else if (name == "prerequires")
00804 {
00805 prim.parseDependencyEntries(& message->prerequires, child);
00806 }
00807 else if (name == "requires")
00808 {
00809 prim.parseDependencyEntries(& message->requires, child);
00810 }
00811 else if (name == "recommends")
00812 {
00813 prim.parseDependencyEntries(& message->recommends, child);
00814 }
00815 else if (name == "suggests")
00816 {
00817 prim.parseDependencyEntries(& message->suggests, child);
00818 }
00819 else if (name == "supplements")
00820 {
00821 prim.parseDependencyEntries(& message->supplements, child);
00822 }
00823 else if (name == "enhances")
00824 {
00825 prim.parseDependencyEntries(& message->enhances, child);
00826 }
00827 else if (name == "freshens")
00828 {
00829 prim.parseDependencyEntries(& message->freshens, child);
00830 }
00831 else
00832 {
00833 WAR << "YUM <atoms/message> contains the unknown element <"
00834 << name << "> "
00835 << _helper.positionInfo(child) << ", skipping" << endl;
00836 }
00837 }
00838 }
00839 dataPtr->atoms.push_back(message);
00840 }
00841
00842 }
00843 }
00844 }