YUMPatchParser.cc

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

Generated on Wed Sep 27 01:16:34 2006 for zypp by  doxygen 1.4.6