The following commit has been merged in the master branch:
commit 4a0b7963587bcd9745b28c89078f188a474a8343
Author: Andreas Tille <[email protected]>
Date:   Fri Jul 19 12:05:42 2013 +0200

    Revert to bugs query without metapackage bugs (which was wrongly 
implemented here anyway)

diff --git a/misc/sql/bugs.sh b/misc/sql/bugs.sh
index 9fb1e12..1da0817 100755
--- a/misc/sql/bugs.sh
+++ b/misc/sql/bugs.sh
@@ -15,10 +15,12 @@ SELECT distinct sources.source, tasks.tasks, CASE WHEN 
dependency = 'd' AND comp
     JOIN packages p ON p.package = b.package
     JOIN bugs bu    ON bu.source = p.source
     JOIN sources s  ON s.source  = p.source
-    WHERE blend = '$1' AND b.distribution = 'debian'
+    WHERE (blend = '$1' AND b.distribution = 'debian')
+       OR bu.source IN (SELECT metapackage_name FROM blends_tasks WHERE blend 
= '$1' AND metapackage)
   GROUP BY s.source, b.dependency, b.component, s.homepage, s.vcs_browser, 
s.maintainer, s.version
   ) sources
   LEFT OUTER JOIN (
+   SELECT * FROM (
     SELECT source, array_agg(task) AS tasks FROM (
      SELECT DISTINCT p.source, b.task
       FROM packages p
@@ -26,8 +28,11 @@ SELECT distinct sources.source, tasks.tasks, CASE WHEN 
dependency = 'd' AND comp
       JOIN blends_dependencies b ON b.package = p.package
       JOIN sources s ON p.source = s.source AND p.release = s.release
       WHERE b.blend = '$1'
-    ) tmp
+    ) tmp1
     GROUP BY source
+   ) tmp2
+    UNION
+    SELECT metapackage_name AS source, ARRAY[task] AS tasks FROM blends_tasks 
WHERE blend = '$1' AND metapackage
   ) tasks ON sources.source = tasks.source
   WHERE row_number = 1
   ORDER BY source;
