Exemple #1
0
 def async_fetch(pkg, ebuild_path):
     fetcher = EbuildFetcher(config_pool=config_pool,
                             ebuild_path=ebuild_path,
                             fetchonly=False,
                             fetchall=True,
                             pkg=pkg,
                             scheduler=loop)
     fetcher.start()
     return fetcher.async_wait()
Exemple #2
0
 def async_fetch(pkg, ebuild_path):
     fetcher = EbuildFetcher(config_pool=config_pool,
                             ebuild_path=ebuild_path,
                             fetchonly=False,
                             fetchall=True,
                             pkg=pkg,
                             scheduler=loop)
     yield fetcher.async_start()
     result = yield fetcher.async_wait()
     coroutine_return(result)
Exemple #3
0
	def _pre_clean_exit(self, pre_clean_phase):
		if self._default_exit(pre_clean_phase) != os.EX_OK:
			self._async_unlock_builddir(returncode=self.returncode)
			return

		# for log handling
		portage.prepare_build_dirs(self.pkg.root, self.settings, 1)

		fetcher = EbuildFetcher(config_pool=self.config_pool,
			ebuild_path=self._ebuild_path,
			fetchall=self.opts.fetch_all_uri,
			fetchonly=self.opts.fetchonly,
			background=self.background,
			logfile=self.settings.get('PORTAGE_LOG_FILE'),
			pkg=self.pkg, scheduler=self.scheduler)

		self._start_task(AsyncTaskFuture(
			future=fetcher.async_already_fetched(self.settings)),
			functools.partial(self._start_fetch, fetcher))
Exemple #4
0
    def _pre_clean_exit(self, pre_clean_phase):
        if self._default_exit(pre_clean_phase) != os.EX_OK:
            self._async_unlock_builddir(returncode=self.returncode)
            return

        # for log handling
        portage.prepare_build_dirs(self.pkg.root, self.settings, 1)

        fetcher = EbuildFetcher(config_pool=self.config_pool,
                                ebuild_path=self._ebuild_path,
                                fetchall=self.opts.fetch_all_uri,
                                fetchonly=self.opts.fetchonly,
                                background=self.background,
                                logfile=self.settings.get('PORTAGE_LOG_FILE'),
                                pkg=self.pkg,
                                scheduler=self.scheduler)

        self._start_task(
            AsyncTaskFuture(
                future=fetcher.async_already_fetched(self.settings)),
            functools.partial(self._start_fetch, fetcher))
Exemple #5
0
    def _prefetch_exit(self, prefetcher):

        if self._was_cancelled():
            self.wait()
            return

        opts = self.opts
        pkg = self.pkg
        settings = self.settings

        if opts.fetchonly:
            if opts.pretend:
                fetcher = EbuildFetchonly(fetch_all=opts.fetch_all_uri,
                                          pkg=pkg,
                                          pretend=opts.pretend,
                                          settings=settings)
                retval = fetcher.execute()
                self.returncode = retval
                self.wait()
                return
            else:
                fetcher = EbuildFetcher(config_pool=self.config_pool,
                                        ebuild_path=self._ebuild_path,
                                        fetchall=self.opts.fetch_all_uri,
                                        fetchonly=self.opts.fetchonly,
                                        background=False,
                                        logfile=None,
                                        pkg=self.pkg,
                                        scheduler=self.scheduler)
                self._start_task(fetcher, self._fetchonly_exit)
                return

        self._build_dir = EbuildBuildDir(scheduler=self.scheduler,
                                         settings=settings)
        self._build_dir.lock()

        # Cleaning needs to happen before fetch, since the build dir
        # is used for log handling.
        msg = " === (%s of %s) Cleaning (%s::%s)" % \
         (self.pkg_count.curval, self.pkg_count.maxval,
         self.pkg.cpv, self._ebuild_path)
        short_msg = "emerge: (%s of %s) %s Clean" % \
         (self.pkg_count.curval, self.pkg_count.maxval, self.pkg.cpv)
        self.logger.log(msg, short_msg=short_msg)

        pre_clean_phase = EbuildPhase(background=self.background,
                                      phase='clean',
                                      scheduler=self.scheduler,
                                      settings=self.settings)
        self._start_task(pre_clean_phase, self._pre_clean_exit)
