]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/policy.cc
Correct spelling
[apt.git] / apt-pkg / policy.cc
index 228d858a9dfe705accb062f35ece7f8083890a40..98576fc915bd4a47fe6c824c3ae27242521db650 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: policy.cc,v 1.9 2002/11/06 06:43:14 jgg Exp $
+// $Id: policy.cc,v 1.10 2003/08/12 00:17:37 mdz Exp $
 /* ######################################################################
 
    Package Version Policy implementation
@@ -23,9 +23,6 @@
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/policy.h"
-#endif
 #include <apt-pkg/policy.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/tagfile.h>
@@ -36,6 +33,7 @@
 #include <apti18n.h>
 
 #include <iostream>
+#include <sstream>
                                                                        /*}}}*/
 
 using namespace std;
@@ -241,7 +239,21 @@ signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg)
    return 0;
 }
                                                                        /*}}}*/
-
+// PreferenceSection class - Overriding the default TrimRecord method  /*{{{*/
+// ---------------------------------------------------------------------
+/* The preference file is a user generated file so the parser should
+   therefore be a bit more friendly by allowing comments and new lines
+   all over the place rather than forcing a special format */
+class PreferenceSection : public pkgTagSection
+{
+   void TrimRecord(bool BeforeRecord, const char* &End)
+   {
+      for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r' || Stop[0] == '#'); Stop++)
+        if (Stop[0] == '#')
+           Stop = (const char*) memchr(Stop,'\n',End-Stop);
+   }
+};
+                                                                       /*}}}*/
 // ReadPinFile - Load the pin file into a Policy                       /*{{{*/
 // ---------------------------------------------------------------------
 /* I'd like to see the preferences file store more than just pin information
@@ -261,7 +273,7 @@ bool ReadPinFile(pkgPolicy &Plcy,string File)
    if (_error->PendingError() == true)
       return false;
    
-   pkgTagSection Tags;
+   PreferenceSection Tags;
    while (TF.Step(Tags) == true)
    {
       string Name = Tags.FindS("Package");
@@ -293,8 +305,20 @@ bool ReadPinFile(pkgPolicy &Plcy,string File)
       }
       for (; Word != End && isspace(*Word) != 0; Word++);
 
-      Plcy.CreatePin(Type,Name,string(Word,End),
-                    Tags.FindI("Pin-Priority"));
+      short int priority = Tags.FindI("Pin-Priority", 0);
+      if (priority == 0)
+      {
+         _error->Warning(_("No priority (or zero) specified for pin"));
+         continue;
+      }
+
+      istringstream s(Name);
+      string pkg;
+      while(!s.eof())
+      {
+        s >> pkg;
+         Plcy.CreatePin(Type, pkg, string(Word,End),priority);
+      };
    }
 
    Plcy.InitDefaults();