Ejemplo n.º 1
0
    def __fill_provided_map(self, context: UpdateRequirementsContext):
        ti = time.time()
        self.logger.info("Filling provided names")
        context.installed_names = pacman.list_installed_names()
        installed_to_ignore = set()

        for pkgname in context.to_update:
            pacman.fill_provided_map(pkgname, pkgname, context.provided_map)
            installed_to_ignore.add(pkgname)

            pdata = context.pkgs_data.get(pkgname)
            if pdata and pdata['p']:
                pacman.fill_provided_map('{}={}'.format(pkgname, pdata['v']), pkgname, context.provided_map)
                for p in pdata['p']:
                    pacman.fill_provided_map(p, pkgname, context.provided_map)
                    split_provided = p.split('=')

                    if len(split_provided) > 1 and split_provided[0] != p:
                        pacman.fill_provided_map(split_provided[0], pkgname, context.provided_map)

        if installed_to_ignore:  # filling the provided names of the installed
            installed_to_query = context.installed_names.difference(installed_to_ignore)

            if installed_to_query:
                context.provided_map.update(pacman.map_provided(remote=False, pkgs=installed_to_query))

        tf = time.time()
        self.logger.info("Filling provided names took {0:.2f} seconds".format(tf - ti))
Ejemplo n.º 2
0
    def __fill_provided_map(self,
                            context: UpdateRequirementsContext,
                            pkgs: Dict[str, ArchPackage],
                            fill_installed: bool = True):
        if pkgs:
            ti = time.time()
            self.logger.info("Filling provided names")

            if not context.installed_names:
                context.installed_names = pacman.list_installed_names()

            installed_to_ignore = set()

            for pkgname in pkgs:
                pacman.fill_provided_map(pkgname, pkgname,
                                         context.provided_map)

                if fill_installed:
                    installed_to_ignore.add(pkgname)

                pdata = context.pkgs_data.get(pkgname)
                if pdata and pdata['p']:
                    pacman.fill_provided_map(
                        '{}={}'.format(pkgname, pdata['v']), pkgname,
                        context.provided_map)

                    ver_split = pdata['v'].split('-')

                    if len(ver_split) > 1:
                        pacman.fill_provided_map(
                            '{}={}'.format(pkgname, '-'.join(ver_split[0:-1])),
                            pkgname, context.provided_map)

                    for p in pdata['p']:
                        pacman.fill_provided_map(p, pkgname,
                                                 context.provided_map)
                        split_provided = p.split('=')

                        if len(split_provided) > 1 and split_provided[0] != p:
                            pacman.fill_provided_map(split_provided[0],
                                                     pkgname,
                                                     context.provided_map)

            if installed_to_ignore:  # filling the provided names of the installed
                installed_to_query = context.installed_names.difference(
                    installed_to_ignore)

                if installed_to_query:
                    context.provided_map.update(
                        pacman.map_provided(remote=False,
                                            pkgs=installed_to_query))

            tf = time.time()
            self.logger.info(
                "Filling provided names took {0:.2f} seconds".format(tf - ti))
Ejemplo n.º 3
0
    def run(self):
        if not any([self.aur, self.repositories]):
            return

        ti = time.time()
        self.task_man.register_task(self.task_id, self.i18n['arch.task.disk_cache'], get_icon_path())

        self.task_man.update_progress(self.task_id, 1, '')

        self.logger.info("Checking already cached package data")

        cache_dirs = [fpath for fpath in glob.glob('{}/*'.format(self.installed_cache_dir)) if os.path.isdir(fpath)]

        not_cached_names = None

        if cache_dirs:  # if there are cache data
            installed_names = pacman.list_installed_names()
            cached_pkgs = {cache_dir.split('/')[-1] for cache_dir in cache_dirs}

            not_cached_names = installed_names.difference(cached_pkgs)
            if not not_cached_names:
                self.task_man.update_progress(self.task_id, 100, '')
                self.task_man.finish_task(self.task_id)
                tf = time.time()
                time_msg = '{0:.2f} seconds'.format(tf - ti)
                self.logger.info('Finished: no package data to cache ({})'.format(time_msg))
                return

        self.logger.info('Pre-caching installed Arch packages data to disk')

        installed = self.controller.read_installed(disk_loader=None, internet_available=self.internet_available,
                                                   only_apps=False, pkg_types=None, limit=-1, names=not_cached_names,
                                                   wait_disk_cache=False).installed

        self.task_man.update_progress(self.task_id, 0, self.i18n['arch.task.disk_cache.reading'])

        saved = 0
        pkgs = {p.name: p for p in installed if ((self.aur and p.repository == 'aur') or (self.repositories and p.repository != 'aur')) and not os.path.exists(p.get_disk_cache_path())}

        self.to_index = len(pkgs)
        self.progress = self.to_index * 2
        self.update_prepared(None, add=False)

        # overwrite == True because the verification already happened
        saved += disk.save_several(pkgs, when_prepared=self.update_prepared, after_written=self.update_indexed, overwrite=True)
        self.task_man.update_progress(self.task_id, 100, None)
        self.task_man.finish_task(self.task_id)

        tf = time.time()
        time_msg = '{0:.2f} seconds'.format(tf - ti)
        self.logger.info('Finished: pre-cached data of {} Arch packages to the disk ({})'.format(saved, time_msg))
