diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index 07170d3a..4579ebbf 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -56,7 +56,7 @@ class App(Base): case 'unaltered': return topdir case None | 'absolute': - return os.path.abspath(self.topdir) + return os.path.abspath(self.__topdir) case _: m = re.search(r'^make:(\S+)$', fmt) if m is None: @@ -65,11 +65,11 @@ class App(Base): return '$(' + m.group(1) + ')' def __proj_dir(self, name: str, pretty) -> str: - if name == self.top_name: + if name == self.__top_name: if pretty: return self.__pretty_topdir - return self.topdir - for d in [ self.projs_root, '/opt' ]: + return self.__topdir + for d in [ self.__projs_root, '/opt' ]: ret = d + '/' + name if os.path.exists(ret): return ret @@ -86,7 +86,7 @@ class App(Base): return os.path.abspath(pd) if self.__topdir_fmt == 'unaltered': return pd - if name == self.top_name: + if name == self.__top_name: return self.__pretty_topdir raise NotImplementedError(f'Tried to pretty-format directory {pd}, not implemented') pd = self.__proj_dir(name, False) @@ -110,20 +110,17 @@ class App(Base): def __init__(self): super().__init__("jw-pkg swiss army knife", modules=["jw.pkg.cmds"]) - self.global_args = [] - self.opt_os = None - self.top_name = None - self.glob_os_cascade = None + # -- Members without default values + self.__opt_os: str|None = None + self.__top_name: str|None = None + self.__os_cascade: list[str]|None = None + self.__res_cache = ResultCache() + self.__topdir: str|None = None + self.__pretty_topdir: str|None = None - self.dep_cache = {} - self.my_dir = os.path.dirname(os.path.realpath(__file__)) - self.res_cache = ResultCache() + # -- Members with default values self.__topdir_fmt = 'absolute' - self.topdir = None - self.__pretty_topdir = None - - # -- defaults - self.projs_root = pwd.getpwuid(os.getuid()).pw_dir + "/local/src/jw.dev/proj" + self.__projs_root = pwd.getpwuid(os.getuid()).pw_dir + "/local/src/jw.dev/proj" self.__pretty_projs_root = None def _add_arguments(self, parser): @@ -137,26 +134,25 @@ class App(Base): async def _run(self, args: argparse.Namespace) -> None: - self.opt_os = args.os - - self.topdir = args.topdir - self.__pretty_topdir = self.__format_topdir(self.topdir, args.topdir_format) + self.__opt_os = args.os + self.__topdir = args.topdir + self.__pretty_topdir = self.__format_topdir(self.__topdir, args.topdir_format) self.__topdir_fmt = args.topdir_format - if self.topdir is not None: - self.top_name = self.res_cache.run(self.read_value, [self.topdir + '/make/project.conf', 'build', 'name']) - if not self.top_name: - self.top_name = re.sub('-[0-9.-]*$', '', os.path.basename(os.path.realpath(self.topdir))) + if self.__topdir is not None: + self.__top_name = self.__res_cache.run(self.read_value, [self.__topdir + '/make/project.conf', 'build', 'name']) + if not self.__top_name: + self.__top_name = re.sub('-[0-9.-]*$', '', os.path.basename(os.path.realpath(self.__topdir))) if args.prefix is not None: - self.projs_root = args.prefix + self.__projs_root = args.prefix self.__pretty_projs_root = args.prefix - #if self.__topdir is not None: - # self. - - log(DEBUG, "projs_root = ", self.projs_root) return await super()._run(args) + @property + def top_name(self): + return self.__top_name + def find_dir(self, name: str, search_subdirs: list[str]=[], search_absdirs: list[str]=[], pretty: bool=True): return self.__find_dir(name, search_subdirs, search_absdirs, pretty) @@ -173,7 +169,7 @@ class App(Base): def get_os(self, args = ""): import subprocess - for d in [ self.projs_root + '/jw-pkg/scripts', '/opt/jw-pkg/bin' ]: + for d in [ self.__projs_root + '/jw-pkg/scripts', '/opt/jw-pkg/bin' ]: script = d + '/get-os.sh' if os.path.isfile(script): cmd = '/bin/bash ' + script @@ -199,10 +195,10 @@ class App(Base): def os_cascade(self): import platform - if self.glob_os_cascade is not None: - return self.glob_os_cascade.copy() + if self.__os_cascade is not None: + return self.__os_cascade.copy() r = [ 'os', platform.system().lower() ] - os = self.opt_os if self.opt_os is not None else self.res_cache.run(self.get_os, []) + os = self.__opt_os if self.__opt_os is not None else self.__res_cache.run(self.get_os, []) name = re.sub('-.*', '', os) series = os while True: @@ -217,7 +213,7 @@ class App(Base): r.append(os) # e.g. os, linux, suse, suse-tumbleweed #return [ 'os', platform.system().lower(), name, os ] - self.glob_os_cascade = r + self.__os_cascade = r return r def strip_module_from_spec(self, mod): @@ -290,16 +286,16 @@ class App(Base): return None def get_value(self, name, section, key): - log(DEBUG, "getting value [%s].%s for project %s (%s)" %(section, key, name, self.top_name)) - if self.top_name and name == self.top_name: - proj_root = self.topdir + log(DEBUG, "getting value [%s].%s for project %s (%s)" %(section, key, name, self.__top_name)) + if self.__top_name and name == self.__top_name: + proj_root = self.__topdir else: - proj_root = self.projs_root + '/' + name + proj_root = self.__projs_root + '/' + name log(DEBUG, "proj_root = " + proj_root) if section == 'version': proj_version_dirs = [ proj_root ] - if proj_root != self.topdir: + if proj_root != self.__topdir: proj_version_dirs.append('/usr/share/doc/packages/' + name) for d in proj_version_dirs: version_path = d + '/VERSION' @@ -314,8 +310,8 @@ class App(Base): raise Exception("No version file found for project \"" + name + "\"") path = proj_root + '/make/project.conf' - #print('path = ', path, 'self.top_name = ', self.top_name, 'name = ', name) - return self.res_cache.run(self.read_value, [path, section, key]) + #print('path = ', path, 'self.__top_name = ', self.__top_name, 'name = ', name) + return self.__res_cache.run(self.read_value, [path, section, key]) def collect_values(self, names, section, key): r = "" @@ -331,7 +327,7 @@ class App(Base): def add_modules_from_project_txt_cached(self, buf, visited, spec, section, key, add_self, scope, names_only): - return self.res_cache.run(self.add_modules_from_project_txt, [buf, visited, spec, section, key, + return self.__res_cache.run(self.add_modules_from_project_txt, [buf, visited, spec, section, key, add_self, scope, names_only]) def add_modules_from_project_txt(self, buf, visited, spec, section, key, add_self, scope,