3737
3838"""
3939import os
40- from urllib2 import HTTPError
4140
4241from boss .lab import Lab
4342from boss .obs import BuildServiceParticipant
4443from boss .rpm import extract_rpm
4544
45+
4646class 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:\n HTTP %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:\n HTTP %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