42
43
def parse_xorg_page(url, category=None):
43
44
'''Returns a dict of packages parsed from the given url'''
45
package_pattern = '<a href="([\w-]+)-([\d\.]+)\.(tar\.\w+)"'
46
vcs_base = 'http://cgit.freedesktop.org/xorg'
44
48
page = readurl(url)
49
re_pkg = re.compile('<a href="([\w-]+)-([\d\.]+)\.(tar\.\w+)"')
52
re_pkg = re.compile(package_pattern)
50
53
for line in page.split("\n"):
51
54
m = re_pkg.search(line)
55
58
version = m.group(2)
56
59
filename = "%s-%s.%s" %(m.group(1), m.group(2), m.group(3))
57
# TODO: Merge separate .bz2 and .gz entries into a single record. urls?
60
62
'version': version,
61
63
'category': category,
62
'url': os.path.join(url, filename)
64
if name not in packages:
66
packages[name].append(pkg)
71
xorg_top_url = "http://xorg.freedesktop.org/releases/individual"
64
'url': os.path.join(url, filename),
65
'vcs': '%s/%s/%s' %(vcs_base, category, name)
68
# Special case to handle naming irregularities
70
pkg['vcs'] = '%s/%s/%s' %(vcs_base, category, 'libxtrans')
72
if name not in packages:
74
packages[name].append(pkg)
78
def parse_xterm_page(category=None):
79
url = 'ftp://invisible-island.net/xterm/'
80
package_pattern = '(xterm)-(\d+)\.(tgz)'
87
re_pkg = re.compile(package_pattern)
88
for line in page.split("\n"):
89
m = re_pkg.search(line)
94
filename = "%s-%s.%s" %(m.group(1), m.group(2), m.group(3))
97
'version': m.group(2),
99
'url': os.path.join(url, filename),
103
if name not in packages:
105
packages[name].append(pkg)
109
def parse_nvidia_page(category=None):
110
url = 'ftp://download.nvidia.com/XFree86/Linux-x86'
111
package_pattern = '^([\d\.]+)\s+(.*)$'
113
page = readurl('%s/%s' %(url, 'latest.txt'))
118
re_pkg = re.compile(package_pattern)
119
for line in page.split("\n"):
120
m = re_pkg.search(line)
123
name = 'nvidia-graphics-drivers'
126
'version': m.group(1),
127
'category': category,
128
'url': '%s/%s' %(url, m.group(2)),
132
if name not in packages:
134
packages[name].append(pkg)
73
138
if __name__ == "__main__":
74
data = parse_xorg_top(xorg_top_url)
139
data = parse_xorg_top()
140
data.update(parse_nvidia_page())
141
data.update(parse_xterm_page())
143
'distro': 'Upstream',
145
'team': 'ubuntu-x-swat',
75
147
print json.dumps(data, indent=4)