]> err.no Git - dak/commitdiff
merge ftpmaster branch
authorThomas Viehmann <tv@beamnet.de>
Sat, 3 May 2008 10:25:00 +0000 (10:25 +0000)
committerThomas Viehmann <tv@beamnet.de>
Sat, 3 May 2008 10:25:00 +0000 (10:25 +0000)
1  2 
dak/examine_package.py
dak/show_new.py

index 626b9327c39fab2cfb9dd45eeed599bb8f4e5db9,5080d3482b3876e6f4de6297769a83f19aa6ccd6..182ed2d87ee19faf436db148917d43a7dd146970
mode 100755,100644..100644
@@@ -89,24 -89,19 +89,24 @@@ PACKAGE can be a .changes, .dsc, .deb o
  # probably xml.sax.saxutils would work as well
  
  def html_escape(s):
-   return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s)
+     return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s)
  
  def escape_if_needed(s):
-   if use_html:
-       return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s)
-   else:
-     return s
-   
+     if use_html:
 -        return re_html_escaping.sub(html_escaping.get, s)
++        return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s)
+     else:
+         return s
 -def headline(s, level=2):
 +def headline(s, level=2, bodyelement=None):
-   if use_html:
-     if bodyelement:
-       print """<thead>
-           <tr><th colspan="2" class="title" onclick="toggle('%(bodyelement)s', 'table-row-group', 'table-row-group')">%(title)s</th></tr>
-         </thead>"""%{"bodyelement":bodyelement,"title":html_escape(s)}
+     if use_html:
 -        print "<h%d>%s</h%d>" % (level, html_escape(s), level)
++        if bodyelement:
++            print """<thead>
++                <tr><th colspan="2" class="title" onclick="toggle('%(bodyelement)s', 'table-row-group', 'table-row-group')">%(title)s</th></tr>
++              </thead>"""%{"bodyelement":bodyelement,"title":html_escape(s)}
++        else:
++            print "<h%d>%s</h%d>" % (level, html_escape(s), level)
      else:
-       print "<h%d>%s</h%d>" % (level, html_escape(s), level)
-   else:
-     print "---- %s ----" % (s)
+         print "---- %s ----" % (s)
  
  # Colour definitions, 'end' isn't really for use
  
@@@ -128,53 -123,22 +128,53 @@@ html_colours = 
    'maintainer': ('<span style="color: green">',"</span>")}
  
  def colour_output(s, colour):
-   if use_html:
-     return ("%s%s%s" % (html_colours[colour][0], html_escape(s), html_colours[colour][1]))
-   else:
-     return ("%s%s%s" % (ansi_colours[colour], s, ansi_colours['end']))
+     if use_html:
+         return ("%s%s%s" % (html_colours[colour][0], html_escape(s), html_colours[colour][1]))
+     else:
+         return ("%s%s%s" % (ansi_colours[colour], s, ansi_colours['end']))
  
 -def print_escaped_text(s):
 +def escaped_text(s, strip=False):
-   if use_html:
-     if strip:
-         s = s.strip()
-     return "<pre>%s</pre>" % (s)
-   else:
-     return s  
++    if use_html:
++        if strip:
++            s = s.strip()
++        return "<pre>%s</pre>" % (s)
++    else:
++        return s
 +
 +def formatted_text(s, strip=False):
-   if use_html:
-     if strip:
-         s = s.strip()
-     return "<pre>%s</pre>" % (html_escape(s))
-   else:
-     return s
++    if use_html:
++        if strip:
++            s = s.strip()
++        return "<pre>%s</pre>" % (html_escape(s))
++    else:
++        return s
 +
 +def output_row(s):
 +    if use_html:
 +        return """<tr><td>"""+s+"""</td></tr>"""
 +    else:
 +        return s
 +
 +def format_field(k,v):
      if use_html:
 -        print "<pre>%s</pre>" % (s)
 +        return """<tr><td class="key">%s:</td><td class="val">%s</td></tr>"""%(k,v)
      else:
 -        print s
 +        return "%s: %s"%(k,v)
  
 -def print_formatted_text(s):
 +def foldable_output(title, elementnameprefix, content, norow=False):
 +    d = {'elementnameprefix':elementnameprefix}
      if use_html:
 -        print "<pre>%s</pre>" % (html_escape(s))
 +        print """<div id="%(elementnameprefix)s-wrap"><a name="%(elementnameprefix)s" />
 +                   <table class="infobox rfc822">"""%d
 +    headline(title, bodyelement="%(elementnameprefix)s-body"%d)
 +    if use_html:
 +        print """    <tbody id="%(elementnameprefix)s-body" class="infobody">"""%d
 +    if norow:
 +        print content
      else:
 -        print s
 +        print output_row(content)
 +    if use_html:
 +        print """</tbody></table></div>"""
  
  ################################################################################
  
