From f2288e48380a5557a49151fc95ee121baff65b56 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 22 Apr 2013 11:17:44 -0400 Subject: Rename ips to ipsutils --- README | 0 ips/__init__.py | 7 --- ips/build.py | 156 ---------------------------------------------- ips/config.py | 72 --------------------- ips/env.py | 73 ---------------------- ips/task.py | 44 ------------- ips/test.py | 0 ips/tpl/__init__.py | 20 ------ ips/tpl/metadata.tpl | 7 --- ipsutils/__init__.py | 7 +++ ipsutils/build.py | 156 ++++++++++++++++++++++++++++++++++++++++++++++ ipsutils/config.py | 72 +++++++++++++++++++++ ipsutils/env.py | 73 ++++++++++++++++++++++ ipsutils/task.py | 44 +++++++++++++ ipsutils/test.py | 0 ipsutils/tpl/__init__.py | 20 ++++++ ipsutils/tpl/metadata.tpl | 7 +++ 17 files changed, 379 insertions(+), 379 deletions(-) create mode 100644 README delete mode 100644 ips/__init__.py delete mode 100644 ips/build.py delete mode 100644 ips/config.py delete mode 100644 ips/env.py delete mode 100644 ips/task.py delete mode 100644 ips/test.py delete mode 100644 ips/tpl/__init__.py delete mode 100644 ips/tpl/metadata.tpl create mode 100644 ipsutils/__init__.py create mode 100644 ipsutils/build.py create mode 100644 ipsutils/config.py create mode 100644 ipsutils/env.py create mode 100644 ipsutils/task.py create mode 100644 ipsutils/test.py create mode 100644 ipsutils/tpl/__init__.py create mode 100644 ipsutils/tpl/metadata.tpl diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/ips/__init__.py b/ips/__init__.py deleted file mode 100644 index 0ca8f44..0000000 --- a/ips/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from . import env -from . import config -from . import build -from . import task - -if __name__ == '__main__': - pass \ No newline at end of file diff --git a/ips/build.py b/ips/build.py deleted file mode 100644 index f402019..0000000 --- a/ips/build.py +++ /dev/null @@ -1,156 +0,0 @@ -# This file is part of ipsutils. - -# ipsutils is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ipsutils is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ipsutils. If not, see . - -from . import env, task -from pprint import pprint -import os -import shutil -import subprocess -import string -from . import tpl - - -class Build(env.Environment): - def __init__(self, ipsfile): - # Parent Config parses configuration data in .ips file - # Inherited members are used to populate package information - # as well as build tasks - super(Build, self).__init__(ipsfile) - - os.chdir(self.env['IPSBUILD']) - # Create list of build tasks - ordered_tasks = ['prep', 'build', 'install'] - self.controller = task.TaskController() - - # Assign built-in IPS tasks - self.controller.task(task.NamedTask('Extract source', self.source_unpack)) - self.controller.task(task.NamedTask('Create buildroot', self.create_buildroot)) - self.controller.task(task.NamedTask('Create metadata', self.create_metadata)) - - # Assign user defined .ips tasks in build order - for user_task in ordered_tasks: - self.controller.task(task.NamedTask(user_task, self.exec_scripted_process, self.script_dict[user_task])) - - def exec_scripted_process(self, *p): - """Execute script in .ips - This function needs to be rewritten BAD - - p: tuple of function arguments - """ - # All execution occurs from within the build directory. - # This includes all installation-like tasks - os.chdir(self.env_pkg['BUILD']) - for t in map(list, p): - for i in t: - if not i: - continue - for e in i: - # Variable expansion occurs here. Unfortunately, env_pkg is NOT available - # from within the configuration class - t = string.Template(string.join(e)) - e = t.safe_substitute(self.env_pkg) - print("+ {0:s}".format(e)) - # Using "shell" is dangerous, but we're in the business of danger... right? - output = subprocess.check_output(e, shell=True) - if output: - print("+ {0:s}".format(output).rstrip('\n')) - os.chdir(self.env['IPSBUILD']) - return True - - def source_unpack(self, *p): - path = os.path.relpath(self.env_pkg['SOURCES'], self.env['IPSBUILD']) - if not os.path.exists(path): - print("{0:s}: does not exist".format(path)) - return False - - ext = { - '.tar': '{0:s} xf {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), - '.tar.gz': '{0:s} xfz {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), - '.tar.bz2': '{0:s} xfj {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), - '.tar.xz': '{0:s} xfJ {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), - '.gz': self.tool['gunzip'], - '.bz2': self.tool['bunzip'], - '.zip': self.tool['unzip'] - } - cmd = [] - for k, v in ext.items(): - if k in path: - cmd = v.split() - print(string.join(cmd)) - subprocess.check_output(cmd) - break - return True - - def create_buildroot(self, *p): - """Destroy/Create BUILDROOT per execution to keep the envrionment stable - - p: tuple of function arguments - """ - path = self.env_pkg['BUILDROOT'] - if os.path.exists(path): - shutil.rmtree(path) - os.mkdir(path) - return True - - def create_metadata(self, *p): - output = [] - meta_map = { - 'pkg.fmri': self.key_dict['name'], - 'pkg.description': self.key_dict['description'], - 'pkg.summary': self.key_dict['summary'], - 'variant.arch': self.key_dict['arch'], - 'info.upstream_url': self.key_dict['upstream_url'], - 'info.source_url': self.key_dict['source_url'], - 'info.classification': self.key_dict['classification'] - } - - # Perform manifest template mapping and expansion - template = file(tpl.metadata, 'r') - for line in template.readlines(): - for k, v in meta_map.items(): - if k in line: - # pkg.fmri requires special attention to build the proper - # package name IPS wants - if k == 'pkg.fmri': - output.append(line.replace('{}', - self.key_dict['group'] + - "/" + - self.key_dict['name'] + - "@" + - self.key_dict['version'] + - "," + - self.key_dict['release'] - )) - continue - # The rest of the value replacements are rather simple - output.append(line.replace('{}', v)) - template.close() - - # Generate intial IPS manifest file in buildroot - manifest = file(os.path.join(self.env_pkg['BUILDROOT'], self.complete_name + '.p5m.1'), 'w+') - for line in output: - manifest.writelines(line) - print(manifest.name) - manifest.close() - return True - - def create_package_list(self, *p): - pass - - - def show_summary(self): - print("Summary of {0:s}".format(self.key_dict['name'])) - for k, v in sorted(self.key_dict.items()): - print("+ {0:s}: {1:s}".format(k, v)) diff --git a/ips/config.py b/ips/config.py deleted file mode 100644 index fe9adca..0000000 --- a/ips/config.py +++ /dev/null @@ -1,72 +0,0 @@ -# This file is part of ipsutils. - -# ipsutils is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ipsutils is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ipsutils. If not, see . -import shlex -import string - -class Config(object): - def __init__(self, ipsfile): - super(Config, self).__init__() - key_dict = { - 'name': '', - 'version': '', - 'release': '', - 'maintainer': '', - 'group': '', - 'upstream_url': '', - 'source_url': '', - 'description': '', - 'summary': '', - 'classification': '', - 'arch': '', - 'license': '' - } - - script_dict = { - 'build': [], - 'prep': [], - 'install': [], - 'files': [] - } - - expandable = [] - for line in file(ipsfile).readlines(): - parts = shlex.split(line) - t = string.Template(parts) - expandable.append(t) - - for key in key_dict: - for line in file(ipsfile).readlines(): - parts = shlex.split(line) - if key + ":" in parts: - key_dict[key] = parts[1] - - found_data = False - code_section = ['%build', '%prep', '%install'] - - for section in code_section: - for line in file(ipsfile).readlines(): - if line.startswith('#'): - continue - parts = shlex.split(line) - if '%end' in parts: - found_data = False - if section in parts: - found_data = True - continue - if found_data: - script_dict[section.strip('%')].append(parts) - - self.key_dict = key_dict - self.script_dict = script_dict diff --git a/ips/env.py b/ips/env.py deleted file mode 100644 index cd5695d..0000000 --- a/ips/env.py +++ /dev/null @@ -1,73 +0,0 @@ -# This file is part of ipsutils. - -# ipsutils is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ipsutils is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ipsutils. If not, see . - -import os -import sys -from . import config - - -class Environment(config.Config): - def __init__(self, ipsfile): - super(Environment, self).__init__(ipsfile) - - # Platform specific ipsbuild directory assignment - if sys.platform == 'linux2' \ - or sys.platform == 'sunos5': - self.__basepath = os.path.join(os.environ['HOME'], 'ipsbuild') - else: - self.__basepath = os.path.join(os.environ['USERPROFILE'], 'ipsbuild') - - # Dictionary of top-level directories - self.env = { - 'IPSBUILD': self.pathgen(''), - 'BUILDROOT': self.pathgen('BUILDROOT'), - 'BUILD': self.pathgen('BUILD'), - 'SPECS': self.pathgen('SPECS'), - 'SOURCES': self.pathgen('SOURCES'), - 'PKGS': self.pathgen('PKGS'), - 'SPKGS': self.pathgen('SPKGS') - } - # complete_name is required to build proper path names. - # The use of "self" in this case may be deprecated in the future. - self.complete_name = self.key_dict['name'] + '-' + self.key_dict['version'] - # Dictionary of package-leve directories - self.env_pkg = { - 'BUILDROOT': os.path.join(self.env['BUILDROOT'], self.complete_name), - 'BUILD': os.path.join(self.env['BUILD'], self.complete_name), - 'SOURCES': os.path.join(self.env['SOURCES'], os.path.basename(self.key_dict['source_url'])), - 'PKGS': os.path.join(self.env['PKGS'], self.complete_name), - 'SPKGS': os.path.join(self.env['SPKGS'], self.complete_name) - } - - # Generic utility mapping for platform specific configuration. - # Note: This is mainly to test script functionality on different platforms - # even though this library is VERY VERY Solaris 11 specific - self.tool = { - 'tar': 'tar', - 'unzip': 'unzip', - 'gunzip': 'gunzip', - 'bunzip': 'bunzip' - } - - # Oracle tar is ancient. GNU tar is preferrred. - if sys.platform == 'sunos5': - self.tool['tar'] = 'gtar' - - def pathgen(self, path): - """Simplify path generation based on "ipsbuild" base path - - path: directory leaf of 'ipsbuild' directory (in $HOME) - """ - return os.path.join(self.__basepath, path) diff --git a/ips/task.py b/ips/task.py deleted file mode 100644 index 1d8faeb..0000000 --- a/ips/task.py +++ /dev/null @@ -1,44 +0,0 @@ -# This file is part of ipsutils. - -# ipsutils is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ipsutils is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ipsutils. If not, see . - -class TaskController(object): - def __init__(self): - self.stack = [] - - def task(self, t): - """ - t: Task object - """ - self.stack.append(t) - - def do_tasks(self): - """ FILO execution of tasks - """ - for stack_entry in self.stack: - stack_entry.run() - -class NamedTask(object): - def __init__(self, name, func, *args): - self.name = name - self.task = func - self.task_args = args - - def run(self): - print("Running task: {0:s}".format(self.name)) - status = self.task(self.task_args) - return status - -class InternalTask(NamedTask): - pass diff --git a/ips/test.py b/ips/test.py deleted file mode 100644 index e69de29..0000000 diff --git a/ips/tpl/__init__.py b/ips/tpl/__init__.py deleted file mode 100644 index ea5bd8e..0000000 --- a/ips/tpl/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# This file is part of ipsutils. - -# ipsutils is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ipsutils is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ipsutils. If not, see . - -# I am not sure if this is proper, but needs to happen for metadata templating -# to function properly -import os -metadata = os.path.normpath(os.path.join(os.path.dirname(__file__), 'metadata.tpl')) -del os diff --git a/ips/tpl/metadata.tpl b/ips/tpl/metadata.tpl deleted file mode 100644 index 573fee3..0000000 --- a/ips/tpl/metadata.tpl +++ /dev/null @@ -1,7 +0,0 @@ -set name=pkg.fmri value={} -set name=pkg.description value="{}" -set name=pkg.summary value="{}" -set name=variant.arch value={} -set name=info.upstream_url value="{}" -set name=info.source-url value="{}" -set name=info.classification value="{}" diff --git a/ipsutils/__init__.py b/ipsutils/__init__.py new file mode 100644 index 0000000..0ca8f44 --- /dev/null +++ b/ipsutils/__init__.py @@ -0,0 +1,7 @@ +from . import env +from . import config +from . import build +from . import task + +if __name__ == '__main__': + pass \ No newline at end of file diff --git a/ipsutils/build.py b/ipsutils/build.py new file mode 100644 index 0000000..f402019 --- /dev/null +++ b/ipsutils/build.py @@ -0,0 +1,156 @@ +# This file is part of ipsutils. + +# ipsutils is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ipsutils is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ipsutils. If not, see . + +from . import env, task +from pprint import pprint +import os +import shutil +import subprocess +import string +from . import tpl + + +class Build(env.Environment): + def __init__(self, ipsfile): + # Parent Config parses configuration data in .ips file + # Inherited members are used to populate package information + # as well as build tasks + super(Build, self).__init__(ipsfile) + + os.chdir(self.env['IPSBUILD']) + # Create list of build tasks + ordered_tasks = ['prep', 'build', 'install'] + self.controller = task.TaskController() + + # Assign built-in IPS tasks + self.controller.task(task.NamedTask('Extract source', self.source_unpack)) + self.controller.task(task.NamedTask('Create buildroot', self.create_buildroot)) + self.controller.task(task.NamedTask('Create metadata', self.create_metadata)) + + # Assign user defined .ips tasks in build order + for user_task in ordered_tasks: + self.controller.task(task.NamedTask(user_task, self.exec_scripted_process, self.script_dict[user_task])) + + def exec_scripted_process(self, *p): + """Execute script in .ips + This function needs to be rewritten BAD + + p: tuple of function arguments + """ + # All execution occurs from within the build directory. + # This includes all installation-like tasks + os.chdir(self.env_pkg['BUILD']) + for t in map(list, p): + for i in t: + if not i: + continue + for e in i: + # Variable expansion occurs here. Unfortunately, env_pkg is NOT available + # from within the configuration class + t = string.Template(string.join(e)) + e = t.safe_substitute(self.env_pkg) + print("+ {0:s}".format(e)) + # Using "shell" is dangerous, but we're in the business of danger... right? + output = subprocess.check_output(e, shell=True) + if output: + print("+ {0:s}".format(output).rstrip('\n')) + os.chdir(self.env['IPSBUILD']) + return True + + def source_unpack(self, *p): + path = os.path.relpath(self.env_pkg['SOURCES'], self.env['IPSBUILD']) + if not os.path.exists(path): + print("{0:s}: does not exist".format(path)) + return False + + ext = { + '.tar': '{0:s} xf {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), + '.tar.gz': '{0:s} xfz {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), + '.tar.bz2': '{0:s} xfj {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), + '.tar.xz': '{0:s} xfJ {1:s} -C {2:s}'.format(self.tool['tar'], path, self.env['BUILD']), + '.gz': self.tool['gunzip'], + '.bz2': self.tool['bunzip'], + '.zip': self.tool['unzip'] + } + cmd = [] + for k, v in ext.items(): + if k in path: + cmd = v.split() + print(string.join(cmd)) + subprocess.check_output(cmd) + break + return True + + def create_buildroot(self, *p): + """Destroy/Create BUILDROOT per execution to keep the envrionment stable + + p: tuple of function arguments + """ + path = self.env_pkg['BUILDROOT'] + if os.path.exists(path): + shutil.rmtree(path) + os.mkdir(path) + return True + + def create_metadata(self, *p): + output = [] + meta_map = { + 'pkg.fmri': self.key_dict['name'], + 'pkg.description': self.key_dict['description'], + 'pkg.summary': self.key_dict['summary'], + 'variant.arch': self.key_dict['arch'], + 'info.upstream_url': self.key_dict['upstream_url'], + 'info.source_url': self.key_dict['source_url'], + 'info.classification': self.key_dict['classification'] + } + + # Perform manifest template mapping and expansion + template = file(tpl.metadata, 'r') + for line in template.readlines(): + for k, v in meta_map.items(): + if k in line: + # pkg.fmri requires special attention to build the proper + # package name IPS wants + if k == 'pkg.fmri': + output.append(line.replace('{}', + self.key_dict['group'] + + "/" + + self.key_dict['name'] + + "@" + + self.key_dict['version'] + + "," + + self.key_dict['release'] + )) + continue + # The rest of the value replacements are rather simple + output.append(line.replace('{}', v)) + template.close() + + # Generate intial IPS manifest file in buildroot + manifest = file(os.path.join(self.env_pkg['BUILDROOT'], self.complete_name + '.p5m.1'), 'w+') + for line in output: + manifest.writelines(line) + print(manifest.name) + manifest.close() + return True + + def create_package_list(self, *p): + pass + + + def show_summary(self): + print("Summary of {0:s}".format(self.key_dict['name'])) + for k, v in sorted(self.key_dict.items()): + print("+ {0:s}: {1:s}".format(k, v)) diff --git a/ipsutils/config.py b/ipsutils/config.py new file mode 100644 index 0000000..fe9adca --- /dev/null +++ b/ipsutils/config.py @@ -0,0 +1,72 @@ +# This file is part of ipsutils. + +# ipsutils is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ipsutils is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ipsutils. If not, see . +import shlex +import string + +class Config(object): + def __init__(self, ipsfile): + super(Config, self).__init__() + key_dict = { + 'name': '', + 'version': '', + 'release': '', + 'maintainer': '', + 'group': '', + 'upstream_url': '', + 'source_url': '', + 'description': '', + 'summary': '', + 'classification': '', + 'arch': '', + 'license': '' + } + + script_dict = { + 'build': [], + 'prep': [], + 'install': [], + 'files': [] + } + + expandable = [] + for line in file(ipsfile).readlines(): + parts = shlex.split(line) + t = string.Template(parts) + expandable.append(t) + + for key in key_dict: + for line in file(ipsfile).readlines(): + parts = shlex.split(line) + if key + ":" in parts: + key_dict[key] = parts[1] + + found_data = False + code_section = ['%build', '%prep', '%install'] + + for section in code_section: + for line in file(ipsfile).readlines(): + if line.startswith('#'): + continue + parts = shlex.split(line) + if '%end' in parts: + found_data = False + if section in parts: + found_data = True + continue + if found_data: + script_dict[section.strip('%')].append(parts) + + self.key_dict = key_dict + self.script_dict = script_dict diff --git a/ipsutils/env.py b/ipsutils/env.py new file mode 100644 index 0000000..cd5695d --- /dev/null +++ b/ipsutils/env.py @@ -0,0 +1,73 @@ +# This file is part of ipsutils. + +# ipsutils is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ipsutils is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ipsutils. If not, see . + +import os +import sys +from . import config + + +class Environment(config.Config): + def __init__(self, ipsfile): + super(Environment, self).__init__(ipsfile) + + # Platform specific ipsbuild directory assignment + if sys.platform == 'linux2' \ + or sys.platform == 'sunos5': + self.__basepath = os.path.join(os.environ['HOME'], 'ipsbuild') + else: + self.__basepath = os.path.join(os.environ['USERPROFILE'], 'ipsbuild') + + # Dictionary of top-level directories + self.env = { + 'IPSBUILD': self.pathgen(''), + 'BUILDROOT': self.pathgen('BUILDROOT'), + 'BUILD': self.pathgen('BUILD'), + 'SPECS': self.pathgen('SPECS'), + 'SOURCES': self.pathgen('SOURCES'), + 'PKGS': self.pathgen('PKGS'), + 'SPKGS': self.pathgen('SPKGS') + } + # complete_name is required to build proper path names. + # The use of "self" in this case may be deprecated in the future. + self.complete_name = self.key_dict['name'] + '-' + self.key_dict['version'] + # Dictionary of package-leve directories + self.env_pkg = { + 'BUILDROOT': os.path.join(self.env['BUILDROOT'], self.complete_name), + 'BUILD': os.path.join(self.env['BUILD'], self.complete_name), + 'SOURCES': os.path.join(self.env['SOURCES'], os.path.basename(self.key_dict['source_url'])), + 'PKGS': os.path.join(self.env['PKGS'], self.complete_name), + 'SPKGS': os.path.join(self.env['SPKGS'], self.complete_name) + } + + # Generic utility mapping for platform specific configuration. + # Note: This is mainly to test script functionality on different platforms + # even though this library is VERY VERY Solaris 11 specific + self.tool = { + 'tar': 'tar', + 'unzip': 'unzip', + 'gunzip': 'gunzip', + 'bunzip': 'bunzip' + } + + # Oracle tar is ancient. GNU tar is preferrred. + if sys.platform == 'sunos5': + self.tool['tar'] = 'gtar' + + def pathgen(self, path): + """Simplify path generation based on "ipsbuild" base path + + path: directory leaf of 'ipsbuild' directory (in $HOME) + """ + return os.path.join(self.__basepath, path) diff --git a/ipsutils/task.py b/ipsutils/task.py new file mode 100644 index 0000000..1d8faeb --- /dev/null +++ b/ipsutils/task.py @@ -0,0 +1,44 @@ +# This file is part of ipsutils. + +# ipsutils is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ipsutils is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ipsutils. If not, see . + +class TaskController(object): + def __init__(self): + self.stack = [] + + def task(self, t): + """ + t: Task object + """ + self.stack.append(t) + + def do_tasks(self): + """ FILO execution of tasks + """ + for stack_entry in self.stack: + stack_entry.run() + +class NamedTask(object): + def __init__(self, name, func, *args): + self.name = name + self.task = func + self.task_args = args + + def run(self): + print("Running task: {0:s}".format(self.name)) + status = self.task(self.task_args) + return status + +class InternalTask(NamedTask): + pass diff --git a/ipsutils/test.py b/ipsutils/test.py new file mode 100644 index 0000000..e69de29 diff --git a/ipsutils/tpl/__init__.py b/ipsutils/tpl/__init__.py new file mode 100644 index 0000000..ea5bd8e --- /dev/null +++ b/ipsutils/tpl/__init__.py @@ -0,0 +1,20 @@ +# This file is part of ipsutils. + +# ipsutils is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ipsutils is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ipsutils. If not, see . + +# I am not sure if this is proper, but needs to happen for metadata templating +# to function properly +import os +metadata = os.path.normpath(os.path.join(os.path.dirname(__file__), 'metadata.tpl')) +del os diff --git a/ipsutils/tpl/metadata.tpl b/ipsutils/tpl/metadata.tpl new file mode 100644 index 0000000..573fee3 --- /dev/null +++ b/ipsutils/tpl/metadata.tpl @@ -0,0 +1,7 @@ +set name=pkg.fmri value={} +set name=pkg.description value="{}" +set name=pkg.summary value="{}" +set name=variant.arch value={} +set name=info.upstream_url value="{}" +set name=info.source-url value="{}" +set name=info.classification value="{}" -- cgit