def _start(self): """ Note: Unlike a normal AsynchronousTask.start() method, this one does all work is synchronously. The returncode attribute will be set before it returns. """ pkg = self.pkg root_config = pkg.root_config bintree = root_config.trees["bintree"] rval = os.EX_OK stdout_orig = sys.stdout stderr_orig = sys.stderr global_havecolor = portage.output.havecolor out = io.StringIO() file_exists = True try: sys.stdout = out sys.stderr = out if portage.output.havecolor: portage.output.havecolor = not self.background try: bintree.digestCheck(pkg) except portage.exception.FileNotFound: writemsg("!!! Fetching Binary failed " + \ "for '%s'\n" % pkg.cpv, noiselevel=-1) rval = 1 file_exists = False except portage.exception.DigestException as e: writemsg("\n!!! Digest verification failed:\n", noiselevel=-1) writemsg("!!! %s\n" % e.value[0], noiselevel=-1) writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1) writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1) writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1) rval = 1 if rval == os.EX_OK: pass elif file_exists: pkg_path = bintree.getname(pkg.cpv) head, tail = os.path.split(pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) writemsg("File renamed to '%s'\n" % (temp_filename,), noiselevel=-1) finally: sys.stdout = stdout_orig sys.stderr = stderr_orig portage.output.havecolor = global_havecolor msg = out.getvalue() if msg: self.scheduler.output(msg, log_path=self.logfile, background=self.background) self.returncode = rval self.wait()
def _start(self): """ Note: Unlike a normal AsynchronousTask.start() method, this one does all work is synchronously. The returncode attribute will be set before it returns. """ pkg = self.pkg root_config = pkg.root_config bintree = root_config.trees["bintree"] rval = os.EX_OK stdout_orig = sys.stdout stderr_orig = sys.stderr out = portage.StringIO() try: sys.stdout = out sys.stderr = out try: bintree.digestCheck(pkg) except portage.exception.FileNotFound: writemsg("!!! Fetching Binary failed " + \ "for '%s'\n" % pkg.cpv, noiselevel=-1) rval = 1 except portage.exception.DigestException as e: writemsg("\n!!! Digest verification failed:\n", noiselevel=-1) writemsg("!!! %s\n" % e.value[0], noiselevel=-1) writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1) writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1) writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1) rval = 1 if rval == os.EX_OK: # If this was successful, discard the log here since otherwise # we'll get multiple logs for the same package. if self.logfile is not None: try: os.unlink(self.logfile) except OSError: pass else: pkg_path = bintree.getname(pkg.cpv) head, tail = os.path.split(pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) writemsg("File renamed to '%s'\n" % (temp_filename,), noiselevel=-1) finally: sys.stdout = stdout_orig sys.stderr = stderr_orig msg = _unicode_decode(out.getvalue(), encoding=_encodings['content'], errors='replace') if msg: self.scheduler.output(msg, log_path=self.logfile) self.returncode = rval self.wait()
def _start(self): """ Note: Unlike a normal AsynchronousTask.start() method, this one does all work is synchronously. The returncode attribute will be set before it returns. """ pkg = self.pkg root_config = pkg.root_config bintree = root_config.trees["bintree"] rval = os.EX_OK stdout_orig = sys.stdout stderr_orig = sys.stderr out = portage.StringIO() try: sys.stdout = out sys.stderr = out try: bintree.digestCheck(pkg) except portage.exception.FileNotFound: writemsg("!!! Fetching Binary failed " + \ "for '%s'\n" % pkg.cpv, noiselevel=-1) rval = 1 except portage.exception.DigestException as e: writemsg("\n!!! Digest verification failed:\n", noiselevel=-1) writemsg("!!! %s\n" % e.value[0], noiselevel=-1) writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1) writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1) writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1) rval = 1 if rval == os.EX_OK: # If this was successful, discard the log here since otherwise # we'll get multiple logs for the same package. if self.logfile is not None: try: os.unlink(self.logfile) except OSError: pass else: pkg_path = bintree.getname(pkg.cpv) head, tail = os.path.split(pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) writemsg("File renamed to '%s'\n" % (temp_filename, ), noiselevel=-1) finally: sys.stdout = stdout_orig sys.stderr = stderr_orig msg = _unicode_decode(out.getvalue(), encoding=_encodings['content'], errors='replace') if msg: self.scheduler.output(msg, log_path=self.logfile) self.returncode = rval self.wait()
def _digest_exception(self, name, value, expected): head, tail = os.path.split(self._pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) self.scheduler.output(( "\n!!! Digest verification failed:\n" "!!! %s\n" "!!! Reason: Failed on %s verification\n" "!!! Got: %s\n" "!!! Expected: %s\n" "File renamed to '%s'\n") % (self._pkg_path, name, value, expected, temp_filename), log_path=self.logfile, background=self.background)
def _digest_exception(self, name, value, expected): head, tail = os.path.split(self._pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) self.scheduler.output( ("\n!!! Digest verification failed:\n" "!!! %s\n" "!!! Reason: Failed on %s verification\n" "!!! Got: %s\n" "!!! Expected: %s\n" "File renamed to '%s'\n") % (self._pkg_path, name, value, expected, temp_filename), log_path=self.logfile, background=self.background)
def _start(self): """ Note: Unlike a normal AsynchronousTask.start() method, this one does all work is synchronously. The returncode attribute will be set before it returns. """ pkg = self.pkg root_config = pkg.root_config bintree = root_config.trees["bintree"] rval = os.EX_OK stdout_orig = sys.stdout stderr_orig = sys.stderr log_file = None if self.background and self.logfile is not None: if sys.hexversion >= 0x3000000: # Since we are replacing the sys.std* streams, # we need to use the normal open() function # so that we get the right class (otherwise our # code that expects the 'buffer' attribute # will break). log_file = open(_unicode_encode(self.logfile, encoding=_encodings['fs'], errors='strict'), mode='a', encoding=_encodings['content'], errors='backslashreplace') else: # For python2, sys.std* are expected to be binary streams. log_file = open(_unicode_encode(self.logfile, encoding=_encodings['fs'], errors='strict'), mode='ab') try: if log_file is not None: sys.stdout = log_file sys.stderr = log_file try: bintree.digestCheck(pkg) except portage.exception.FileNotFound: writemsg("!!! Fetching Binary failed " + \ "for '%s'\n" % pkg.cpv, noiselevel=-1) rval = 1 except portage.exception.DigestException as e: writemsg("\n!!! Digest verification failed:\n", noiselevel=-1) writemsg("!!! %s\n" % e.value[0], noiselevel=-1) writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1) writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1) writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1) rval = 1 if rval == os.EX_OK: # If this was successful, discard the log here since otherwise # we'll get multiple logs for the same package. if log_file is not None: try: os.unlink(self.logfile) except OSError: pass else: pkg_path = bintree.getname(pkg.cpv) head, tail = os.path.split(pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) writemsg("File renamed to '%s'\n" % (temp_filename,), noiselevel=-1) finally: sys.stdout = stdout_orig sys.stderr = stderr_orig if log_file is not None: log_file.close() self.returncode = rval self.wait()
def _start(self): """ Note: Unlike a normal AsynchronousTask.start() method, this one does all work is synchronously. The returncode attribute will be set before it returns. """ pkg = self.pkg root_config = pkg.root_config bintree = root_config.trees["bintree"] rval = os.EX_OK stdout_orig = sys.stdout stderr_orig = sys.stderr log_file = None if self.background and self.logfile is not None: if sys.hexversion >= 0x3000000: # Since we are replacing the sys.std* streams, # we need to use the normal open() function # so that we get the right class (otherwise our # code that expects the 'buffer' attribute # will break). log_file = open( _unicode_encode(self.logfile, encoding=_encodings["fs"], errors="strict"), mode="a", encoding=_encodings["content"], errors="backslashreplace", ) else: # For python2, sys.std* are expected to be binary streams. log_file = open(_unicode_encode(self.logfile, encoding=_encodings["fs"], errors="strict"), mode="ab") try: if log_file is not None: sys.stdout = log_file sys.stderr = log_file try: bintree.digestCheck(pkg) except portage.exception.FileNotFound: writemsg("!!! Fetching Binary failed " + "for '%s'\n" % pkg.cpv, noiselevel=-1) rval = 1 except portage.exception.DigestException as e: writemsg("\n!!! Digest verification failed:\n", noiselevel=-1) writemsg("!!! %s\n" % e.value[0], noiselevel=-1) writemsg("!!! Reason: %s\n" % e.value[1], noiselevel=-1) writemsg("!!! Got: %s\n" % e.value[2], noiselevel=-1) writemsg("!!! Expected: %s\n" % e.value[3], noiselevel=-1) rval = 1 if rval == os.EX_OK: # If this was successful, discard the log here since otherwise # we'll get multiple logs for the same package. if log_file is not None: try: os.unlink(self.logfile) except OSError: pass else: pkg_path = bintree.getname(pkg.cpv) head, tail = os.path.split(pkg_path) temp_filename = _checksum_failure_temp_file(head, tail) writemsg("File renamed to '%s'\n" % (temp_filename,), noiselevel=-1) finally: sys.stdout = stdout_orig sys.stderr = stderr_orig if log_file is not None: log_file.close() self.returncode = rval self.wait()