@@@ -227,12 -191,12 +227,12 @@@ def read_control (filename)
  
      deb_file = daklib.utils.open_file(filename)
      try:
-       extracts = apt_inst.debExtractControl(deb_file)
-       control = apt_pkg.ParseSection(extracts)
+         extracts = apt_inst.debExtractControl(deb_file)
+         control = apt_pkg.ParseSection(extracts)
      except:
-       print formatted_text("can't parse control info")
 -        print_formatted_text("can't parse control info")
 -        # TV-COMMENT: this will raise exceptions in two lines
 -        control = ''
++        print formatted_text("can't parse control info")
 +        deb_file.close()
 +        raise
  
      deb_file.close()
  
  
      return (control, control_keys, section, depends, recommends, arch, maintainer)
  
 -def read_dsc (dsc_filename):
 +def read_changes_or_dsc (filename):
      dsc = {}
  
 -    dsc_file = daklib.utils.open_file(dsc_filename)
 +    dsc_file = daklib.utils.open_file(filename)
      try:
-       dsc = daklib.utils.parse_changes(filename)
 -        dsc = daklib.utils.parse_changes(dsc_filename)
++        dsc = daklib.utils.parse_changes(filename)
      except:
-       return formatted_text("can't parse .dsc control info")
 -        print_formatted_text("can't parse control info")
++        return formatted_text("can't parse .dsc control info")
      dsc_file.close()
  
 -    filecontents = escape_if_needed(strip_pgp_signature(dsc_filename))
 -
 -    if dsc.has_key("build-depends"):
 -        builddep = split_depends(dsc["build-depends"])
 -        builddepstr = create_depends_string(builddep)
 -        filecontents = re_builddep.sub("Build-Depends: "+builddepstr, filecontents)
 -
 -    if dsc.has_key("build-depends-indep"):
 -        builddepindstr = create_depends_string(split_depends(dsc["build-depends-indep"]))
 -        filecontents = re_builddepind.sub("Build-Depends-Indep: "+builddepindstr, filecontents)
 +    filecontents = strip_pgp_signature(filename)
 +    keysinorder = []
 +    for l in filecontents.split('\n'):
 +        m = re.match(r'([-a-zA-Z0-9]*):', l)
 +        if m:
 +            keysinorder.append(m.group(1))
 +
 +    for k in dsc.keys():
 +        if k in ("build-depends","build-depends-indep"):
 +            dsc[k] = create_depends_string(split_depends(dsc[k]))
 +        elif k == "architecture":
 +            if (dsc["architecture"] != "any"):
 +                dsc['architecture'] = colour_output(dsc["architecture"], 'arch')
 +        elif k in ("files","changes","description"):
 +            if use_html:
 +                dsc[k] = formatted_text(dsc[k], strip=True)
 +            else:
 +                dsc[k] = ('\n'+'\n'.join(map(lambda x: ' '+x, dsc[k].split('\n')))).rstrip()
 +        else:
 +            dsc[k] = escape_if_needed(dsc[k])
  
 -    if dsc.has_key("architecture") :
 -        if (dsc["architecture"] != "any"):
 -            newarch = colour_output(dsc["architecture"], 'arch')
 -            filecontents = re_arch.sub("Architecture: " + newarch, filecontents)
 +    keysinorder = filter(lambda x: not x.lower().startswith('checksums-'), keysinorder)
  
 +    filecontents = '\n'.join(map(lambda x: format_field(x,dsc[x.lower()]), keysinorder))+'\n'
      return filecontents
  
  def create_depends_string (depends_tree):
  def output_deb_info(filename):
      (control, control_keys, section, depends, recommends, arch, maintainer) = read_control(filename)
  
 -    to_print = ""
      if control == '':
