Skip to content

Commit b35004f

Browse files
authored
Merge pull request #32 from MeeGoIntegration/fix-patterns-cleanup
Fix patterns cleanup
2 parents d68e49b + 749bf8b commit b35004f

File tree

1 file changed

+28
-33
lines changed

1 file changed

+28
-33
lines changed

participants/update_patterns.py

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737
3838
"""
3939
import os
40-
from urllib2 import HTTPError
4140

4241
from boss.lab import Lab
4342
from boss.obs import BuildServiceParticipant
4443
from boss.rpm import extract_rpm
4544

45+
4646
class ParticipantHandler(BuildServiceParticipant):
4747
"""Participant class as defined by the SkyNET API."""
4848

@@ -69,32 +69,36 @@ def handle_wi(self, wid):
6969
project = wid.params.project
7070

7171
orig_patterns = self.obs.getProjectPatternsList(project)
72+
uploaded_patterns = set()
7273

7374
result = True
7475
for package in patterns:
7576
for target in patterns[package]:
7677
for binary in patterns[package][target]:
7778
done, errors = self.__update_patterns(
7879
project, package, target, binary)
80+
uploaded_patterns.update(done)
7981
if errors:
8082
result = False
8183
wid.fields.msg.extend(errors)
82-
if not done and not errors:
84+
elif not done:
8385
result = False
84-
wid.fields.msg.append("No patterns found in %s %s %s" %
85-
(project, target, binary))
86+
wid.fields.msg.append(
87+
"No patterns found in %s %s %s" %
88+
(project, target, binary))
8689

8790
wid.result = result
8891

8992
# only remove old patterns if we were asked to, and no errors
9093
# occured while uploading
9194
if wid.params.clean and not errors:
92-
removed, errors = self.__clean_patterns(project, orig_patterns, done)
95+
removed, errors = self.__clean_patterns(
96+
project, orig_patterns, uploaded_patterns)
9397
if removed:
94-
wid.fields.msg.append("removed old patterns: %s" % " ".join(removed))
98+
wid.fields.msg.append(
99+
"removed old patterns: %s" % " ".join(removed))
95100
if errors:
96101
wid.fields.msg.extend(errors)
97-
98102

99103
def __update_patterns(self, project, package, target, binary):
100104
"""Extracts patterns from rpm and uploads them to project.
@@ -107,50 +111,41 @@ def __update_patterns(self, project, package, target, binary):
107111
with Lab(prefix="update_patterns") as lab:
108112
# Download the rpm
109113
try:
110-
self.obs.getBinary(project, target, package, binary,
111-
lab.real_path(binary))
112-
except HTTPError as exc:
113-
errors.append("Failed to download %s: HTTP %s %s" %
114-
(binary, exc.code, exc.filename))
114+
self.obs.getBinary(
115+
project, target, package, binary, lab.real_path(binary))
115116
except Exception as exc:
117+
self.log.exception("Failed to download %s", binary)
116118
errors.append("Failed to download %s: %s" % (binary, exc))
117119
if errors:
118120
return uploaded, errors
119121
# Extract pattern (xml) files from the rpm
120-
print lab.real_path(binary)
121-
for xml in extract_rpm(lab.real_path(binary), lab.path,
122-
["*.xml"]):
122+
self.log.debug(lab.real_path(binary))
123+
for xml in extract_rpm(lab.real_path(binary), lab.path, ["*.xml"]):
123124
pattern = os.path.basename(xml)
124125
try:
125126
# chop .xml from name
126127
if pattern.endswith(".xml"):
127128
pattern = pattern[:-4]
128129

129130
# Update pattern to project
130-
self.obs.setProjectPattern(project, lab.real_path(xml), name=pattern)
131+
self.obs.setProjectPattern(
132+
project, lab.real_path(xml), name=pattern)
131133
uploaded.append(pattern)
132-
except HTTPError as exc:
133-
errors.append("Failed to upload %s:\nHTTP %s %s\n%s" %
134-
(pattern, exc.code, exc.filename,
135-
exc.fp.read()))
136134
except Exception as exc:
137-
errors.append("Failed to upload %s: %s" %
138-
(pattern, exc))
135+
self.log.exception("Failed to upload %s", pattern)
136+
errors.append("Failed to upload %s: %s" % (pattern, exc))
139137
return uploaded, errors
140138

141139
def __clean_patterns(self, project, orig_patterns, uploaded_patterns):
142140
removed = []
143141
errors = []
144142
for old_pattern in orig_patterns:
145-
if not old_pattern in uploaded_patterns:
146-
try:
147-
self.obs.deleteProjectPattern(project, old_pattern)
148-
removed.append(old_pattern)
149-
except HTTPError as exc:
150-
errors.append("Failed to delete %s:\nHTTP %s %s\n%s" %
151-
(old_pattern, exc.code, exc.filename,
152-
exc.fp.read()))
153-
except Exception as exc:
154-
errors.append("Failed to delete %s: %s" %
155-
(old_pattern, exc))
143+
if old_pattern in uploaded_patterns:
144+
continue
145+
try:
146+
self.obs.deleteProjectPattern(project, old_pattern)
147+
removed.append(old_pattern)
148+
except Exception as exc:
149+
self.log.exception("Failed to delete %s", old_pattern)
150+
errors.append("Failed to delete %s: %s" % (old_pattern, exc))
156151
return removed, errors

0 commit comments

Comments
 (0)