Ejemplo n.º 4
0
    def run(self):
        ti = time.time()
        self.taskman.update_progress(
            self.task_id, 0, self.i18n['task.waiting_task'].format(
                self.create_config.task_name))
        self.create_config.join()

        config = self.create_config.config
        aur_supported, repositories = aur.is_supported(
            config), config['repositories']

        self.taskman.update_progress(self.task_id, 1, None)
        if not any([aur_supported, repositories]):
            self.taskman.update_progress(self.task_id, 100,
                                         self.i18n['arch.task.disabled'])
            self.taskman.finish_task(self.task_id)
            return

        self.logger.info("Checking already cached package data")
        self._update_progress(1, self.i18n['arch.task.disk_cache.checking'])

        cache_dirs = [
            fpath
            for fpath in glob.glob('{}/*'.format(self.installed_cache_dir))
            if os.path.isdir(fpath)
        ]

        not_cached_names = None

        self._update_progress(15, self.i18n['arch.task.disk_cache.checking'])
        if cache_dirs:  # if there are cache data
            installed_names = pacman.list_installed_names()
            cached_pkgs = {
                cache_dir.split('/')[-1]
                for cache_dir in cache_dirs
            }

            not_cached_names = installed_names.difference(cached_pkgs)
            self._update_progress(20,
                                  self.i18n['arch.task.disk_cache.checking'])

            if not not_cached_names:
                self.taskman.update_progress(self.task_id, 100, '')
                self.taskman.finish_task(self.task_id)
                tf = time.time()
                time_msg = '{0:.2f} seconds'.format(tf - ti)
                self.logger.info(
                    'Finished: no package data to cache ({})'.format(time_msg))
                return

        self.logger.info('Pre-caching installed Arch packages data to disk')

        if aur_supported and self.aur_indexer:
            self.taskman.update_progress(
                self.task_id, 20,
                self.i18n['arch.task.disk_cache.waiting_aur_index'].format(
                    bold(self.i18n['arch.task.aur.index.status'])))
            self.aur_indexer.join()

        self._update_progress(21, self.i18n['arch.task.disk_cache.checking'])
        installed = self.controller.read_installed(
            disk_loader=None,
            internet_available=self.internet_available,
            only_apps=False,
            pkg_types=None,
            limit=-1,
            names=not_cached_names,
            wait_disk_cache=False).installed

        self._update_progress(35, self.i18n['arch.task.disk_cache.checking'])

        saved = 0

        pkgs = {
            p.name: p
            for p in installed if ((aur_supported and p.repository == 'aur') or
                                   (repositories and p.repository != 'aur'))
            and not os.path.exists(p.get_disk_cache_path())
        }
        self.to_index = len(pkgs)

        # overwrite == True because the verification already happened
        self._update_progress(40,
                              self.i18n['arch.task.disk_cache.reading_files'])
        saved += disk.write_several(
            pkgs=pkgs,
            after_desktop_files=self._notify_reading_files,
            after_written=self.update_indexed,
            overwrite=True)
        self.taskman.update_progress(self.task_id, 100, None)
        self.taskman.finish_task(self.task_id)

        tf = time.time()
        time_msg = '{0:.2f} seconds'.format(tf - ti)
        self.logger.info(
            'Finished: pre-cached data of {} Arch packages to the disk ({})'.
            format(saved, time_msg))