forked from openSUSE/openSUSE-release-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsync-rebuild.py
executable file
·106 lines (77 loc) · 2.66 KB
/
sync-rebuild.py
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
#!/usr/bin/python
import sys
import os
import osc
import osc.core
import osc.conf
import xml.etree.ElementTree as ET
import re
results = []
repo = ""
architectures = ["x86_64", "i586"]
pkg = ""
projects = ['openSUSE:Factory', 'openSUSE:Factory:Rebuild']
#initialize osc config
osc.conf.get_config()
def get_prj_results(prj, arch):
url = osc.core.makeurl(osc.conf.config['apiurl'], ['build', prj, 'standard', arch, "_jobhistory?code=lastfailures"])
f = osc.core.http_GET(url)
xml = f.read()
results = []
root = ET.fromstring(xml)
xmllines = root.findall("./jobhist")
for pkg in xmllines:
if pkg.attrib['code'] == 'failed':
results.append(pkg.attrib['package'])
return results
def compare_results(factory, rebuild, testmode):
com_res = set(rebuild).symmetric_difference(set(factory))
if testmode != False:
print com_res
return com_res
def check_pkgs(rebuild_list):
url = osc.core.makeurl(osc.conf.config['apiurl'], ['source', 'openSUSE:Factory'])
f = osc.core.http_GET(url)
xml = f.read()
pkglist = []
root = ET.fromstring(xml)
xmllines = root.findall("./entry")
for pkg in xmllines:
if pkg.attrib['name'] in rebuild_list:
pkglist.append(pkg.attrib['name'])
return pkglist
def rebuild_pkg_in_factory(package, prj, arch, testmode, code=None):
query = { 'cmd': 'rebuild', 'arch': arch }
#prj = "home:jzwickl"
if package:
query['package'] = package
pkg = query['package']
u = osc.core.makeurl(osc.conf.config['apiurl'], ['build', prj], query=query)
if testmode != False:
print "Trigger rebuild for this package: " + u
else:
try:
print 'tried to trigger rebuild for project \'%s\' package \'%s\'' % (prj, pkg)
f = osc.core.http_POST(u)
except:
print 'could not trigger rebuild for project \'%s\' package \'%s\'' % (prj, pkg)
testmode = False
try:
if sys.argv[1] != None:
if sys.argv[1] == '-test':
testmode = True
print "testmode: "+str(testmode)
else:
testmode = False
except:
pass
for arch in architectures:
fact_result = get_prj_results('openSUSE:Factory', arch)
rebuild_result = get_prj_results('openSUSE:Factory:Rebuild', arch)
rebuild_result = check_pkgs(rebuild_result)
fact_result = check_pkgs(fact_result)
result = compare_results(fact_result, rebuild_result, testmode)
print sorted(result)
for package in result:
rebuild_pkg_in_factory(package, 'openSUSE:Factory', arch, testmode, None)
rebuild_pkg_in_factory(package, 'openSUSE:Factory:Rebuild', arch, testmode, None)