aboutsummaryrefslogtreecommitdiff
blob: 8775af72394b1ded6013caee06d18f73f02c2fd8 (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
#!/usr/bin/python

# must exist because marienz is lazy
cache_dir = './cachedir'
# in seconds
cache_max_age = 100

# python, pyxml
import sys, string, os
import cElementTree as elementtree
import urllib2
import os
import time

if len(sys.argv) < 2:
    print "usage: herds.py herdname"
    sys.exit(1)


root_node = elementtree.parse('./herds.xml')

if (sys.argv[1] == "-a"):
    herds = root_node.findall('herd/name')
    for herd in root_node.findall('herd/name'):
        print herd.text.strip()
    print
    sys.exit(0)

emails = []

for herd in root_node.findall('herd'):
    if herd.findtext('name') == sys.argv[1]:
        for dev in herd.findall('maintainer'):
            role = dev.findtext('role')
            email = dev.findtext('email').split('@')[0]
            if role and os.getenv("VERBOSE") == "1":
                email = '%s(%s)' % (email, role)
            emails.append(email)
        projects = list(herd.findall('maintainingproject'))
        if len(projects) > 1:
            print >> sys.stderr, ("I don't like multiple maintainingprojects "
                                  "per herd, Please fix me")
        if projects:
            project_path = projects[0].text
            cache_file = os.path.join(cache_dir, '%s.xml' % sys.argv[1])
            if (not os.path.exists(cache_file) or
                (time.time() - os.path.getmtime(cache_file) > cache_max_age)):
                # update the cached file
                cache_file_obj = open(cache_file, 'w')
                try:
                    f = urllib2.urlopen(
                        'http://www.gentoo.org%s?passthru=1' % project_path)
                    while True:
                        data = f.read(1024)
                        if not data:
                            break
                        cache_file_obj.write(data)
                    cache_file_obj.close()
                except:
                    # Do not keep a stale cache file around.
                    os.unlink(cache_file)
                    raise

            try:
                project_node = elementtree.parse(cache_file)
            except:
                # Force a reload by killing the cache.
                os.unlink(cache_file)
                raise
            for dev in project_node.findall('dev'):
                emails.append(dev.text.strip())
        break

else:
    print >> sys.stderr, 'no such herd!'

        
if len(emails) < 1:
        print "herd doesn't exist or has no maintainers or herds.xml is out of date"
        # or the mtimedb bug around line 7263 in the portageexit() function is still present"
        sys.exit(1)

emails.sort()
print ", ".join(emails)