Exemplo n.º 1
0
 def run(self):
     """Run tracking dependencies
     """
     self.msg.resolving()
     self.repositories()
     if self.find_pkg:
         self.dependencies_list.reverse()
         self.requires = Utils().dimensional_list(self.dependencies_list)
         self.dependencies = Utils().remove_dbs(self.requires)
         if self.dependencies == []:
             self.dependencies = ["No dependencies"]
         if "--graph=" in self.flag:
             self.deps_tree()
         self.msg.done()
         pkg_len = len(self.name) + 24
         print("")  # new line at start
         self.msg.template(pkg_len)
         print("| Package {0}{1}{2} dependencies :".format(
             self.cyan, self.name, self.endc))
         self.msg.template(pkg_len)
         print("\\")
         print(" +---{0}[ Tree of dependencies ]{1}".format(
             self.yellow, self.endc))
         index = 0
         for pkg in self.dependencies:
             if "--check-deps" in self.flag:
                 used = self.check_used(pkg)
                 self.deps_used(pkg, used)
                 used = "{0} {1}{2}{3}".format("is dependency -->",
                                               self.cyan, ", ".join(used),
                                               self.endc)
             else:
                 used = ""
             index += 1
             installed = ""
             if find_package(pkg + self.meta.sp, self.meta.pkg_path):
                 if self.meta.use_colors in ["off", "OFF"]:
                     installed = "* "
                 print(" |")
                 print(" {0}{1}: {2}{3}{4} {5}{6}".format(
                     "+--", index, self.green, pkg, self.endc, installed,
                     used))
             else:
                 print(" |")
                 print(" {0}{1}: {2}{3}{4} {5}".format(
                     "+--", index, self.red, pkg, self.endc, installed))
         if self.meta.use_colors in ["off", "OFF"]:
             print("\n * = Installed\n")
         else:
             print("")  # new line at end
         if "--graph=" in self.flag:
             self.graph()
     else:
         self.msg.done()
         print("\nNo package was found to match\n")
         raise SystemExit(1)
Exemplo n.º 2
0
 def __init__(self):
     self.meta = _meta_
     self.DEFAULT_REPOS_NAMES = self.meta.default_repositories
     self.custom_repo_file = "/etc/slpkg/custom-repositories"
     self.default_repo_file = "/etc/slpkg/default-repositories"
     self.custom_repositories_list = Utils().read_file(
         self.custom_repo_file)
     self.default_repositories_list = Utils().read_file(
         self.default_repo_file)
     self.default_repository()
Exemplo n.º 3
0
 def view(self, repo):
     """
     View repository information
     """
     status = "{0}disabled{1}".format(self.meta.color["RED"],
                                      self.meta.color["ENDC"])
     self.form["Status:"] = status
     self.form["Default:"] = "no"
     if repo in self.meta.default_repositories:
         self.form["Default:"] = "yes"
     if (repo in self.meta.repositories
             and os.path.isfile(self.meta.lib_path + "{0}_repo/PACKAGES."
                                "TXT".format(repo))):
         status = "{0}enabled{1}".format(self.meta.color["GREEN"],
                                         self.meta.color["ENDC"])
         if repo != "sbo":
             data = self.repository_data(repo)
             size = units(data[1], data[2])
             self.form["Repo id:"] = repo
             self.form["Repo url:"] = self.all_repos[repo]
             self.form["Total compressed packages:"] = "{0} {1}".format(
                 str(size[1][0]), str(size[0][0]))
             self.form["Total uncompressed packages:"] = "{0} {1}".format(
                 str(size[1][1]), str(size[0][1]))
             self.form["Number of packages:"] = data[0]
             self.form["Status:"] = status
             self.form["Last updated:"] = data[3]
     elif (repo == "sbo"
           and os.path.isfile(self.meta.lib_path + "{0}_repo/"
                              "SLACKBUILDS.TXT".format(repo))):
         status = "{0}enabled{1}".format(self.meta.color["GREEN"],
                                         self.meta.color["ENDC"])
         sum_sbo_pkgs = 0
         for line in (Utils().read_file(self.meta.lib_path +
                                        "sbo_repo/SLACKBUILDS."
                                        "TXT").splitlines()):
             if line.startswith("SLACKBUILD NAME: "):
                 sum_sbo_pkgs += 1
         changelog_txt = Utils().read_file(self.meta.log_path +
                                           "sbo/ChangeLog.txt")
         last_upd = changelog_txt.split("\n", 1)[0]
         self.form["Repo id:"] = repo
         self.form["Repo url:"] = self.all_repos[repo]
         self.form["Total compressed packages:"] = ""
         self.form["Total uncompressed packages:"] = ""
         self.form["Number of packages:"] = sum_sbo_pkgs
         self.form["Status:"] = status
         self.form["Last updated:"] = last_upd
     print("")
     for key, value in sorted(self.form.iteritems()):
         print self.meta.color["GREY"] + key + self.meta.color["ENDC"], value
     print("")
     raise SystemExit()
