summaryrefslogtreecommitdiff
blob: 2f7c5fa3032c812c9473bad10556e81894889cd6 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/ruby -w
require 'rexml/document'
require 'find'

include REXML


module MetadataHelper
    def MetadataHelper.isMetadata?(filename)
        filename =~ /metadata\.xml$/
    end

    class Metadata
        attr_reader :herds, :maintainers, :longdescription, :package
        attr_writer :herds, :maintainers, :longdescription, :package
        def initialize()
            self.herds = Array.new
            self.maintainers = Array.new
        end
    end

    class Maintainer
        attr_reader :email, :name
        attr_writer :email, :name
    end


    def MetadataHelper.parse_metadata (filename)
        metadata = Metadata.new

        file = File.new(filename)
        package = File.basename(File.dirname(filename))
        category = File.basename(File.dirname(File.dirname(filename)))
        fullpackage = "#{category}/#{package}"
        metadata.package = fullpackage

        doc = Document.new(file)
        root = doc.root

        puts "Indexing #{filename}..."
        root.elements.each('herd') do |herd|
            metadata.herds.push herd.text
        end

        root.elements.each('maintainer') do |maintainer_node|
            maintainer = Maintainer.new
            email = maintainer_node.elements['email']
            maintainer.email = email.text unless email.nil?
            name = maintainer_node.elements['name']
            maintainer.name = name.text unless name.nil?

            metadata.maintainers.push maintainer
        end
        return metadata
    end

    def MetadataHelper.parse_directory(directory)
        indexed_metadata = []
        targetdir="/local/home/checkouts/gentoo-portage-tree/dev-java"
        Dir.glob("#{targetdir}/**/*/metadata.xml").each do |filename|
#        Find.find("/local/home/checkouts/gentoo-portage-tree/dev-java") do |filename|
            if isMetadata? filename
                metadata = parse_metadata(filename)
                unless metadata.maintainers.empty? and metadata.herds.empty?
                    indexed_metadata.push(metadata)
                end
            end
        end

        return indexed_metadata
    end

    def MetadataHelper.updateDev(dev)
        indexed_metadata = parse_directory("/local/home/checkouts/gentoo-portage-tree/dev-java")

        if dev.packages.nil?
            dev.packages = []
        end
        indexed_metadata.each do |metadata|
            unless metadata.maintainers.empty?
                metadata.maintainers.each do |maintainer|
                    if dev.email == maintainer.email
                        dev.packages.push metadata.package
                    end
                end
                
            end
        end

    end
end



#indexed_metadata.each do |metadata|
#    puts "* #{metadata.package}"
#    unless metadata.herds.empty?
#        puts "\tHerds:"
#        puts "\t\t#{metadata.herds}" unless metadata.herds.empty?
#    end
#    unless metadata.maintainers.empty?
#        puts "\tMaintainers:"
#            metadata.maintainers.each do |maintainer|
#                puts "\t\tname: #{maintainer.name}"
#                puts "\t\temail: #{maintainer.email}"
#            end
#        puts
#    end
#end