Exemple #6
0
    def _prefetch_exit(self, prefetcher):

        if self._was_cancelled():
            self.wait()
            return

        opts = self.opts
        pkg = self.pkg
        settings = self.settings

        if opts.fetchonly:
            if opts.pretend:
                fetcher = EbuildFetchonly(fetch_all=opts.fetch_all_uri,
                                          pkg=pkg,
                                          pretend=opts.pretend,
                                          settings=settings)
                retval = fetcher.execute()
                if retval == os.EX_OK:
                    self._current_task = None
                    self.returncode = os.EX_OK
                    self._async_wait()
                else:
                    # For pretend mode, the convention it to execute
                    # pkg_nofetch and return a successful exitcode.
                    self._start_task(
                        SpawnNofetchWithoutBuilddir(
                            background=self.background,
                            portdb=self.pkg.root_config.trees[
                                self._tree].dbapi,
                            ebuild_path=self._ebuild_path,
                            scheduler=self.scheduler,
                            settings=self.settings), self._default_final_exit)
                return

            fetcher = EbuildFetcher(config_pool=self.config_pool,
                                    ebuild_path=self._ebuild_path,
                                    fetchall=self.opts.fetch_all_uri,
                                    fetchonly=self.opts.fetchonly,
                                    background=False,
                                    logfile=None,
                                    pkg=self.pkg,
                                    scheduler=self.scheduler)
            self._start_task(fetcher, self._fetchonly_exit)
            return

        self._build_dir = EbuildBuildDir(scheduler=self.scheduler,
                                         settings=settings)
        self._start_task(AsyncTaskFuture(future=self._build_dir.async_lock()),
                         self._start_pre_clean)
Exemple #7
0
    def _pre_clean_exit(self, pre_clean_phase):
        if self._final_exit(pre_clean_phase) != os.EX_OK:
            self._unlock_builddir()
            self.wait()
            return

        # for log handling
        portage.prepare_build_dirs(self.pkg.root, self.settings, 1)

        fetcher = EbuildFetcher(config_pool=self.config_pool,
                                fetchall=self.opts.fetch_all_uri,
                                fetchonly=self.opts.fetchonly,
                                background=self.background,
                                logfile=self.settings.get('PORTAGE_LOG_FILE'),
                                pkg=self.pkg,
                                scheduler=self.scheduler)

        self._start_task(fetcher, self._fetch_exit)
Exemple #8
0
    def _pre_clean_exit(self, pre_clean_phase):
        if self._default_exit(pre_clean_phase) != os.EX_OK:
            self._unlock_builddir()
            self.wait()
            return

        # for log handling
        portage.prepare_build_dirs(self.pkg.root, self.settings, 1)

        fetcher = EbuildFetcher(config_pool=self.config_pool,
                                ebuild_path=self._ebuild_path,
                                fetchall=self.opts.fetch_all_uri,
                                fetchonly=self.opts.fetchonly,
                                background=self.background,
                                logfile=self.settings.get('PORTAGE_LOG_FILE'),
                                pkg=self.pkg,
                                scheduler=self.scheduler)

        try:
            already_fetched = fetcher.already_fetched(self.settings)
        except portage.exception.InvalidDependString as e:
            msg_lines = []
            msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
             (self.pkg.cpv, e)
            msg_lines.append(msg)
            fetcher._eerror(msg_lines)
            portage.elog.elog_process(self.pkg.cpv, self.settings)
            self.returncode = 1
            self._current_task = None
            self._unlock_builddir()
            self.wait()
            return

        if already_fetched:
            # This case is optimized to skip the fetch queue.
            fetcher = None
            self._fetch_exit(fetcher)
            return

        # Allow the Scheduler's fetch queue to control the
        # number of concurrent fetchers.
        fetcher.addExitListener(self._fetch_exit)
        self._task_queued(fetcher)
        self.scheduler.fetch.schedule(fetcher)
Exemple #9
0
    def _prefetch_exit(self, prefetcher):

        if self._was_cancelled():
            self.wait()
            return

        opts = self.opts
        pkg = self.pkg
        settings = self.settings

        if opts.fetchonly:
            if opts.pretend:
                fetcher = EbuildFetchonly(fetch_all=opts.fetch_all_uri,
                                          pkg=pkg,
                                          pretend=opts.pretend,
                                          settings=settings)
                retval = fetcher.execute()
                self.returncode = retval
                self.wait()
                return
            else:
                fetcher = EbuildFetcher(config_pool=self.config_pool,
                                        ebuild_path=self._ebuild_path,
                                        fetchall=self.opts.fetch_all_uri,
                                        fetchonly=self.opts.fetchonly,
                                        background=False,
                                        logfile=None,
                                        pkg=self.pkg,
                                        scheduler=self.scheduler)
                self._start_task(fetcher, self._fetchonly_exit)
                return

        self._build_dir = EbuildBuildDir(scheduler=self.scheduler,
                                         settings=settings)
        self._start_task(AsyncTaskFuture(future=self._build_dir.async_lock()),
                         self._start_pre_clean)