Exemplo n.º 4
0
 def one_for_all(self, deps):
     """Because there are dependencies that depend on other
     dependencies are created lists into other lists.
     Thus creating this loop create one-dimensional list and
     remove double packages from dependencies.
     """
     requires, dependencies = [], []
     deps.reverse()
     # Inverting the list brings the
     # dependencies in order to be installed.
     requires = Utils().dimensional_list(deps)
     dependencies = Utils().remove_dbs(requires)
     return dependencies
Exemplo n.º 5
0
 def case_insensitive(self):
     """Matching packages distinguish between uppercase and
     lowercase
     """
     if "--case-ins" in self.flag:
         data = []
         data = Utils().package_name(self.PACKAGES_TXT)
         data_dict = Utils().case_sensitive(data)
         for pkg in self.packages:
             index = self.packages.index(pkg)
             for key, value in data_dict.iteritems():
                 if key == pkg.lower():
                     self.packages[index] = value
Exemplo n.º 6
0
 def deps_tree(self):
     """Package dependencies image map file
     """
     dependencies = self.dependencies + [self.name]
     if self.repo == "sbo":
         for dep in dependencies:
             deps = Requires(flag="").sbo(dep)
             if dep not in self.deps_dict.values():
                 self.deps_dict[dep] = Utils().dimensional_list(deps)
     else:
         for dep in dependencies:
             deps = Dependencies(self.repo, self.black).binary(dep, flag="")
             if dep not in self.deps_dict.values():
                 self.deps_dict[dep] = Utils().dimensional_list(deps)
Exemplo n.º 7
0
def search_pkg(name, repo):
    """Search if package exists in PACKAGES.TXT file
    and return the name.
    """
    PACKAGES_TXT = Utils().read_file(_meta_.lib_path + "{0}_repo/"
                                     "PACKAGES.TXT".format(repo))
    names = Utils().package_name(PACKAGES_TXT)
    blacklist = BlackList().packages(pkgs=names, repo=repo)
    for line in PACKAGES_TXT.splitlines():
        status(0)
        if line.startswith("PACKAGE NAME:  ") and len(line) > 16:
            pkg_name = split_package(line[15:])[0].strip()
            if name == pkg_name and name not in blacklist:
                return pkg_name
Exemplo n.º 8
0
 def resolving_deps(self):
     """Return package dependencies
     """
     requires = []
     if (self.meta.rsl_deps in ["on", "ON"] and
             self.flag != "--resolve-off"):
         self.msg.resolving()
     for dep in self.packages:
         status(0.05)
         dependencies = []
         dependencies = Utils().dimensional_list(Dependencies(
             self.repo, self.blacklist).binary(dep, self.flag))
         requires += self._fix_deps_repos(dependencies)
         self.deps_dict[dep] = Utils().remove_dbs(requires)
     return Utils().remove_dbs(requires)
