Mercurial > hgbook
comparison en/examples/run-example @ 160:745ff473c8c4
Catch more errors.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Mon, 26 Mar 2007 21:25:34 -0700 |
parents | 914babdc99c8 |
children | 8f4c9ae918af |
comparison
equal
deleted
inserted
replaced
159:7355af913937 | 160:745ff473c8c4 |
---|---|
209 (self.name, out)) | 209 (self.name, out)) |
210 return 1 | 210 return 1 |
211 assert os.sep not in out | 211 assert os.sep not in out |
212 if ofp is not None: | 212 if ofp is not None: |
213 ofp.close() | 213 ofp.close() |
214 err = self.rename_output(ofp_basename, ignore) | 214 err |= self.rename_output(ofp_basename, ignore) |
215 if out: | 215 if out: |
216 ofp_basename = '%s.%s' % (self.name, out) | 216 ofp_basename = '%s.%s' % (self.name, out) |
217 ofp = open(ofp_basename + '.tmp', 'w') | 217 ofp = open(ofp_basename + '.tmp', 'w') |
218 else: | 218 else: |
219 ofp = None | 219 ofp = None |
245 try: | 245 try: |
246 ps, output = self.sendreceive('exit\n') | 246 ps, output = self.sendreceive('exit\n') |
247 if ofp is not None: | 247 if ofp is not None: |
248 ofp.write(output) | 248 ofp.write(output) |
249 ofp.close() | 249 ofp.close() |
250 err = self.rename_output(ofp_basename, ignore) | 250 err |= self.rename_output(ofp_basename, ignore) |
251 os.close(self.cfd) | 251 os.close(self.cfd) |
252 except IOError: | 252 except IOError: |
253 pass | 253 pass |
254 os.kill(self.pid, signal.SIGTERM) | 254 os.kill(self.pid, signal.SIGTERM) |
255 pid, rc = os.wait() | 255 pid, rc = os.wait() |
256 if rc: | 256 err = err or rc |
257 if err: | |
257 if os.WIFEXITED(rc): | 258 if os.WIFEXITED(rc): |
258 print >> sys.stderr, '(exit %s)' % os.WEXITSTATUS(rc) | 259 print >> sys.stderr, '(exit %s)' % os.WEXITSTATUS(rc) |
259 elif os.WIFSIGNALED(rc): | 260 elif os.WIFSIGNALED(rc): |
260 print >> sys.stderr, '(signal %s)' % os.WTERMSIG(rc) | 261 print >> sys.stderr, '(signal %s)' % os.WTERMSIG(rc) |
261 else: | 262 else: |
262 open(self.name + '.run', 'w') | 263 open(self.name + '.run', 'w') |
263 return rc or err | 264 return err |
264 finally: | 265 finally: |
265 shutil.rmtree(tmpdir) | 266 shutil.rmtree(tmpdir) |
266 | 267 |
267 def rename_output(self, base, ignore): | 268 def rename_output(self, base, ignore): |
268 mangle_re = re.compile('(?:' + '|'.join(ignore) + ')') | 269 mangle_re = re.compile('(?:' + '|'.join(ignore) + ')') |
290 oldfp = open(oldname) | 291 oldfp = open(oldname) |
291 except IOError, err: | 292 except IOError, err: |
292 if err.errno != errno.ENOENT: | 293 if err.errno != errno.ENOENT: |
293 raise | 294 raise |
294 os.rename(errname, oldname) | 295 os.rename(errname, oldname) |
295 return | 296 return False |
296 if matchfp(oldfp, errfp): | 297 if matchfp(oldfp, errfp): |
297 os.unlink(errname) | 298 os.unlink(errname) |
299 return False | |
298 else: | 300 else: |
299 print >> sys.stderr, '\nOutput of %s has changed!' % base | 301 print >> sys.stderr, '\nOutput of %s has changed!' % base |
300 os.system('diff -u %s %s 1>&2' % (oldname, errname)) | 302 os.system('diff -u %s %s 1>&2' % (oldname, errname)) |
301 return True | 303 return True |
302 | 304 |