-       return formatted_text("no control info")
 -        print_formatted_text("no control info")
 -    else:
 -        for key in control_keys :
 -            output = " " + key + ": "
 -            if key == 'Depends':
 -                output += create_depends_string(depends)
 -            elif key == 'Recommends':
 -                output += create_depends_string(recommends)
 -            elif key == 'Section':
 -                output += section
 -            elif key == 'Architecture':
 -                output += arch
 -            elif key == 'Maintainer':
 -                output += maintainer
 -            elif key == 'Description':
 -                desc = control.Find(key)
 -                desc = re_newlinespace.sub('\n ', desc)
 -                output += escape_if_needed(desc)
 -            else:
 -                output += escape_if_needed(control.Find(key))
 -            to_print += output + '\n'
 -        print_escaped_text(to_print)
++        return formatted_text("no control info")
 +    to_print = ""
 +    for key in control_keys :
 +        if key == 'Depends':
 +            field_value = create_depends_string(depends)
 +        elif key == 'Recommends':
 +            field_value = create_depends_string(recommends)
 +        elif key == 'Section':
 +            field_value = section
 +        elif key == 'Architecture':
 +            field_value = arch
 +        elif key == 'Maintainer':
 +            field_value = maintainer
 +        elif key == 'Description':
 +            desc = control.Find(key)
 +            desc = re_newlinespace.sub('\n ', desc)
 +            field_value = escape_if_needed(desc)
 +        else:
 +            field_value = escape_if_needed(control.Find(key))
 +        to_print += " "+format_field(key,field_value)+'\n'
 +    return to_print
  
  def do_command (command, filename, escaped=0):
      o = os.popen("%s %s" % (command, filename))
@@@ -405,51 -365,51 +405,51 @@@ def get_copyright (deb_filename)
      copyright = o.read()
      copyrightmd5 = md5.md5(copyright).hexdigest()
  
 +    res = ""
      if printed_copyrights.has_key(copyrightmd5) and printed_copyrights[copyrightmd5] != "%s (%s)" % (package, deb_filename):
 -        print_formatted_text( "NOTE: Copyright is the same as %s.\n" % \
 -                (printed_copyrights[copyrightmd5]))
 +        res += formatted_text( "NOTE: Copyright is the same as %s.\n\n" % \
 +                               (printed_copyrights[copyrightmd5]))
      else:
-       printed_copyrights[copyrightmd5] = "%s (%s)" % (package, deb_filename)
+         printed_copyrights[copyrightmd5] = "%s (%s)" % (package, deb_filename)
 -
 -    print_formatted_text(copyright)
 +    return res+formatted_text(copyright)
  
  def check_dsc (dsc_filename):
 -    headline(".dsc file for %s" % (dsc_filename))
 -    (dsc) = read_dsc(dsc_filename)
 -    print_escaped_text(dsc)
 -    headline("lintian check for %s" % (dsc_filename))
 -    do_lintian(dsc_filename)
 +    (dsc) = read_changes_or_dsc(dsc_filename)
 +    foldable_output(dsc_filename, "dsc", dsc, norow=True)
 +    foldable_output("lintian check for %s" % dsc_filename, "source-lintian", do_lintian(dsc_filename))
  
  def check_deb (deb_filename):
      filename = os.path.basename(deb_filename)
 +    packagename = filename.split('_')[0]
  
      if filename.endswith(".udeb"):
-       is_a_udeb = 1
+         is_a_udeb = 1
      else:
-       is_a_udeb = 0
+         is_a_udeb = 0
  
 -    headline("control file for %s" % (filename))
 -    #do_command ("dpkg -I", deb_filename)
 -    output_deb_info(deb_filename)
 +
 +    foldable_output("control file for %s" % (filename), "binary-%s-control"%packagename,
 +                    output_deb_info(deb_filename), norow=True)
  
      if is_a_udeb:
 -        headline("skipping lintian check for udeb")
 -        print
 +        foldable_output("skipping lintian check for udeb", "binary-%s-lintian"%packagename,
 +                        "")
      else:
 -        headline("lintian check for %s" % (filename))
 -        do_lintian(deb_filename)
 +        foldable_output("lintian check for %s" % (filename), "binary-%s-lintian"%packagename,
 +                        do_lintian(deb_filename))
  
 -    headline("contents of %s" % (filename))
 -    do_command ("dpkg -c", deb_filename)
 +    foldable_output("contents of %s" % (filename), "binary-%s-contents"%packagename,
 +                    do_command("dpkg -c", deb_filename))
  
      if is_a_udeb:
 -        headline("skipping copyright for udeb")
 +        foldable_output("skipping copyright for udeb", "binary-%s-copyright"%packagename,
 +                        "")
      else:
 -        headline("copyright of %s" % (filename))
 -        print_copyright(deb_filename)
 +        foldable_output("copyright of %s" % (filename), "binary-%s-copyright"%packagename,
 +                        get_copyright(deb_filename))
  
 -    headline("file listing of %s" % (filename))
 -    do_command ("ls -l", deb_filename)
 +    foldable_output("file listing of %s" % (filename),  "binary-%s-file-listing"%packagename,
 +                    do_command("ls -l", deb_filename))
  
  # Read a file, strip the signature and return the modified contents as
  # a string.