Exemplo n.º 9
0
 def list_lib(self, repo):
     """Return package lists
     """
     packages = ""
     if repo == "sbo":
         if (os.path.isfile(self.meta.lib_path +
                            "{0}_repo/SLACKBUILDS.TXT".format(repo))):
             packages = Utils().read_file(self.meta.lib_path + "{0}_repo/"
                                          "SLACKBUILDS.TXT".format(repo))
     else:
         if (os.path.isfile(self.meta.lib_path +
                            "{0}_repo/PACKAGES.TXT".format(repo))):
             packages = Utils().read_file(self.meta.lib_path + "{0}_repo/"
                                          "PACKAGES.TXT".format(repo))
     return packages
Exemplo n.º 10
0
 def update_deps(self):
     """Update dependencies dictionary with all package
     """
     for dep in self.dependencies:
         deps = Utils().dimensional_list(
             Dependencies(self.repo, self.blacklist).binary(dep, self.flag))
         self.deps_dict[dep] = deps
Exemplo n.º 11
0
 def __init__(self):
     self.meta = _meta_
     self.quit = False
     self.blackfile = "/etc/slpkg/blacklist"
     self.black_conf = ""
     if os.path.isfile(self.blackfile):
         self.black_conf = Utils().read_file(self.blackfile)
Exemplo n.º 12
0
 def clear_masters(self):
     """Clear master slackbuilds if already exist in dependencies
     or if added to install two or more times
     """
     self.master_packages = Utils().remove_dbs(self.master_packages)
     for mas in self.master_packages:
         if mas in self.dependencies:
             self.master_packages.remove(mas)
Exemplo n.º 13
0
 def clear_masters(self):
     """Clear master packages if already exist in dependencies
     or if added to install two or more times
     """
     packages = []
     for mas in Utils().remove_dbs(self.packages):
         if mas not in self.dependencies:
             packages.append(mas)
     self.packages = packages
Exemplo n.º 14
0
 def fetch(self):
     if self.repo in self.meta.default_repositories:
         exec("self._init_{0}()".format(self.repo))
     else:
         exec("self._init_custom()")
     self.lib = self.meta.lib_path + "{0}_repo/PACKAGES.TXT".format(
         self.repo)
     PACKAGES_TXT = Utils().read_file(self.lib)
     return PACKAGES_TXT, self.mirror
Exemplo n.º 15
0
 def repositories(self):
     """Get dependencies by repositories
     """
     if self.repo == "sbo":
         self.sbo_case_insensitive()
         self.find_pkg = sbo_search_pkg(self.name)
         if self.find_pkg:
             self.dependencies_list = Requires(self.flag).sbo(self.name)
     else:
         PACKAGES_TXT = Utils().read_file(
             self.meta.lib_path + "{0}_repo/PACKAGES.TXT".format(self.repo))
         self.names = Utils().package_name(PACKAGES_TXT)
         self.bin_case_insensitive()
         self.find_pkg = search_pkg(self.name, self.repo)
         if self.find_pkg:
             self.black = BlackList().packages(self.names, self.repo)
             self.dependencies_list = Dependencies(
                 self.repo, self.black).binary(self.name, self.flag)
Exemplo n.º 16
0
 def bin_case_insensitive(self):
     """Matching packages distinguish between uppercase and
     lowercase
     """
     if "--case-ins" in self.flag:
         data_dict = Utils().case_sensitive(self.names)
         for key, value in data_dict.iteritems():
             if key == self.name.lower():
                 self.name = value
Exemplo n.º 17
0
def slack_ver():
    """
    Open file and read Slackware version
    """
    sv = Utils().read_file("/etc/slackware-version")
    version = re.findall(r"\d+", sv)
    if len(sv) > 2:
        return (".".join(version[:2]))
    else:
        return (".".join(version))
Exemplo n.º 18
0
 def sbo_case_insensitive(self):
     """Matching packages distinguish between uppercase and
     lowercase for sbo repository
     """
     if "--case-ins" in self.flag:
         data = SBoGrep(name="").names()
         data_dict = Utils().case_sensitive(data)
         for key, value in data_dict.iteritems():
             if key == self.name.lower():
                 self.name = value
