From c2c6314a8032424aa80a19e6bb4d1d7b87431cf2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 24 Jan 2023 10:34:27 +0300 Subject: [PATCH] =?UTF-8?q?TG-125=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D0=B8=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=B1=D0=B5=D0=B7=20=D0=B3=D0=B8?= =?UTF-8?q?=D1=82=D0=B0,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=20=D0=B5=D1=81=D1=82=D1=8C=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pym/update/profile.py | 17 ++++ pym/update/utils/cl_update_profile.py | 90 ++++++------------- pym/update/variables/update.py | 121 ++++++++++++++------------ pym/update/wsdl_update.py | 4 +- 4 files changed, 110 insertions(+), 122 deletions(-) diff --git a/pym/update/profile.py b/pym/update/profile.py index 7d1c62d..edab59e 100644 --- a/pym/update/profile.py +++ b/pym/update/profile.py @@ -151,11 +151,19 @@ class Profile(): self.repository = repository self.profile = profile self.arch = arch + self._path = None @property def path(self): + if self._path: + return self._path return path.join(self.repository.directory,"profiles", self.profile) + @path.setter + def path(self, value): + self._path = value + return value + @classmethod def from_string(cls, repository, s): parts = [x for x in s.split() if x] @@ -233,6 +241,10 @@ class ProfileRepository(): return True return False + def is_like_local(self, local_path, rep_name): + + pass + @property def directory(self): """ @@ -263,6 +275,11 @@ class ProfileRepository(): profiles_desc = path.join(self.directory, "profiles/profiles.desc") return list(filter(None, (Profile.from_string(self, line) for line in readLinesFile(profiles_desc)))) + @staticmethod + def get_local_profiles(directory): + profiles_desc = path.join(directory, "profiles/profiles.desc") + return list(filter(None, (Profile.from_string(Profile, line) + for line in readLinesFile(profiles_desc)))) def __repr__(self): return "" % (self.directory, self.url) diff --git a/pym/update/utils/cl_update_profile.py b/pym/update/utils/cl_update_profile.py index da18f19..d84b3d1 100644 --- a/pym/update/utils/cl_update_profile.py +++ b/pym/update/utils/cl_update_profile.py @@ -47,72 +47,32 @@ class ClUpdateProfileAction(Action): 'method': 'Update.migrateCacheRepository(' 'cl_update_profile_url,cl_update_profile_branch,' 'cl_update_profile_storage)', - 'message': __("Repository transfer"), - 'condition': lambda Get: not ( - Get('cl_update_profile_storage').is_local( - Get('cl_update_profile_url'), - Get('cl_update_profile_branch'))) and Get('cl_update_profile_check_sync_allowed') - }, - {'name': 'reconfigure_vars1', - 'method': 'Update.invalidateVariables("cl_update_profile_storage")', - 'depend': Tasks.has('migrate_repository') - }, - {'name': 'check_datavars', - 'error': _("Profile not found in master"), - 'condition': lambda Get: not Get('update.cl_update_profile_datavars') - }, - {'name': 'drop_binhosts', - 'method': 'Update.drop_binhosts(update.cl_update_profile_datavars)' - }, - {'name': 'reconfigure_vars', - 'method': 'Update.reconfigureProfileVars(cl_update_profile_datavars,' - 'cl_chroot_path)' - }, - {'name': 'reps_synchronization', - 'group': __("Repositories synchronization"), + 'condition': lambda Get: Get('cl_update_profile_url')}, + {'name': 'profile_from_url', + 'group': __('setting up from url'), 'tasks': [ - {'name': 'sync_reps', - 'foreach': 'cl_update_profile_sync_rep', - 'message': __("Checking {eachvar:capitalize} updates"), - 'method': 'Update.syncRepositories(eachvar)', - 'condition': lambda Get: Get('cl_update_profile_check_sync_allowed') - }, - {'name': 'sync_reps:regen_cache', - 'foreach': 'cl_update_sync_overlay_rep', - 'message': __("Updating the {eachvar:capitalize} repository cache"), - 'essential': False, - 'method': 'Update.regenCache(eachvar)', - 'condition': ( - lambda Get: (Get('cl_update_outdate_set') == 'on' and - Get('cl_update_metadata_force') != 'skip' or - Get('cl_update_metadata_force') == 'force')) - }, - {'name': 'emerge_metadata', - 'message': __("Metadata transfer"), - 'method': 'Update.emergeMetadata()', - 'condition': ( - lambda Get: (Get('cl_update_outdate_set') == 'on' and - Get('cl_update_metadata_force') != 'skip' or - Get('cl_update_metadata_force') == 'force')) - }, - {'name': 'eix_update', - 'message': __("Updating the eix cache for " - "{cl_update_eix_repositories}"), - 'method': 'Update.eixUpdate(cl_repository_name)', - 'condition': ( - lambda Get: (Get('cl_update_outdate_set') == 'on' and - Get('cl_update_eixupdate_force') != 'skip' or - Get('cl_update_eixupdate_force') == 'force')) - }, - # сообщение удачного завершения при обновлении репозиториев - {'name': 'success_syncrep', - 'message': __("Synchronization finished"), - 'depend': (Tasks.success() & Tasks.has_any("sync_reps", - "sync_other_reps", - "emerge_metadata", - "eix_update")), - } - ] + {'message': __("Repository transfer"), + 'condition': lambda Get: not ( + Get('cl_update_profile_storage').is_local( + Get('cl_update_profile_url'), + Get('cl_update_profile_branch'))) and Get('cl_update_profile_check_sync_allowed'), + }, + {'name': 'reconfigure_vars1', + 'method': 'Update.invalidateVariables("cl_update_profile_storage")', + }, + {'name': 'check_datavars', + 'error': _("Profile not found in master"), + 'condition': lambda Get: not Get('update.cl_update_profile_datavars'), + }, + {'name': 'drop_binhosts', + 'method': 'Update.drop_binhosts(update.cl_update_profile_datavars)', + }, + {'name': 'reconfigure_vars', + 'method': 'Update.reconfigureProfileVars(cl_update_profile_datavars,' + 'cl_chroot_path)', + }, + ], + 'depend': Tasks.has('migrate_repository') }, {'name': 'reps_synchronization', 'group': __("Setting up the profile"), diff --git a/pym/update/variables/update.py b/pym/update/variables/update.py index 0fa11d6..f5bed4e 100644 --- a/pym/update/variables/update.py +++ b/pym/update/variables/update.py @@ -28,7 +28,7 @@ from calculate.lib.datavars import (Variable, VariableError, SimpleDataVars, DataVarsError) from calculate.lib.utils.binhosts import (Binhosts, PackagesIndex, HOURS, BinhostSignError) -from calculate.lib.utils.files import readFile, listDirectory, process, pathJoin +from calculate.lib.utils.files import readFile, listDirectory, process, pathJoin, readLinesFile from calculate.lib.configparser import ConfigParser from calculate.lib.cl_lang import setLocalTranslate @@ -36,7 +36,7 @@ from calculate.lib.utils.text import simplify_profiles, _u8 from calculate.lib.utils.git import Git, GitError from calculate.lib.utils.portage import ReposConf, PortageState from ..profile import (RepositoryStorageSet, DEFAULT_BRANCH, - LocalStorage, ProfileRepository, CacheStorage) + LocalStorage, ProfileRepository, CacheStorage, Profile) from calculate.lib.variables import linux as lib_linux from calculate.lib.variables import env @@ -942,6 +942,7 @@ class VariableClUpdateTemplatesLocate(Variable): def choice(self): descr = lambda x: self.descriptionMap.get(x, _("%s overlay templates" % x)) + a = self.get() return [(x, descr(x)) for x in self.get()] @@ -963,7 +964,6 @@ class VariableClUpdateProfileDependUrl(FieldValue, ReadonlyVariable): self.label = _("URL") - class VariableClUpdateProfileCheckSyncAllowed(Variable): path = 'cl_update_repos_storage' @@ -1093,43 +1093,45 @@ class VariableClUpdateProfileUrl(Variable): value = self.url_by_shortname(value) return self.normalize_url(value) - def check(self, value): - if not value: - raise VariableError(_("Need to specify profile repository")) - try: - branch = self.Get(self.branch) - self.Get(self.storage).get_profiles(value, branch) - except GitError as e: - raise VariableError(str(e)) - if not self.Get(self.profiles_shortname): - raise VariableError(_("Repository %s has no profiles") % - value) - - def get(self): - try: - profile = self.Get(self.profile) - if profile: - while (profile != self.current_root and - ".git" not in listDirectory(profile) and - "repo_name" not in listDirectory( - path.join(profile,"profiles"))): - profile = path.dirname(profile) - if profile == self.current_root: - return self.value - if ".git" not in listDirectory(profile): - repo_name = readFile(path.join( - profile,"profiles/repo_name")).strip() - if (repo_name in self.rep_names and - self.Get('cl_action') == self.check_action): - raise CriticalError( - _("You need to update the repositories before " - "you change the profile")) - return Git.get_url(profile, "origin") - except CriticalError as e: - raise VariableError(str(e)) - except Exception as e: - pass - return self.value + # def check(self, value): + # if not value: + # return True + # try: + # branch = self.Get(self.branch) + # self.Get(self.storage).get_profiles(value, branch) + # except GitError as e: + # raise VariableError(str(e)) + # if not self.Get(self.profiles_shortname): + # raise VariableError(_("Repository %s has no profiles") % + # value) + + # def get(self): + # try: + # if not self.value: + # return self.value + # profile = self.Get(self.profile) + # if profile: + # while (profile != self.current_root and + # ".git" not in listDirectory(profile) and + # "repo_name" not in listDirectory( + # path.join(profile,"profiles"))): + # profile = path.dirname(profile) + # if profile == self.current_root: + # return self.value + # if ".git" not in listDirectory(profile): + # repo_name = readFile(path.join( + # profile,"profiles/repo_name")).strip() + # if (repo_name in self.rep_names and + # self.Get('cl_action') == self.check_action): + # raise CriticalError( + # _("You need to update the repositories before " + # "you change the profile")) + # return Git.get_url(profile, "origin") + # except CriticalError as e: + # raise VariableError(str(e)) + # except Exception as e: + # pass + # return self.value class VariableClUpdateProfileRepoName(ReadonlyVariable): @@ -1206,19 +1208,30 @@ class VariableClProfileData(ReadonlyTableVariable): return [x for x in profiles if x.arch == arch] def get(self, hr=HumanReadable.No): - rep = self.Get(self.repository) - if not rep: - return [[]] - profiles = rep.get_profiles() - if not profiles: - return [[]] - repo_name = profiles[0].repository.repo_name + if self.Get('cl_update_profile_url'): + rep = self.Get(self.repository) + if not rep: + return [[]] + profiles = rep.get_profiles() + if not profiles: + return [[]] + repo_name = profiles[0].repository.repo_name + else: + full_path = self.Get('cl_profile_system') + storage_path = self.Get('cl_update_repos_storage') + if storage_path in full_path: + repo_name = full_path.split(storage_path)[1].replace('/', ' ').split()[0] + profiles_desc = path.join(storage_path, repo_name, "profiles/profiles.desc") + profiles = ProfileRepository.get_local_profiles(path.join(storage_path, repo_name)) + for profile in profiles: + profile.path = path.join(storage_path, repo_name, 'profiles', profile.profile) + filtered_profiles = self.profile_filter(profiles) full_name = [x.profile for x in filtered_profiles] profile_path = [x.path for x in filtered_profiles] profile_arch = [x.arch for x in filtered_profiles] short_name = simplify_profiles(full_name) - full_name = ["%s:%s" % (repo_name, x) for x in full_name] + return list(zip(full_name, short_name, profile_path, @@ -1351,10 +1364,11 @@ class VariableClUpdateProfileSystem(Variable): return True if not dv.Get('os_linux_name'): raise VariableError("") - if repo_name not in list(dv.Get('cl_update_rep_name')): - raise VariableError( - _("Overlay %s is not specified " - "in cl_update_rep_name") % repo_name) + a = list(dv.Get('cl_update_rep_name')) + # if repo_name not in list(dv.Get('cl_update_rep_name')): + # raise VariableError( + # _("Overlay %s is not specified " + # "in cl_update_rep_name") % repo_name) except (DataVarsError, VariableError) as e: if str(e): message = ". " + str(e) @@ -1381,9 +1395,6 @@ class VariableClUpdateProfileSystem(Variable): return "" def choice(self): - url = self.Get(self.url) - if not url: - return [] arch = self.Get(self.gentoo_arch) profiles = list(zip(*self.Select([self.profiles_shortname, self.profiles_fullname], diff --git a/pym/update/wsdl_update.py b/pym/update/wsdl_update.py index 41fc7ff..da50349 100644 --- a/pym/update/wsdl_update.py +++ b/pym/update/wsdl_update.py @@ -129,8 +129,8 @@ class Wsdl(WsdlBase): 'groups': [ lambda group: group(_("Repository"), brief=('cl_update_profile_repo_name',), - hide=('cl_update_profile_url', - 'cl_update_profile_sync_set'), + # hide=('cl_update_profile_url', + # 'cl_update_profile_sync_set'), normal=('cl_update_profile_url',), expert=('cl_update_profile_sync_set',)), lambda group: group(_("Profile"),