@@ -39,7 +44,8 @@ SELECT source, bu.id, title, status, done_by, tags FROM (
     FROM blends_dependencies b
     JOIN packages p ON p.package = b.package
     JOIN bugs bu    ON bu.source = p.source
-    WHERE blend = '$1' AND b.distribution = 'debian'
+    WHERE (blend = '$1' AND b.distribution = 'debian')
+       OR bu.source IN (SELECT metapackage_name FROM blends_tasks WHERE blend 
= '$1' AND metapackage)
   ) bu
   LEFT OUTER JOIN (
     SELECT id, array_agg(tag) AS tags FROM bugs_tags GROUP BY id
diff --git a/webtools/bugs_udd.py b/webtools/bugs_udd.py
index 72e1a64..a2c24d0 100755
--- a/webtools/bugs_udd.py
+++ b/webtools/bugs_udd.py
@@ -115,7 +115,7 @@ def main():
     """
     _execute_udd_query(query)
 
-    STATES = ('depends', 'suggests', 'done')
+    STATES = ['depends', 'suggests', 'done']
     SEVERITIES = ('critical', 'grave', 'serious', 'important', 'normal', 
'minor', 'wishlist')
 
     # initialise bugs_data dictionary for all tasks
@@ -211,7 +211,6 @@ def main():
         print >>f
     f.close()
 
-    exit(1)
     # Define directories used
     current_dir  = os.path.dirname(__file__)
     # locale_dir   = os.path.join(current_dir, 'locale')
@@ -220,7 +219,7 @@ def main():
     # initialize gensi
     loader = TemplateLoader([template_dir], auto_reload=True)
     
-    outputdir = CheckOrCreateOutputDir(config['outputdir'],'thermometer')
+    outputdir = CheckOrCreateOutputDir(config['outputdir'],'bugs_udd') # 
FIXME: as long as we are not finished use different dir
     if outputdir == None:
             exit(-1)
     
@@ -232,7 +231,7 @@ def main():
 
     data={}
     data['projectname'] = blendname
-    data['blend_data']  = blend_data
+    data['bugs_data']   = bugs_data
     if config.has_key('advertising') and config['advertising'] != None:
         # we have to remove the gettext _() call which was inserted into the 
config
         # file to enable easy input for config file editors - but the call has 
to
@@ -243,17 +242,6 @@ def main():
     else:
         data['projectadvertising'] = None
 
-    legend = [
-               ['upToDate',        'Up to date'],
-               ['debianOutOfDate', 'Debian stable behind unstable'],
-               ['ubuntuOutOfDate', 'Ubuntu behind Debian unstable'],
-               ['unpackaged',      'Not packaged'],
-               ['obsolete',        'Obsolete'],
-               ['newer-in-debian', 'Upstream behind unstable'],
-               ['uptodate',        'Unstable fits upstream'],
-               ['outdated',        'Unstable behind upstream'],
-             ]
-    data['legend']     = legend
     data['summary']           = to_unicode(_('Summary'))
     data['idxsummary']        = to_unicode(_("""A %sDebian Pure Blend%s is a 
Debian internal project which assembles
 a set of packages that might help users to solve certain tasks of their work.  
The list on
@@ -261,29 +249,191 @@ the right shows the tasks of %s.""" ) \
                                       % ('<a 
href="http://blends.alioth.debian.org/blends/";>', '</a>', data['projectname']))
     data['idxsummary']        = Markup(to_unicode(data['idxsummary']))
 
-    for key in ('homepage', 'projecturl', 'projectname', 'logourl', 
'ubuntuhome', 'projectubuntu'):
-        data[key] = config[key]
-    data['updatetimestamp']   = to_unicode(_('Last update:')) + ' ' + 
formatdate(time.mktime(t.timetuple()))
-
-    data['thermometer']  = blendname + '_thermometer.html'
-    os.system("ln -sf %s %s/index.html" % (data['thermometer'], outputdir))
-    data['uthermometer'] = 'ubuntu_' + blendname + '_thermometer.html'
-    outputfile  = outputdir + '/' + data['thermometer']
-    uoutputfile = outputdir + '/' + data['uthermometer']
+    t = datetime.now()
+    data['lang']              = 'en'
+    data['othertasks']        = _("Links to other tasks")
+    data['taskslink']         = _("Tasks")
+    data['bugslink']          = _("Tasks overview")
+    data['legend']            = _("Legend")
+    data['bugsofpackage']     = _("Bugs of package")
+    data['totalbugs']         = _("Total bugs")
+    data['openbugs']          = _("Open bugs")
+    data['fixedbugs']         = _("Fixed bugs")
+    data['summary']           = _('Summary')
+    data['bugssummary']       = _("""A %sDebian Pure Blend%s is a Debian 
internal project which assembles
+    a set of packages that might help users to solve certain tasks of their 
work.  This page should be helpful
+    to track down the bugs of packages that are interesting for the %s project 
to enable developers a quick
+    overview about possible problems.""" ) \
+                                          % ('<a 
href="http://blends.alioth.debian.org/blends/";>', '</a>', data['projectname'])
+    data['bugssummary']        = Markup(data['bugssummary'])
+    data['gtstrBugsPage']     = _("Bugs page")
+    data['gtstrListOfBugspages'] = _("This is a list of metapackages.  The 
links are leading to the respective bugs page.")
+    data['updatetimestamp']   = _('Last update:') + ' ' + 
formatdate(time.mktime(t.timetuple()))
+    data['weightexplanation'] = _("""To estimate the overall status of the 
packages in the dependencies of
+    a metapackage a weighted severity is calculated.  Done bugs are ignored 
and bugs in dependent and
+    recommended packages are weighted by factor three compared to suggested 
packages.  Release critical
+    bugs have a much larger weight than important, while the contribution of 
normal bugs is even smaller
+    and minor bugs have a very small weight.  Wishlist bugs are ignored in 
this calculation.  The resulting
+    sum is compared to some boundaries to find a verbal form.  The actual 
numbers need some adjustment
+    to make real sense - this evaluation method is in testing phase.""")
+    data['weightdetails']     = _("The severities of bugs are weighted as 
follows")
+    
+    if data['advertising'] != None:
+       # If data['advertising'] is enclosed in _() gettext tries to ask for 
translations of 'advertising'
+       # which makes no sense.  That's why this is masked by an extra string 
variable
+       advertising = data['advertising']
+       ##data['projectadvertising'] = _(advertising) # Hopefully translation 
will work this way ...
+       # Genshi needs explicite information that it is dealing with an UTF-8 
string which should not be changed
+       advertising = _(advertising)
+       data['projectadvertising'] = Markup(unicode(advertising))# , 'utf-8'))
+    else:
+       data['projectadvertising'] = None
+    
+    data['assessments']     = [ (EXCELLENT,    'excellent'),
+                                (VERYGOOD,     'verygood'),
+                                (GOOD,         'good'),
+                                (SATISFACTORY, 'satisfactory'),
+                                (PASS,         'pass'),
+                                (BAD,          'bad')
+                              ]
+    
+    nbugs           = {}
+    ndone           = {}
+    buglist         = {}
+    severitysummary = {} # Number of bugs in different severity / dependency 
classes
+    weightedsev     = {} # verbal interpretation of weighted bugs
+    weightedclass   = {} # CSS class according bug weight
+    weighttask      = {} # weighted severity as number per task
+    severitystat    = {} # Count bugs with different severities per task
+    for task in (): ## FIXME:  bugs_data:
+       pkgbugs       = []
+       nbugs[task]   = 0
+       ndone[task]   = 0
+       buglist[task] = {}
+    
+       # query bugs of meta package name
+       pkg = { 'pkgname'    : data['tasks'][task].metapkg.pkg,
+               'source'     : None,
+               'homepage'   : None,
+               'vcs-browser': None,
+               'maintainer' : None,
+             }
+       if data['tasks'][task].metapkg.properties['vcs-browser'] != 
HOMEPAGENONE:
+               pkg['vcs-browser'] = 
data['tasks'][task].metapkg.properties['vcs-browser']
+       if data['tasks'][task].metapkg.responsible != None:
+               pkg['maintainer']  = data['tasks'][task].metapkg.responsible
+       pkgbug_oad = PackageBugsOpenAndDone(pkg)
+       # the metapackage itself belongs to the list do dependent packages
+       if pkgbug_oad.open.pkgname:
+               buglist[task][DEPENDENT].append(pkgbug_oad.open)
+               nbugs[task] += pkgbug_oad.open.nbugs
+       if pkgbug_oad.done.pkgname:
+               buglist[task][DONE].append(pkgbug_oad.done)
+               ndone[task] += pkgbug_oad.done.nbugs
+    
+       for pkg in packages[task]:
+               pkgbug_oad = PackageBugsOpenAndDone(pkg)
+               if pkgbug_oad.open.pkgname:
+                       
buglist[task][pkg['bugrelevantdependency']].append(pkgbug_oad.open)
+               if pkgbug_oad.done.pkgname:
+                       buglist[task][DONE].append(pkgbug_oad.done)
+               nbugs[task] += pkgbug_oad.open.nbugs
+               ndone[task] += pkgbug_oad.done.nbugs
+    
+       severitysummary[task] = {}
+       wsev = 0  # sumarise weighted severities
+       severitystat[task] = {}
+       for cat in BUGLISTCAT:
+               curbuglist = buglist[task][cat]
+               if len(curbuglist.pkgbugs) > 0:
+                       # sort lists of PkgBug objects inside the three 
categories
+                       curbuglist.pkgbugs.sort()
+               severitysummary[task][cat] = ''
+               severitystat[task][cat] = {}
+               if cat != DONE:
+                       sevsum = ''
+                       komma  = ''
+                       fac = 1
+                       if cat == DEPENDENT:
+                               fac = 3
+                       for s in SEVERITIES:
+                               if curbuglist.severities[s] > 0:
+                                       sevsum += komma + 
str(curbuglist.severities[s]) + ' ' + s
+                                       komma   = ', '
+                               severitystat[task][cat][s] = 
curbuglist.severities[s]
+                               # calculate weighted severity for whole 
metapackage
+                               wsev += fac * weight[s] * 
curbuglist.severities[s]
+                       severitysummary[task][cat] = sevsum
+       if   wsev < data['assessments'][0][0]:
+               weightedsev[task]   = _('Metapackage is in excellent shape')
+               weightedclass[task] = data['assessments'][0][1]
+       elif wsev < data['assessments'][1][0]:
+               weightedsev[task]   = _('Metapackage is in very good shape')
+               weightedclass[task] = data['assessments'][1][1]
+       elif wsev < data['assessments'][2][0]:
+               weightedsev[task]   = _('Metapackage is in good shape')
+               weightedclass[task] = data['assessments'][2][1]
+       elif wsev < data['assessments'][3][0]:
+               weightedsev[task]   = _('Consider looking into bugs of this 
metapackage')
+               weightedclass[task] = data['assessments'][3][1]
+       elif wsev < data['assessments'][4][0]:
+               weightedsev[task]   = _('Looking into bugs of this metapackage 
is recommended')
+               weightedclass[task] = data['assessments'][4][1]
+       else:
+               weightedsev[task]   = _('Immediately looking into bugs of the 
dependencies of this metapackage is advised')
+               weightedclass[task] = data['assessments'][5][1]
+       weightedsev[task] += ' (%i)' % wsev
+       weighttask[task]   = wsev
+    
+    data['headings'] = {DEPENDENT : _('Open bugs in dependent packages'),
+                        SUGGESTED : _('Open bugs in suggested packages'),
+                        DONE      : _('Done bugs')
+                       }
+    data['nobugs']   = {DEPENDENT : _('No open bugs in dependent packages'),
+                        SUGGESTED : _('No open bugs in suggested packages'),
+                        DONE      : _('No done bugs')
+                       }
+    data['cssclass'] = {DEPENDENT : 'bugsdependent',
+                        SUGGESTED : 'bugssuggested',
+                        DONE      : 'bugsdone'
+                       }
+    
+    data['nbugs']           = nbugs
+    data['ndone']           = ndone
+    data['buglistcat']      = BUGLISTCAT
+    data['severities']      = SEVERITIES
+    data['weight']          = weight
+    data['DEPENDENT']       = DEPENDENT
+    data['SUGGESTED']       = SUGGESTED
+    data['nohomepage']      = _('Homepage not available')
+    data['novcsbrowser']    = _('Not maintained in Vcs')
+    data['vcslocation']     = _('Vcs')
+    
+    data['weighttask']      = weighttask
+    data['weightedclass']   = weightedclass
+    
+    for task in bugs_data:
+       data['task']            = task
+       #data['buglist']         = buglist[task]
+       #data['severitysummary'] = severitysummary[task]
+       #data['weightedsev']     = weightedsev[task]
+       #data['severitystat']    = severitystat[task]
+    
+       template = loader.load('bugs_udd.xhtml')
+       f = open(outputdir + '/' + task + '.html', 'w')
+       print >> f, template.generate(**data).render('xhtml')
+    
+       f.close()
+    
+    template = loader.load('bugs_idx_udd.xhtml')
+    outputfile = outputdir + '/index.html'
     try:
-        os.unlink(outputfile)
-        os.unlink(uoutputfile)
+       os.unlink(outputfile)
     except: # simply continue if file does not exist
-        pass
-
+       pass
     f = open(outputfile, 'w')
-    template = loader.load('thermometer.xhtml')
     print >> f, template.generate(**data).render('xhtml')
     f.close()
-    f = open(uoutputfile, 'w')
-    utemplate = loader.load('uthermometer.xhtml')
-    print >> f, utemplate.generate(**data).render('xhtml')
-    f.close()
 
 if __name__ == '__main__':
     main()

-- 
Static and dynamic websites for Debian Pure Blends

_______________________________________________
Blends-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/blends-commit

Reply via email to