Exemple #1
0
def spawn_nofetch(portdb, ebuild_path, settings=None, fd_pipes=None):
	"""
	Create a NofetchPrivateTmpdir instance, and execute it synchronously.
	This function must not be called from asynchronous code, since it will
	trigger event loop recursion which is incompatible with asyncio.
	"""
	nofetch = SpawnNofetchWithoutBuilddir(background=False,
		portdb=portdb,
		ebuild_path=ebuild_path,
		scheduler=SchedulerInterface(asyncio._safe_loop()),
		fd_pipes=fd_pipes, settings=settings)

	nofetch.start()
	return nofetch.wait()
def spawn_nofetch(portdb, ebuild_path, settings=None, fd_pipes=None):
    """
	Create a NofetchPrivateTmpdir instance, and execute it synchronously.
	This function must not be called from asynchronous code, since it will
	trigger event loop recursion which is incompatible with asyncio.
	"""
    nofetch = SpawnNofetchWithoutBuilddir(background=False,
                                          portdb=portdb,
                                          ebuild_path=ebuild_path,
                                          scheduler=SchedulerInterface(
                                              asyncio._safe_loop()),
                                          fd_pipes=fd_pipes,
                                          settings=settings)

    nofetch.start()
    return nofetch.wait()
    def __init__(self, main=False, event_loop=None):
        """
		@param main: If True then use global_event_loop(), otherwise use
			a local EventLoop instance (default is False, for safe use in
			a non-main thread)
		@type main: bool
		"""
        self._term_rlock = threading.RLock()
        self._terminated = threading.Event()
        self._terminated_tasks = False
        self._term_check_handle = None
        self._max_jobs = 1
        self._max_load = None
        self._scheduling = False
        self._background = False
        if event_loop is not None:
            self._event_loop = event_loop
        elif main:
            self._event_loop = global_event_loop()
        else:
            self._event_loop = asyncio._safe_loop()
        self._sched_iface = SchedulerInterface(
            self._event_loop, is_background=self._is_background)
Exemple #4
0
	def __init__(self, main=False, event_loop=None):
		"""
		@param main: If True then use global_event_loop(), otherwise use
			a local EventLoop instance (default is False, for safe use in
			a non-main thread)
		@type main: bool
		"""
		self._term_rlock = threading.RLock()
		self._terminated = threading.Event()
		self._terminated_tasks = False
		self._term_check_handle = None
		self._max_jobs = 1
		self._max_load = None
		self._scheduling = False
		self._background = False
		if event_loop is not None:
			self._event_loop = event_loop
		elif main:
			self._event_loop = global_event_loop()
		else:
			self._event_loop = asyncio._safe_loop()
		self._sched_iface = SchedulerInterface(self._event_loop,
			is_background=self._is_background)
Exemple #5
0
    def _sync(self, selected_repos, return_messages, emaint_opts=None):
        msgs = []
        if not selected_repos:
            if return_messages:
                msgs.append("Nothing to sync... returning")
                return (True, msgs)
            return (True, None)

        if emaint_opts is not None:
            for k, v in emaint_opts.items():
                if v is not None:
                    k = "--" + k.replace("_", "-")
                    self.emerge_config.opts[k] = v

        # Portage needs to ensure a sane umask for the files it creates.
        os.umask(0o22)

        sync_manager = SyncManager(self.emerge_config.target_config.settings,
                                   emergelog)

        max_jobs = (
            self.emerge_config.opts.get('--jobs', 1) if 'parallel-fetch'
            in self.emerge_config.target_config.settings.features else 1)
        sync_scheduler = SyncScheduler(emerge_config=self.emerge_config,
                                       selected_repos=selected_repos,
                                       sync_manager=sync_manager,
                                       max_jobs=max_jobs,
                                       event_loop=asyncio._safe_loop())

        sync_scheduler.start()
        sync_scheduler.wait()
        retvals = sync_scheduler.retvals
        msgs.extend(sync_scheduler.msgs)
        returncode = True

        if retvals:
            msgs.extend(self.rmessage(retvals, 'sync'))
            for repo, retval in retvals:
                if retval != os.EX_OK:
                    returncode = False
                    break
        else:
            msgs.extend(self.rmessage([('None', os.EX_OK)], 'sync'))

        # run the post_sync_hook one last time for
        # run only at sync completion hooks
        if sync_scheduler.global_hooks_enabled:
            rcode = sync_manager.perform_post_sync_hook('')
            if rcode:
                msgs.extend(self.rmessage([('None', rcode)], 'post-sync'))
                if rcode != os.EX_OK:
                    returncode = False

        # Reload the whole config.
        portage._sync_mode = False
        self._reload_config()
        self._do_pkg_moves()
        msgs.extend(self._check_updates())
        display_news_notification(self.emerge_config.target_config,
                                  self.emerge_config.opts)

        if return_messages:
            return (returncode, msgs)
        return (returncode, None)
Exemple #6
0
	def _event_loop(self):
		return asyncio._safe_loop()
Exemple #7
0
	def _event_loop(self):
		return asyncio._safe_loop()
Exemple #8
0
	def _sync(self, selected_repos, return_messages, emaint_opts=None):
		msgs = []
		if not selected_repos:
			if return_messages:
				msgs.append("Nothing to sync... returning")
				return (True, msgs)
			return (True, None)

		if emaint_opts is not None:
			for k, v in emaint_opts.items():
				if v is not None:
					k = "--" + k.replace("_", "-")
					self.emerge_config.opts[k] = v

		# Portage needs to ensure a sane umask for the files it creates.
		os.umask(0o22)

		sync_manager = SyncManager(
			self.emerge_config.target_config.settings, emergelog)

		max_jobs = (self.emerge_config.opts.get('--jobs', 1)
			if 'parallel-fetch' in self.emerge_config.
			target_config.settings.features else 1)
		sync_scheduler = SyncScheduler(emerge_config=self.emerge_config,
			selected_repos=selected_repos, sync_manager=sync_manager,
			max_jobs=max_jobs,
			event_loop=asyncio._safe_loop())

		sync_scheduler.start()
		sync_scheduler.wait()
		retvals = sync_scheduler.retvals
		msgs.extend(sync_scheduler.msgs)
		returncode = True

		if retvals:
			msgs.extend(self.rmessage(retvals, 'sync'))
			for repo, retval in retvals:
				if retval != os.EX_OK:
					returncode = False
					break
		else:
			msgs.extend(self.rmessage([('None', os.EX_OK)], 'sync'))

		# run the post_sync_hook one last time for
		# run only at sync completion hooks
		if sync_scheduler.global_hooks_enabled:
			rcode = sync_manager.perform_post_sync_hook('')
			if rcode:
				msgs.extend(self.rmessage([('None', rcode)], 'post-sync'))
				if rcode != os.EX_OK:
					returncode = False

		# Reload the whole config.
		portage._sync_mode = False
		self._reload_config()
		self._do_pkg_moves()
		msgs.extend(self._check_updates())
		display_news_notification(self.emerge_config.target_config,
			self.emerge_config.opts)

		if return_messages:
			return (returncode, msgs)
		return (returncode, None)