Exemple #10
0
    def _prefetch_exit(self, prefetcher):

        opts = self.opts
        pkg = self.pkg
        settings = self.settings

        if opts.fetchonly:
            fetcher = EbuildFetchonly(fetch_all=opts.fetch_all_uri,
                                      pkg=pkg,
                                      pretend=opts.pretend,
                                      settings=settings)
            retval = fetcher.execute()
            self.returncode = retval
            self.wait()
            return

        fetcher = EbuildFetcher(config_pool=self.config_pool,
                                fetchall=opts.fetch_all_uri,
                                fetchonly=opts.fetchonly,
                                background=self.background,
                                pkg=pkg,
                                scheduler=self.scheduler)

        self._start_task(fetcher, self._fetch_exit)
Exemple #11
0
	def _pre_clean_exit(self, pre_clean_phase):
		if self._default_exit(pre_clean_phase) != os.EX_OK:
			self._unlock_builddir()
			self.wait()
			return

		# for log handling
		portage.prepare_build_dirs(self.pkg.root, self.settings, 1)

		fetcher = EbuildFetcher(config_pool=self.config_pool,
			ebuild_path=self._ebuild_path,
			fetchall=self.opts.fetch_all_uri,
			fetchonly=self.opts.fetchonly,
			background=self.background,
			logfile=self.settings.get('PORTAGE_LOG_FILE'),
			pkg=self.pkg, scheduler=self.scheduler)

		try:
			already_fetched = fetcher.already_fetched(self.settings)
		except portage.exception.InvalidDependString as e:
			msg_lines = []
			msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
				(self.pkg.cpv, e)
			msg_lines.append(msg)
			fetcher._eerror(msg_lines)
			portage.elog.elog_process(self.pkg.cpv, self.settings)
			self.returncode = 1
			self._current_task = None
			self._unlock_builddir()
			self.wait()
			return

		if already_fetched:
			# This case is optimized to skip the fetch queue.
			fetcher = None
			self._fetch_exit(fetcher)
			return

		# Allow the Scheduler's fetch queue to control the
		# number of concurrent fetchers.
		fetcher.addExitListener(self._fetch_exit)
		self._task_queued(fetcher)
		self.scheduler.fetch.schedule(fetcher)
Exemple #12
0
    def _prefetch_exit(self, prefetcher):

        if self._was_cancelled():
            self.wait()
            return

        opts = self.opts
        pkg = self.pkg
        settings = self.settings

        if opts.fetchonly:
            if opts.pretend:
                fetcher = EbuildFetchonly(fetch_all=opts.fetch_all_uri,
                                          pkg=pkg,
                                          pretend=opts.pretend,
                                          settings=settings)
                retval = fetcher.execute()
                if retval == os.EX_OK:
                    self._current_task = None
                    self.returncode = os.EX_OK
                    self._async_wait()
                else:
                    # For pretend mode, the convention it to execute
                    # pkg_nofetch and return a successful exitcode.
                    self._start_task(
                        SpawnNofetchWithoutBuilddir(
                            background=self.background,
                            portdb=self.pkg.root_config.trees[
                                self._tree].dbapi,
                            ebuild_path=self._ebuild_path,
                            scheduler=self.scheduler,
                            settings=self.settings), self._default_final_exit)
                return

            quiet_setting = settings.get("PORTAGE_QUIET", False)
            fetch_log = None
            logwrite_access = False
            if quiet_setting:
                fetch_log = os.path.join(_emerge.emergelog._emerge_log_dir,
                                         "emerge-fetch.log")
                logwrite_access = os.access(first_existing(fetch_log), os.W_OK)

            fetcher = EbuildFetcher(
                config_pool=self.config_pool,
                ebuild_path=self._ebuild_path,
                fetchall=self.opts.fetch_all_uri,
                fetchonly=self.opts.fetchonly,
                background=quiet_setting if logwrite_access else False,
                logfile=fetch_log if logwrite_access else None,
                pkg=self.pkg,
                scheduler=self.scheduler,
            )

            if fetch_log and logwrite_access:
                fetcher.addExitListener(self._fetchonly_exit)
                self._task_queued(fetcher)
                self.scheduler.fetch.schedule(fetcher, force_queue=True)
            else:
                self._start_task(fetcher, self._fetchonly_exit)
            return

        self._build_dir = EbuildBuildDir(scheduler=self.scheduler,
                                         settings=settings)
        self._start_task(AsyncTaskFuture(future=self._build_dir.async_lock()),
                         self._start_pre_clean)
Exemple #13
0
				def async_fetch(pkg, ebuild_path):
					fetcher = EbuildFetcher(config_pool=config_pool, ebuild_path=ebuild_path,
						fetchonly=False, fetchall=True, pkg=pkg, scheduler=loop)
					fetcher.start()
					return fetcher.async_wait()