diff --cc dak/show_new.py
index a35f4d65d4efa88b1c5d83fade12468293ef105e,19566881ca2d2bdbf6606d8bd1185d3423c0383d..34baba954940946f1184253da5e40a9cd40cf051
mode 100755,100644..100644
@@@ -44,98 -44,54 +44,98 @@@ sources = set(
  ################################################################################
  ################################################################################
  
 -def html_header(name):
 +def html_header(name, filestoexamine):
      if name.endswith('.changes'):
          name = ' '.join(name.split('_')[:2])
 -    print """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 -        <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">"""
 -    print "<title>%s - Debian NEW package overview</title>" % (name)
 -    print """<link type="text/css" rel="stylesheet" href="/style.css">
 -        <link rel="shortcut icon" href="http://www.debian.org/favicon.ico">
 -        </head>
 -        <body>
 -        <div align="center">
 -        <a href="http://www.debian.org/">
 -     <img src="http://www.debian.org/logos/openlogo-nd-50.png" border="0" hspace="0" vspace="0" alt=""></a>
 -        <a href="http://www.debian.org/">
 -     <img src="http://www.debian.org/Pics/debian.png" border="0" hspace="0" vspace="0" alt="Debian Project"></a>
 -        </div>
 -        <br />
 -        <table class="reddy" width="100%">
 -        <tr>
 -        <td class="reddy">
 -    <img src="http://www.debian.org/Pics/red-upperleft.png" align="left" border="0" hspace="0" vspace="0"
 -     alt="" width="15" height="16"></td>"""
 -    print """<td rowspan="2" class="reddy">Debian NEW package overview for %s</td>""" % (name)
 -    print """<td class="reddy">
 -    <img src="http://www.debian.org/Pics/red-upperright.png" align="right" border="0" hspace="0" vspace="0"
 -     alt="" width="16" height="16"></td>
 -        </tr>
 -        <tr>
 -        <td class="reddy">
 -    <img src="http://www.debian.org/Pics/red-lowerleft.png" align="left" border="0" hspace="0" vspace="0"
 -     alt="" width="16" height="16"></td>
 -        <td class="reddy">
 -    <img src="http://www.debian.org/Pics/red-lowerright.png" align="right" border="0" hspace="0" vspace="0"
 -     alt="" width="15" height="16"></td>
 -        </tr>
 -        </table>
 -        """
 +    print """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 +  <head>
 +    <meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8"
 +    />
 +    <title>%(name)s - Debian NEW package overview</title>
 +    <link type="text/css" rel="stylesheet" href="style.css" />
 +    <link rel="shortcut icon" href="http://www.debian.org/favicon.ico" />
 +    <script type="text/javascript">
 +      //<![CDATA[
 +      <!--
 +      function toggle(id, initial, display) {
 +        var o = document.getElementById(id);
 +        toggleObj(o, initial, display);
 +      }
 +      function show(id, display) {
 +        var o = document.getElementById(id);
 +        o.style.display = 'table-row-group';
 +      }
 +      function toggleObj(o, initial, display) {
 +        if(! o.style.display)
 +          o.style.display = initial;
 +        if(o.style.display == display) {
 +          o.style.display = "none";
 +        } else {
 +          o.style.display = display;
 +        }
 +      }
 +      //-->
 +      //]]>
 +    </script>
 +  </head>
 +  <body>
 +    <div id="logo">
 +      <a href="http://www.debian.org/">
 +        <img src="http://www.debian.org/logos/openlogo-nd-50.png"
 +        alt="debian logo" /></a>
 +      <a href="http://www.debian.org/">
 +        <img src="http://www.debian.org/Pics/debian.png"
 +        alt="Debian Project" /></a>
 +    </div>
 +    <div id="titleblock">
 +
 +      <img src="http://www.debian.org/Pics/red-upperleft.png"
 +      id="red-upperleft" alt="corner image"/>
 +      <img src="http://www.debian.org/Pics/red-lowerleft.png"
 +      id="red-lowerleft" alt="corner image"/>
 +      <img src="http://www.debian.org/Pics/red-upperright.png"
 +      id="red-upperright" alt="corner image"/>
 +      <img src="http://www.debian.org/Pics/red-lowerright.png"
 +      id="red-lowerright" alt="corner image"/>
 +      <span class="title">
 +        Debian NEW package overview for %(name)s
 +      </span>
 +    </div>
 +    """%{"name":name}
 +
 +    # we assume only one source (.dsc) per changes here
 +    print """
 +    <div id="menu">
 +      <p class="title">Navigation</p>
 +      <p><a href="#changes" onclick="show('changes-body')">.changes</a></p>
 +      <p><a href="#dsc" onclick="show('dsc-body')">.dsc</a></p>
 +      <p><a href="#source-lintian" onclick="show('source-lintian-body')">source lintian</a></p>
 +      """
 +    for fn in filter(lambda x: x.endswith('.deb') or x.endswith('.udeb'),filestoexamine):
-       packagename = fn.split('_')[0]
-       print """
-       <p class="subtitle">%(pkg)s</p>
-       <p><a href="#binary-%(pkg)s-control" onclick="show('binary-%(pkg)s-control-body')">control file</a></p>
-       <p><a href="#binary-%(pkg)s-lintian" onclick="show('binary-%(pkg)s-lintian-body')">binary lintian</a></p>
-       <p><a href="#binary-%(pkg)s-contents" onclick="show('binary-%(pkg)s-contents-body')">.deb contents</a></p>
-       <p><a href="#binary-%(pkg)s-copyright" onclick="show('binary-%(pkg)s-copyright-body')">copyright</a></p>
-       <p><a href="#binary-%(pkg)s-file-listing" onclick="show('binary-%(pkg)s-file-listing-body')">file listing</a></p>
-       """%{"pkg":packagename}
++        packagename = fn.split('_')[0]
++        print """
++        <p class="subtitle">%(pkg)s</p>
++        <p><a href="#binary-%(pkg)s-control" onclick="show('binary-%(pkg)s-control-body')">control file</a></p>
++        <p><a href="#binary-%(pkg)s-lintian" onclick="show('binary-%(pkg)s-lintian-body')">binary lintian</a></p>
++        <p><a href="#binary-%(pkg)s-contents" onclick="show('binary-%(pkg)s-contents-body')">.deb contents</a></p>
++        <p><a href="#binary-%(pkg)s-copyright" onclick="show('binary-%(pkg)s-copyright-body')">copyright</a></p>
++        <p><a href="#binary-%(pkg)s-file-listing" onclick="show('binary-%(pkg)s-file-listing-body')">file listing</a></p>
++        """%{"pkg":packagename}
 +    print "    </div>"
-    
  def html_footer():
 -    print "<p class=\"validate\">Timestamp: %s (UTC)</p>" % (time.strftime("%d.%m.%Y / %H:%M:%S", time.gmtime()))
 -    print """<a href="http://validator.w3.org/check?uri=referer">
 -    <img border="0" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" height="31" width="88"></a>
 -        <a href="http://jigsaw.w3.org/css-validator/check/referer">
 -    <img border="0" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"
 -     height="31" width="88"></a>
 -    """
 -    print "</body></html>"
 -
 +    print """    <p class="validate">Timestamp: %s (UTC)</p>"""% (time.strftime("%d.%m.%Y / %H:%M:%S", time.gmtime()))
 +    print """    <p><a href="http://validator.w3.org/check?uri=referer">
 +      <img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"
 +      style="border: none; height: 31px; width: 88px" /></a>
 +    <a href="http://jigsaw.w3.org/css-validator/check/referer">
 +      <img src="http://jigsaw.w3.org/css-validator/images/vcss"
 +      alt="Valid CSS!" style="border: none; height: 31px; width: 88px" /></a>
 +    </p>
 +  </body>
 +</html>
 +"""
  
  ################################################################################