Exemplo n.º 19
0
 def merge(self, n):
     """Merge new file into old
     """
     if os.path.isfile(n[:-4]):
         old = Utils().read_file(n[:-4]).splitlines()
     if os.path.isfile(n):
         new = Utils().read_file(n).splitlines()
     with open(n[:-4], "w") as out:
         for l1, l2 in itertools.izip_longest(old, new):
             if l1 is None:
                 l1 = ""
             if l2 is None:
                 l2 = ""
             if l1 != l2:
                 out.write(l2 + "\n")
             else:
                 out.write(l1 + "\n")
         print("The file {0} merged in file {1}".format(
             n.split("/")[-1], n[:-4].split("/")[-1]))
Exemplo n.º 20
0
 def repository_data(self, repo):
     """
     Grap data packages
     """
     sum_pkgs, size, unsize, last_upd = 0, [], [], ""
     for line in (Utils().read_file(
             self.meta.lib_path + repo + "_repo/PACKAGES.TXT").splitlines()):
         if line.startswith("PACKAGES.TXT;"):
             last_upd = line[14:].strip()
         if line.startswith("PACKAGE NAME:"):
             sum_pkgs += 1
         if line.startswith("PACKAGE SIZE (compressed):  "):
             size.append(line[28:-2].strip())
         if line.startswith("PACKAGE SIZE (uncompressed):  "):
             unsize.append(line[30:-2].strip())
     if repo in ["salix", "slackl"]:
         log = Utils().read_file(
             self.meta.log_path + "{0}/ChangeLog.txt".format(repo))
         last_upd = log.split("\n", 1)[0]
     return [sum_pkgs, size, unsize, last_upd]
Exemplo n.º 21
0
 def __init__(self):
     self.meta = _meta_
     self.msg = Msg()
     self.tag = "[REPOSITORIES]"
     self.tag_line = False
     self.repositories_conf = "repositories.conf"
     self.conf = Utils().read_file(
         self.meta.conf_path + self.repositories_conf)
     self.enabled = []
     self.disabled = []
     self.selected = []
Exemplo n.º 22
0
 def case_insensitive(self):
     """Matching packages distinguish between uppercase and
     lowercase
     """
     if "--case-ins" in self.flag:
         data_dict = Utils().case_sensitive(self.data)
         for name in self.slackbuilds:
             index = self.slackbuilds.index(name)
             for key, value in data_dict.iteritems():
                 if key == name.lower():
                     self.slackbuilds[index] = value
Exemplo n.º 23
0
 def check_used(self, pkg):
     """Check if dependencies used
     """
     used = []
     dep_path = self.meta.log_path + "dep/"
     logs = find_package("", dep_path)
     for log in logs:
         deps = Utils().read_file(dep_path + log)
         for dep in deps.splitlines():
             if pkg == dep:
                 used.append(log)
     return used
