Browse Source

Changes for reportbug 2.52: added support for new p.d.o format.

suites/jessie-proposed-backports
Chris Lawrence 19 years ago
parent
commit
4a3ed8b516
  1. 78
      checkversions.py
  2. 6
      debian/changelog
  3. 5
      reportbug
  4. 16
      reportbug.py

78
checkversions.py

@ -2,7 +2,7 @@
# checkversions.py - Find if the installed version of a package is the latest
#
# Written by Chris Lawrence <lawrencc@debian.org>
# (C) 2002-03 Chris Lawrence
# (C) 2002-04 Chris Lawrence
#
# This program is freely distributable per the following license:
#
@ -20,6 +20,8 @@
## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
## SOFTWARE.
#
# $Id: checkversions.py,v 1.2 2004-03-13 02:37:51 lawrencc Exp $
#
# Version ##VERSION##; see changelog for revision history
import sgmllib, os, re, sys, urllib2
@ -29,15 +31,16 @@ from reportbug_exceptions import *
PACKAGES_URL = 'http://packages.debian.org/%s'
INCOMING_URL = 'http://incoming.debian.org/'
# The format is a table. We take the rows that have two complete columns
# only...
# The format is an unordered list
class PackagesParser(sgmllib.SGMLParser):
def __init__(self):
def __init__(self, arch='i386'):
sgmllib.SGMLParser.__init__(self)
self.versions = {}
self.savedata = None
self.row = None
self.arch = arch
self.dist = None
# --- Formatter interface, taking care of 'savedata' mode;
# shouldn't need to be overridden
@ -56,37 +59,42 @@ class PackagesParser(sgmllib.SGMLParser):
if not mode and data is not None: data = ' '.join(data.split())
return data
def start_tr(self, attrs):
def start_li(self, attrs):
if self.row is not None:
self.end_tr()
self.end_li()
self.row = []
def end_tr(self):
if self.savedata:
self.end_td()
if self.row:
dist = self.row[0].strip()
if dist:
version = self.row[1].strip().split()[1]
self.versions[dist] = version
self.row = None
def start_td(self, attrs):
if self.savedata:
self.end_td()
def start_a(self, attrs):
if self.row is not None:
self.save_bgn()
def end_td(self):
if self.row is not None:
self.row.append(self.save_end())
def end_a(self):
if self.row is not None and self.savedata:
self.dist = self.save_end()
def lineend(self):
line = self.save_end().strip()
if self.arch in line.split(' '):
version = line.split(': ', 1)
self.versions[self.dist] = version[0]
def start_br(self, attrs):
if self.savedata:
self.lineend()
self.save_bgn()
def end_li(self):
if self.savedata:
self.lineend()
self.row = None
class IncomingParser(sgmllib.SGMLParser):
def __init__(self, package):
def __init__(self, package, arch='i386'):
sgmllib.SGMLParser.__init__(self)
self.found = []
self.savedata = None
self.package = re.compile(re.escape(package)+r'_([^_]+)_[^.]+.deb')
arch = r'(?:all|'+re.escape(arch)+')'
self.package = re.compile(re.escape(package)+r'_([^_]+)_'+arch+'.deb')
def start_a(self, attrs):
for attrib, value in attrs:
@ -114,7 +122,7 @@ def later_version(a, b):
return b
return a
def get_versions_available(package, dists=None, http_proxy=None):
def get_versions_available(package, dists=None, http_proxy=None, arch='i386'):
if not dists:
dists = ('stable', 'testing', 'unstable')
@ -128,7 +136,7 @@ def get_versions_available(package, dists=None, http_proxy=None):
if not page:
return {}
parser = PackagesParser()
parser = PackagesParser(arch)
parser.feed(page.read())
parser.close()
page.close()
@ -140,7 +148,7 @@ def get_versions_available(package, dists=None, http_proxy=None):
return versions
def get_incoming_version(package, http_proxy=None):
def get_incoming_version(package, http_proxy=None, arch='i386'):
try:
page = open_url(INCOMING_URL, http_proxy)
except NoNetwork:
@ -151,7 +159,7 @@ def get_incoming_version(package, http_proxy=None):
if not page:
return None
parser = IncomingParser(package)
parser = IncomingParser(package, arch)
parser.feed(page.read())
parser.close()
page.close()
@ -161,16 +169,16 @@ def get_incoming_version(package, http_proxy=None):
return None
def check_available(package, version, dists=None, check_incoming=1,
http_proxy=None):
def check_available(package, version, dists=None, check_incoming=True,
http_proxy=None, arch='i386'):
avail = {}
if check_incoming:
iv = get_incoming_version(package, http_proxy)
iv = get_incoming_version(package, http_proxy, arch)
if iv:
avail['incoming'] = iv
avail.update(get_versions_available(package, dists, http_proxy))
avail.update(get_versions_available(package, dists, http_proxy, arch))
new = {}
newer = 0
@ -192,6 +200,6 @@ def check_available(package, version, dists=None, check_incoming=1,
return new, False
if __name__=='__main__':
print check_available('mozilla-browser', '2:1.5-3')
print check_available('reportbug', '2.39')
print check_available('mozilla-browser', '2:1.5-3', arch='s390')
print check_available('reportbug', '2.51', arch='i386')
print check_available('dpkg', '1.10.2', arch='sparc')

6
debian/changelog

@ -1,3 +1,9 @@
reportbug (2.52) unstable; urgency=medium
* Support new packages.debian.org pages. (Closes: #237068)
-- Chris Lawrence <lawrencc@debian.org> Thu, 11 Mar 2004 16:21:34 -0600
reportbug (2.51) unstable; urgency=low
* Support reporting bugs in source packages that have exactly one binary

5
reportbug

@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE."""
#
# Version ##VERSION##; see changelog for revision history
# $Id: reportbug,v 1.25 2004-03-08 07:12:00 lawrencc Exp $
# $Id: reportbug,v 1.26 2004-03-13 02:37:51 lawrencc Exp $
import site
@ -1116,9 +1116,10 @@ def main():
elif check_available and not (options.kudos or notatty or
options.offline):
ewrite('Checking for newer versions at packages.debian.org...\n')
arch = reportbug.get_arch()
(avail, toonew) = checkversions.check_available(
package, pkgversion, check_incoming=(mode > MODE_STANDARD),
http_proxy=options.http_proxy)
http_proxy=options.http_proxy, arch=arch)
if toonew:
if not ui.yes_no(
'\nYour version of %s (%s) is newer than that in Debian!\n'

16
reportbug.py

@ -1,7 +1,7 @@
#
# Reportbug module - common functions for reportbug and greportbug
# Written by Chris Lawrence <lawrencc@debian.org>
# Copyright (C) 1999-2003 Chris Lawrence
# Copyright (C) 1999-2004 Chris Lawrence
#
# This program is freely distributable per the following license:
#
@ -21,7 +21,7 @@
#
# Version ##VERSION##; see changelog for revision history
#
# $Id: reportbug.py,v 1.7 2004-03-05 20:30:07 lawrencc Exp $
# $Id: reportbug.py,v 1.8 2004-03-13 02:37:51 lawrencc Exp $
import time, sys, os, locale, re, pwd, commands, shlex, debianbts, rfc822
import socket
@ -551,6 +551,16 @@ def get_debian_release_info():
return debinfo
def get_arch():
arch = commands.getoutput('COLUMNS=79 dpkg --print-installation-architecture 2>/dev/null')
if not arch:
un = os.uname()
arch = un[4]
arch = re.sub(r'i[456]86', 'i386', arch)
arch = re.sub(r's390x', 's390', arch)
arch = re.sub(r'ppc', 'powerpc', arch)
return arch
def generate_blank_report(package, pkgversion, severity, justification,
depinfo, confinfo, foundfile='', incfiles='',
system='debian', exinfo=0, type=None, klass='',
@ -560,7 +570,7 @@ def generate_blank_report(package, pkgversion, severity, justification,
debinfo = ''
if debianbts.SYSTEMS[system]['query-dpkg']:
debinfo += get_debian_release_info()
debarch = commands.getoutput('COLUMNS=79 dpkg --print-installation-architecture 2>/dev/null')
debarch = get_arch()
if debarch:
if utsmachine == debarch:
debinfo += 'Architecture: %s\n' % (debarch)

Loading…
Cancel
Save