- populate Component of repomd repos to enable repository pinning with repomd
authorpmatilai <pmatilai>
Tue, 2 May 2006 08:43:47 +0000 (08:43 +0000)
committerpmatilai <pmatilai>
Tue, 2 May 2006 08:43:47 +0000 (08:43 +0000)
apt-pkg/rpm/rpmindexfile.cc
apt-pkg/rpm/rpmlistparser.cc
apt-pkg/rpm/rpmlistparser.h

index 9aaa72e..17101f2 100644 (file)
@@ -758,7 +758,7 @@ bool rpmRepomdIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
    string RelFile = ReleasePath();
    if (FileExists(RelFile) == true)
    {
-      Parser.LoadReleaseInfo(File,RelFile);
+      Parser.LoadReleaseInfo(File,RelFile,Dist);
    }
 
    return true;
index 0dbb17d..1fdc78c 100644 (file)
@@ -557,8 +557,33 @@ xmlNode *rpmRepomdParser::FindNode(xmlNode *n, const string Name)
 }
 
 bool rpmRepomdParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
-                                   string File)
+                                      const string File, const string Dist)
 {
+   size_t start, stop, size;
+   string comp;
+
+   // Munge sources.list distribution into something that can be used 
+   // as Component to allow repository pinning with repomd
+   start = Dist.find_first_not_of("/");
+   size = Dist.length();
+   while ((start >= 0) && (start < size)) {
+      stop = Dist.find_first_of("/", start);
+      string part = Dist.substr(start, stop - start);
+      if (comp.empty()) {
+        comp = part;
+      } else {
+        comp += "-" + part;
+      }
+      if ((stop < 0) || (stop > size)) stop = size;
+      start = Dist.find_first_not_of("/", stop + 1);
+   }
+   FileI->Component = WriteUniqString(comp);
+   // Should these be populated with something (what?) a well?
+   //FileI->Archive = WriteUniqString("Unknown");
+   //FileI->Version = WriteUniqString("Unknown");
+   //FileI->Origin = WriteUniqString("Unknown");
+   //FileI->Label = WriteUniqString("Unknown");
+
    xmlDocPtr RepoMD = NULL;
    xmlNode *Root = NULL;
 
index 6360488..cd1d63f 100644 (file)
@@ -103,7 +103,8 @@ class rpmRepomdParser : public rpmListParser
 
    public:
  
-   bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,string File);
+   bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,const string File,
+                       const string Dist);
 
    rpmRepomdParser(RPMHandler *Handler) : rpmListParser(Handler) {};
 };