blob: a000ac80c9ba431925ec7db4409ae421688230aa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/usr/bin/env ruby
require 'nokogiri'
require 'json'
XML = '.tmp/packages.xml'
xml = nil
begin
xml = Nokogiri::XML(File.open(XML))
# atom is mainly one namespace
xml.remove_namespaces!
rescue
# Bail out if it's not valid XML
abort("#{XML} is not valid XML")
end
packages ||= { 'updates' => [] }
xml.xpath('/feed/entry').each do |item|
item_data = {}
entry_by_tagname = {}
item.children.each do |tag|
entry_by_tagname[tag.name] = tag
end
# Have to split out CAT/PN from CPV, the easiest place is the id
# element.
if entry_by_tagname['id'].text =~ /^tag:packages.gentoo.org,(\d{4}-\d{2}-\d{2}):\/package\/(.*)/ then
item_data['date'] = $1
item_data['atom'] = item_data['atom_cpv'] = $2
item_data['atom_c'], item_data['atom_pn'] = item_data['atom'].split('/', 2)
item_data['atom_pv'] = nil
if entry_by_tagname['title'].text.start_with?(item_data['atom']) then
item_data['atom_pv'] = entry_by_tagname['title'].text.delete_prefix(item_data['atom']+"-")
end
item_data['description'] = entry_by_tagname['summary'].text
item_data['uri'] = entry_by_tagname['link']['href']
if item_data['atom_pv'] then
item_data['atom_cpv'] = sprintf('%s/%s-%s',
item_data['atom_c'],
item_data['atom_pn'],
item_data['atom_pv'])
end
packages['updates'] << item_data
end
end
File.open("data/packages.json","w") do |f|
f.write(packages.to_json)
end
|