diff --git a/server/eit/commands/inject.py b/server/eit/commands/inject.py new file mode 100644 index 000000000..66d61267c --- /dev/null +++ b/server/eit/commands/inject.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +""" + + @author: Fabio Erculiani + @contact: lxnay@sabayon.org + @copyright: Fabio Erculiani + @license: GPL-2 + + B{Entropy Infrastructure Toolkit}. + +""" +import sys +import os +import argparse + +from entropy.i18n import _ +from entropy.output import teal, purple + +from eit.commands.descriptor import EitCommandDescriptor +from eit.commands.command import EitCommand + + +class EitInject(EitCommand): + """ + Main Eit inject command. + """ + + NAME = "inject" + ALIASES = ["fit"] + + def __init__(self, args): + EitCommand.__init__(self, args) + self._packages = [] + + def parse(self): + descriptor = EitCommandDescriptor.obtain_descriptor( + EitInject.NAME) + parser = argparse.ArgumentParser( + description=descriptor.get_description(), + formatter_class=argparse.RawDescriptionHelpFormatter, + prog="%s %s" % (sys.argv[0], EitInject.NAME)) + + parser.add_argument("packages", nargs='+', metavar="", + help=_("package paths")) + parser.add_argument("--to", metavar="", + help=_("inject into given repository"), + default=None) + + try: + nsargs = parser.parse_args(self._args) + except IOError: + return parser.print_help, [] + + self._packages += nsargs.packages + return self._call_locked, [self._inject, nsargs.to] + + def _inject(self, entropy_server): + """ + Actual Eit inject code. + """ + extensions = entropy_server.Spm_class( + ).binary_packages_extensions() + + etp_pkg_files = [] + for pkg_path in self._packages: + + pkg_path = os.path.realpath(pkg_path) + if not (os.path.isfile(pkg_path) and \ + os.access(pkg_path, os.R_OK)): + entropy_server.output( + "%s: %s" % (purple(pkg_path), + teal(_("no such file or directory"))), + importance=1, level="error") + return 1 + + found = False + for ext in extensions: + if pkg_path.endswith("."+ext): + etp_pkg_files.append(pkg_path) + found = True + break + if not found: + entropy_server.output( + "%s: %s" % (purple(pkg_path), + teal(_("unsupported extension"))), + importance=1, level="error") + return 1 + + if not etp_pkg_files: + entropy_server.output( + teal(_("no valid package paths")), + importance=1, level="error") + return 1 + + # in this case, no split package files are provided + repository_id = entropy_server.repository() + etp_pkg_files = [([x], True,) for x in etp_pkg_files] + package_ids = entropy_server.add_packages_to_repository( + repository_id, etp_pkg_files) + if package_ids: + # checking dependencies and print issues + entropy_server.extended_dependencies_test([repository_id]) + if package_ids: + return 0 + return 1 + + +EitCommandDescriptor.register( + EitCommandDescriptor( + EitInject, + EitInject.NAME, + _('inject package files into repository')) + )