Exemplo n.º 24
0
 def _sizes(self, package):
     """Package size summary
     """
     data = Utils().read_file(self.meta.pkg_path + package)
     for line in data.splitlines():
         if line.startswith("UNCOMPRESSED PACKAGE SIZE:"):
             digit = float((''.join(
                 re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", line[26:]))))
             if "M" in line[26:]:
                 self.size += digit * 1024
             else:
                 self.size += digit
                 break
Exemplo n.º 25
0
 def get(self):
     num = "NO_BUILD"
     if self.sbo_url:
         SlackBuild = URL("{0}{1}.SlackBuild".format(
             self.sbo_url, self.pkg)).reading()
     else:
         SlackBuild = Utils().read_file("{0}{1}/{2}.SlackBuild".format(
             self.meta.build_path, self.pkg, self.pkg))
     for line in SlackBuild.splitlines():
         line = line.lstrip()
         if line.startswith("BUILD="):
             num = re.findall(r"\d+", line)
             break
     return "".join(num)
Exemplo n.º 26
0
def sbo_search_pkg(name):
    """Search for package path from SLACKBUILDS.TXT file and
    return url
    """
    repo = Repo().default_repository()["sbo"]
    sbo_url = "{0}{1}/".format(repo, slack_ver())
    SLACKBUILDS_TXT = Utils().read_file(_meta_.lib_path +
                                        "sbo_repo/SLACKBUILDS.TXT")
    for line in SLACKBUILDS_TXT.splitlines():
        if line.startswith("SLACKBUILD LOCATION"):
            sbo_name = (line[23:].split("/")[-1].replace("\n", "")).strip()
            if name == sbo_name:
                return (sbo_url + line[23:].strip() + "/")
    return ""
Exemplo n.º 27
0
def library(repo):
    """Load packages from slpkg library and from local
    """
    pkg_list, packages = [], ""
    if repo == "sbo":
        if (os.path.isfile(_meta_.lib_path +
                           "{0}_repo/SLACKBUILDS.TXT".format(repo))):
            packages = Utils().read_file(_meta_.lib_path + "{0}_repo/"
                                         "SLACKBUILDS.TXT".format(repo))
    else:
        if (os.path.isfile(_meta_.lib_path +
                           "{0}_repo/PACKAGES.TXT".format(repo))):
            packages = Utils().read_file(_meta_.lib_path + "{0}_repo/"
                                         "PACKAGES.TXT".format(repo))
    for line in packages.splitlines():
        if repo == "sbo":
            if line.startswith("SLACKBUILD NAME: "):
                pkg_list.append(line[17:].strip())
        elif "local" not in repo:
            if line.startswith("PACKAGE NAME: "):
                pkg_list.append(line[15:].strip())
    if repo == "local":
        pkg_list = find_package("", _meta_.pkg_path)
    return pkg_list
Exemplo n.º 28
0
def pkg_security(pkgs):
    """Check packages before install or upgrade for security
    reasons. Configuration file in the /etc/slpkg/pkg_security"""
    security_packages = Utils().read_file("/etc/slpkg/pkg_security")
    packages = []
    for read in security_packages.splitlines():
        read = read.lstrip()
        if not read.startswith("#"):
            packages.append(read.replace("\n", ""))
    for p in pkgs:
        for pkg in packages:
            if p == pkg:
                Msg().security_pkg(p)
                if not Msg().answer() in ["y", "Y"]:
                    raise SystemExit()
Exemplo n.º 29
0
 def get_deps(self):
     """Grap package requirements from repositories
     """
     if self.repo == "rlw":
         dependencies = {}
         rlw_deps = Utils().read_file(_meta_.conf_path + "rlworkman.deps")
         for line in rlw_deps.splitlines():
             if line and not line.startswith("#"):
                 pkgs = line.split(":")
                 dependencies[pkgs[0]] = pkgs[1]
         if self.name in dependencies.keys():
             return dependencies[self.name].split()
         else:
             return ""
     else:
         PACKAGES_TXT = Utils().read_file("{0}{1}_repo/PACKAGES.TXT".format(
             _meta_.lib_path, self.repo))
         for line in PACKAGES_TXT.splitlines():
             if line.startswith("PACKAGE NAME:"):
                 pkg_name = split_package(line[14:].strip())[0]
             if line.startswith("PACKAGE REQUIRED:"):
                 if pkg_name == self.name:
                     if line[18:].strip():
                         return self._req_fix(line)
Exemplo n.º 30
0
 def slack(self):
     """Official slackware repository
     """
     default = "http://mirrors.slackware.com/slackware/"
     if self.meta.arch.startswith("arm"):
         default = "http://ftp.arm.slackware.com/slackwarearm/"
     if os.path.isfile("/etc/slpkg/slackware-mirrors"):
         mirrors = Utils().read_file(
             self.meta.conf_path + "slackware-mirrors")
         for line in mirrors.splitlines():
             line = line.rstrip()
             if not line.startswith("#") and line:
                 default = line.split()[-1]
     if not default.endswith("/"):
         default += "/"
     return default