[Piuparts-commits] [SCM] piuparts git repository branch, develop, updated. 0.50-103-gfe8fd87

Holger Levsen holger at layer-acht.org
Mon Apr 22 09:31:54 UTC 2013


The following commit has been merged in the develop branch:
commit fe8fd870712c2e197b961c67a2f2ca110ab9da75
Merge: dcbc09da4bc6c430bd13634e961ebe4e79bb7b81 81f60717660d74b5fd4de48a4f7918182c87955c
Author: Holger Levsen <holger at layer-acht.org>
Date:   Mon Apr 22 11:27:39 2013 +0200

    Merge remote-tracking branch 'dave/issue-sort-fixes' into develop

diff --combined debian/changelog
index c05e257,55efd4f..b4d1c4d
--- a/debian/changelog
+++ b/debian/changelog
@@@ -8,7 -8,6 +8,7 @@@ piuparts (0.51) UNRELEASED; urgency=lo
    * piuparts.conf:
    * distros.conf:
      - Update backports setup after integration into the regular archive.
 +    - Enable stable security updates when installing stable backports.
    * piupartslib/conf.py:
      - Raise MissingSection if the requested section is not in piuparts.conf.
    * piupartslib/packagesdb.py:
@@@ -60,11 -59,14 +60,14 @@@
    [ David Steele ]
    * detect_well_known_errors:
      - Replace the bash script with an equivalent Python script.
