- When stepping through source records skip binaries
authorpmatilai <pmatilai>
Sun, 7 May 2006 09:33:49 +0000 (09:33 +0000)
committerpmatilai <pmatilai>
Sun, 7 May 2006 09:33:49 +0000 (09:33 +0000)
- Move CreateSrcParser() to rpmRepomdIndex class from rpmRepomdSrcIndex
-> Mixed binary + source repomd suddenly works. repomd-src isn't strictly
needed anymore but should be used for efficiency reasons when using pure
source repositories.

apt-pkg/rpm/rpmhandler.h
apt-pkg/rpm/rpmindexfile.cc
apt-pkg/rpm/rpmindexfile.h
apt-pkg/rpm/rpmsrcrecords.cc

index ed9b524..51ae3ca 100644 (file)
@@ -93,6 +93,7 @@ class RPMHandler
    virtual string Description() {return GetSTag(RPMTAG_DESCRIPTION);};
    virtual unsigned long InstalledSize() {return GetITag(RPMTAG_SIZE);};
    virtual string SourceRpm() {return GetSTag(RPMTAG_SOURCERPM);};
+   virtual bool IsSourceRpm() {return SourceRpm().empty();}
 
    bool InternalDep(const char *name, const char *ver, int_32 flag);
    virtual bool Depends(unsigned int Type, vector<Dependency*> &Deps);
index 17101f2..b92d153 100644 (file)
@@ -783,7 +783,7 @@ bool rpmRepomdIndex::MergeFileProvides(pkgCacheGenerator &Gen,
    return true;
 }
 
-pkgSrcRecords::Parser *rpmRepomdSrcIndex::CreateSrcParser() const
+pkgSrcRecords::Parser *rpmRepomdIndex::CreateSrcParser() const
 {
    return new rpmSrcRecordParser(IndexPath(), this);
 }
index 7e189c6..b08aa48 100644 (file)
@@ -323,6 +323,10 @@ class rpmRepomdIndex : public rpmIndexFile
                                  OpProgress &/*Prog*/) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
+   // Interface for the source record parsers - repomd can have both binary
+   // and source packages in the same repository!
+   virtual pkgSrcRecords::Parser *CreateSrcParser() const;
+
    rpmRepomdIndex(string URI,string Dist,string Section,
                pkgRepository *Repository) :
                        URI(URI), Dist(Dist), Section(Section),
@@ -363,9 +367,6 @@ class rpmRepomdSrcIndex : public rpmRepomdIndex
    virtual string SourceInfo(pkgSrcRecords::Parser const &Record,
                             pkgSrcRecords::File const &File) const;
 
-   // Interface for the record parsers
-   virtual pkgSrcRecords::Parser *CreateSrcParser() const;
-
    rpmRepomdSrcIndex(string URI,string Dist,string Section,
                      pkgRepository *Repository) :
           rpmRepomdIndex(URI,Dist,Section,Repository) {};
index 2e52590..e648682 100644 (file)
@@ -120,7 +120,12 @@ bool rpmSrcRecordParser::Restart()
 
 bool rpmSrcRecordParser::Step() 
 {
-   return Handler->Skip();
+   bool ret = Handler->Skip();
+   // Repomd can have both binaries and sources, step over any binaries
+   while (ret && ! Handler->IsSourceRpm()) {
+      ret = Handler->Skip();
+   }
+   return ret;
 }
 
 bool rpmSrcRecordParser::Jump(unsigned long Off)