aboutsummaryrefslogtreecommitdiff
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