-     - Sort known error and issue packages by reverse dependency count.
+     - Sort known error and issue packages by reverse dependency count,
+       separating bugged from everything else.
        (Closes: #698526)
      - Add a PTS link to issue and error summary entries.
-     - Replace the known_problem COMMAND with INCLUDE and EXCLUDE, and replace
-       grep shell calls with python re modules calls, for a 10x speedup.
+     - Replace the known_problem COMMAND with PATTERN and EXCLUDE_PATTERN,
+       and replace grep shell calls with python re modules calls, for a
+       10x speedup.
+     - Validate field names, and only use valid known problem conf files.
      - Minor HTML syntax fix.
      - Minor template integration.
  
diff --combined master-bin/detect_well_known_errors
index 6ca072f,d50e3f6..6810a26
--- a/master-bin/detect_well_known_errors
+++ b/master-bin/detect_well_known_errors
@@@ -109,15 -109,29 +109,29 @@@ class Problem()
          self.name = os.path.basename(probpath)
          self.short_name = os.path.splitext( self.name )[0]
  
+         self.tags_are_valid = True
+ 
+         self.required_tags = [ "PATTERN", "WHERE", "ISSUE",
+                                "HEADER", "HELPTEXT"]
+         self.optional_tags = ["EXCLUDE_PATTERN", "EXPLAIN", "PRIORITY"]
+ 
+ 
          self.init_problem()
  
-         self.inc_re = re.compile( self.INCLUDE )
+         for tag in self.required_tags:
+             if not tag in self.__dict__:
+                 self.tags_are_valid = False
  
-         if "EXCLUDE" in self.__dict__:
-             self.exc_re = re.compile( self.EXCLUDE )
+         self.inc_re = re.compile( self.PATTERN )
+ 
+         if "EXCLUDE_PATTERN" in self.__dict__:
+             self.exc_re = re.compile( self.EXCLUDE_PATTERN )
          else:
              self.exc_re = None
  
+     def valid(self):
+         return self.tags_are_valid
+ 
      def init_problem(self):
          """Load problem file parameters (HELPTEXT="foo" -> self.HELPTEXT)"""
  
@@@ -138,7 -152,10 +152,10 @@@
               or re.search( '^\".+\"$', value, re.MULTILINE|re.DOTALL ):
                  value = value[1:-1]
  
-             self.__dict__[name] = value
+             if name in self.required_tags or name in self.optional_tags:
+                 self.__dict__[name] = value
+             else:
+                 self.tags_are_valid = False
  
          self.WHERE = self.WHERE.split(" ")
  
@@@ -157,10 -174,10 +174,10 @@@
  
      def get_command(self):
  
-         cmd = "grep -E \"%s\"" % self.INCLUDE
+         cmd = "grep -E \"%s\"" % self.PATTERN
  
-         if "EXCLUDE" in self.__dict__:
-             cmd += " | grep -v -E \"%s\"" % self.EXCLUDE
+         if "EXCLUDE_PATTERN" in self.__dict__:
+             cmd += " | grep -v -E \"%s\"" % self.EXCLUDE_PATTERN
  
          return(cmd)
  
@@@ -202,16 -219,19 +219,19 @@@ class FailureManager()
      def sort_by_path( self ):
          self.failures.sort(key=lambda x: self.logdict[x.pkgspec])
  
-     def sort_by_rdeps( self, pkgsdb ):
+     def sort_by_bugged_and_rdeps( self, pkgsdb ):
          self.pkgsdb = pkgsdb
  
          def keyfunc( x, pkgsdb=self.pkgsdb, logdict=self.logdict):
              try:
-                 rdeps = pkgsdb.get_package(get_pkg(x.pkgspec)).rrdep_count()
+                 pkg_name = get_pkg(x.pkgspec)
+                 rdeps = pkgsdb.get_package(pkg_name).rrdep_count()
              except KeyError:
                  rdeps = 0
  
-             return( (-rdeps, logdict[x.pkgspec]) )
+             is_failed = get_where(logdict[x.pkgspec]) == "fail"
+ 
+             return( (not is_failed, -rdeps, logdict[x.pkgspec]) )
  
          self.failures.sort( key=keyfunc )
  
@@@ -347,6 -367,7 +367,7 @@@ def populate_tpl( tmpl, vals )
  def update_tpl( basedir, section, problem, failures, logdict, ftpl, ptpl, pkgsdb ):
  
      pkg_text = ""
+     bugged_section = False
      for failure in failures:
  
          pkgspec = failure.pkgspec
@@@ -358,6 -379,10 +379,10 @@@
              src_pkg = bin_pkg
              rdep_cnt = 0
  
+         if (not bugged_section) and "bugged" in logdict[pkgspec]:
+             bugged_section = True
+             pkg_text += "<br>\n"
+ 
          pkg_text += populate_tpl(ftpl, {
                                  'LOG': section_path(logdict[pkgspec]),
                                  'PACKAGE': bin_pkg,
@@@ -402,11 -427,14 +427,14 @@@ def update_html( section, logdict, prob
  
      def keyfunc( x, pkgsdb=pkgsdb, logdict=logdict):
          try:
-             rdeps = pkgsdb.get_package(get_pkg(x.pkgspec)).rrdep_count()
+             pkg_name = get_pkg(x.pkgspec)
+             rdeps = pkgsdb.get_package(pkg_name).rrdep_count()
          except KeyError:
              rdeps = 0
  
-         return( (-rdeps, logdict[x.pkgspec]) )
+         is_failed = get_where(logdict[x.pkgspec]) == "fail"
+ 
+         return( (not is_failed, -rdeps, logdict[x.pkgspec]) )
  
      unknownsasfailures.sort( key=keyfunc )
  
@@@ -457,13 -485,12 +485,13 @@@ def process_section( section, config, p
          pkgsdb.read_packages_file(pkg_fl)
          pkg_fl.close()
  
 +        pkgsdb.compute_package_states()
          pkgsdb.calc_rrdep_counts()
  
          os.chdir(oldcwd)
  
      failures = FailureManager( logdict )
-     failures.sort_by_rdeps(pkgsdb)
+     failures.sort_by_bugged_and_rdeps(pkgsdb)
  
      update_html( section, logdict, problem_list, failures, config, pkgsdb )
  
@@@ -493,8 -520,15 +521,15 @@@ def detect_well_known_errors( config, p
  
  def create_problem_list( pdir ):
  
-     pfiles = [x for x in sorted(os.listdir(pdir)) if x.endswith(".conf")]
-     plist = [Problem(os.path.join(pdir,x)) for x in pfiles]
+     plist = []
+ 
+     for pfile in [x for x in sorted(os.listdir(pdir)) if x.endswith(".conf")]:
+         prob = Problem(os.path.join(pdir,pfile))
+ 
+         if prob.valid():
+             plist.append(prob)
+         else:
+             print "Keyword error in %s - skipping" % pfile
  
      return plist
  

-- 
piuparts git repository



More information about the Piuparts-commits mailing list