def diff(self, n): """Print the differences between the two files """ if os.path.isfile(n[:-4]): diff1 = Utils().read_file(n[:-4]).splitlines() if os.path.isfile(n): diff2 = Utils().read_file(n).splitlines() lines, l, c = [], 0, 0 for a, b in itertools.izip_longest(diff1, diff2): l += 1 if a != b: for s1, s2 in itertools.izip_longest(str(a), str(b)): c += 1 if s1 != s2: break print("@@ -{0},{1} +{2},{3} @@\n".format(l, c, l, c)) for line in lines[-3:]: print("{0}".format(line)) if a is None: a = "" print("{0}{1}{2}{3}".format(self.red, "-", self.endc, a)) if b is None: b = "" print("{0}{1}{2}{3}".format(self.green, "+", self.endc, b)) lines = [] c = 0 else: lines.append(a)
def find(self): """Find installed Slackware packages """ matching = size = 0 print("\nPackages with matching name [ {0}{1}{2} ]\n".format( self.meta.color["CYAN"], ", ".join(self.binary), self.meta.color["ENDC"])) for pkg in self.binary: for match in find_package("", self.meta.pkg_path): if pkg in match: matching += 1 print("[ {0}installed{1} ] - {2}".format( self.meta.color["GREEN"], self.meta.color["ENDC"], match)) data = Utils().read_file(self.meta.pkg_path + match) for line in data.splitlines(): if line.startswith("UNCOMPRESSED PACKAGE SIZE:"): if "M" in line[26:]: size += float(line[26:-1]) * 1024 else: size += float(line[26:-1]) break if matching == 0: message = "Can't find" Msg().pkg_not_found("", ", ".join(self.binary), message, "\n") else: print("\n{0}Total found {1} matching packages.{2}".format( self.meta.color["GREY"], matching, self.meta.color["ENDC"])) unit = "Kb" if size > 1024: unit = "Mb" size = (size / 1024) print("{0}Size of installed packages {1} {2}.{3}\n".format( self.meta.color["GREY"], round(size, 2), unit, self.meta.color["ENDC"]))
def view(self): """View slpkg config file """ print("") # new line at start conf_args = [ "RELEASE", "BUILD_PATH", "PACKAGES", "PATCHES", "CHECKMD5", "DEL_ALL", "DEL_BUILD", "SBO_BUILD_LOG", "MAKEFLAGS", "DEFAULT_ANSWER", "REMOVE_DEPS_ANSWER", "SKIP_UNST", "RSL_DEPS", "DEL_DEPS", "USE_COLORS", "DOWNDER", "DOWNDER_OPTIONS", "SLACKPKG_LOG", "ONLY_INSTALLED", "PRG_BAR", "EDITOR" ] read_conf = Utils().read_file(self.config_file) for line in read_conf.splitlines(): if not line.startswith("#") and line.split("=")[0] in conf_args: print("{0}".format(line)) else: print("{0}{1}{2}".format(self.meta.color["CYAN"], line, self.meta.color["ENDC"])) print("") # new line at end
def _check_if_used(self, removes): """Check package if dependencies for another package before removed""" if self.extra == "--check-deps": print("") view = False package, dependency = [], [] for pkg in find_package("", self.dep_path): deps = Utils().read_file(self.dep_path + pkg) for rmv in removes: if rmv in deps.split(): view = True package.append(pkg) dependency.append(rmv) if view: Msg().template(78) print("| {0}{1}{2}".format( self.meta.color["RED"], " " * 30 + "!!! WARNING !!!", self.meta.color["ENDC"])) Msg().template(78) for p, d in zip(package, dependency): print("| {0}{1}{2} is dependency of the package --> " "{3}{4}{5}".format(self.meta.color["YELLOW"], d, self.meta.color["ENDC"], self.meta.color["GREEN"], p, self.meta.color["ENDC"])) Msg().template(78) self._skip_remove()
def get_deps(self): """Grap package requirements from repositories """ if self.repo == "rlw": # Robby"s repository dependencies as shown in the central page # http://rlworkman.net/pkgs/ dependencies = { "abiword": "wv", "claws-mail": "libetpan", "inkscape": "gtkmm atkmm pangomm cairomm mm-common libsigc++ " "libwpg lxml gsl numpy BeautifulSoup", "texlive": "libsigsegv texi2html", "xfburn": "libburn libisofs" } 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)
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)
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)
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 key, value in data_dict.iteritems(): if key == self.name.lower(): self.name = value
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)
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()
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
def update_deps(self): """Update dependencies dictionary with all package """ onelist, dependencies = [], [] onelist = Utils().dimensional_list(self.deps) dependencies = Utils().remove_dbs(onelist) for dep in dependencies: deps = Requires(self.flag).sbo(dep) self.deps_dict[dep] = self.one_for_all(deps)
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
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:"): if "M" in line[26:]: self.size += float(line[26:-1]) * 1024 else: self.size += float(line[26:-1]) break
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: for key, value in data_dict.iteritems(): if key == name.lower(): index = self.slackbuilds.index(name) self.slackbuilds[index] = value
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
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 = []
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()
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
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()
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
def _view_deps(self, path, package): """View dependencies for before remove """ dependencies = Utils().read_file(path + package) print("") # new line at start Msg().template(78) print("| Found dependencies for package {0}:".format(package)) Msg().template(78) for dep in dependencies.splitlines(): print("| {0}{1}{2}".format(self.meta.color["RED"], dep, self.meta.color["ENDC"])) Msg().template(78) return dependencies
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
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
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
def case_insensitive(self): """Matching packages distinguish between uppercase and lowercase """ if "--case-ins" in self.flag: data = [] for name in self.data[0]: data.append(split_package(name)[0]) data_dict = Utils().case_sensitive(data) for pkg in self.packages: for key, value in data_dict.iteritems(): if key == pkg.lower(): index = self.packages.index(pkg) self.packages[index] = value
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 ""
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)
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 ""
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:])))) self.file_size = line[26:].strip() if "M" in line[26:]: self.size += digit * 1024 else: self.size += digit break
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
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)
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()
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
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
def __init__(self, name): self.name = name self.meta = _meta_ arch64 = "x86_64" self.line_name = "SLACKBUILD NAME: " self.line_files = "SLACKBUILD FILES: " self.line_down = "SLACKBUILD DOWNLOAD: " self.line_down_64 = "SLACKBUILD DOWNLOAD_{0}: ".format(arch64) self.line_req = "SLACKBUILD REQUIRES: " self.line_ver = "SLACKBUILD VERSION: " self.line_md5 = "SLACKBUILD MD5SUM: " self.line_md5_64 = "SLACKBUILD MD5SUM_{0}: ".format(arch64) self.line_des = "SLACKBUILD SHORT DESCRIPTION: " self.sbo_txt = self.meta.lib_path + "sbo_repo/SLACKBUILDS.TXT" self.answer = ["y", "Y"] self.unst = ["UNSUPPORTED", "UNTESTED"] self.SLACKBUILDS_TXT = Utils().read_file(self.sbo_txt)
def data(self): """Check all installed packages and create dictionary database """ for pkg in self.installed: if os.path.isfile(self.meta.pkg_path + pkg): name = split_package(pkg)[0] for log in self.logs: deps = Utils().read_file(self.dep_path + log) for dep in deps.splitlines(): if name == dep: if name not in self.dmap.keys(): self.dmap[name] = [log] self.count_dep += 1 else: self.dmap[name] += [log] self.count_pkg += 1
def sbo_search_pkg(name): """ Search for package path from SLACKBUILDS.TXT file """ try: repo = Repo().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 "" except KeyboardInterrupt: print("") # new line at exit sys.exit(0)
def data(self): """Check all installed packages and create dictionary database """ for pkg in self.installed: if os.path.isfile(self.meta.pkg_path + pkg): name = split_package(pkg)[0] for log in self.logs: deps = Utils().read_file(self.dep_path + log) for dep in deps.splitlines(): if name == dep: if name not in self.dmap.keys(): self.dmap[name] = [log] if not self.count_pkg: self.count_pkg = 1 else: self.dmap[name] += [log] self.count_packages()
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
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
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)
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))
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]))
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]
def _check_if_used(self, removes): """Check package if dependencies for another package before removed""" if "--check-deps" in self.extra: package, dependency, pkg_dep = [], [], [] for pkg in find_package("", self.dep_path): deps = Utils().read_file(self.dep_path + pkg) for rmv in removes: if GetFromInstalled(rmv).name() and rmv in deps.split(): pkg_dep.append( "{0} is dependency of the package --> {1}".format( rmv, pkg)) package.append(pkg) dependency.append(rmv) if package: if "--checklist" in self.extra: data = pkg_dep text = ("Press 'spacebar' to choose packages to exception " "remove") title = "!!! WARNING !!!" backtitle = "{0} {1}".format(self.meta.__all__, self.meta.__version__) status = False choose = DialogUtil(data, text, title, backtitle, status).checklist() for pkg in choose: self.skip.append(pkg.split()[0]) else: self.msg.template(78) print("| {0}{1}{2}".format( self.meta.color["RED"], " " * 30 + "!!! WARNING !!!", self.meta.color["ENDC"])) self.msg.template(78) for p, d in zip(package, dependency): print("| {0}{1}{2} is dependency of the package --> " "{3}{4}{5}".format(self.meta.color["YELLOW"], d, self.meta.color["ENDC"], self.meta.color["GREEN"], p, self.meta.color["ENDC"])) self.msg.template(78) self._skip_remove()
def view(self): """Print package description by repository """ print("") # new line at start description, count = "", 0 if self.repo == "sbo": description = SBoGrep(self.name).description() else: PACKAGES_TXT = Utils().read_file(self.lib) for line in PACKAGES_TXT.splitlines(): if line.startswith(self.name + ":"): description += line[len(self.name) + 2:] + "\n" count += 1 if count == 11: break if description: print("{0}{1}{2}".format(self.COLOR, description, self.meta.color["ENDC"])) else: self.msg.pkg_not_found("", self.name, "No matching", "\n") if description and self.repo == "sbo": print("")
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
def __init__(self, name): self.name = name self.meta = _meta_ arch64 = "x86_64" self.line_name = "SLACKBUILD NAME: " self.line_down = "SLACKBUILD DOWNLOAD: " self.line_down_64 = "SLACKBUILD DOWNLOAD_{0}: ".format(arch64) self.line_req = "SLACKBUILD REQUIRES: " self.line_ver = "SLACKBUILD VERSION: " self.line_md5 = "SLACKBUILD MD5SUM: " self.line_md5_64 = "SLACKBUILD MD5SUM_{0}: ".format(arch64) self.line_des = "SLACKBUILD SHORT DESCRIPTION: " self.sbo_txt = self.meta.lib_path + "sbo_repo/SLACKBUILDS.TXT" self.answer = ["y", "Y"] self.unst = ["UNSUPPORTED", "UNTESTED"] self.SLACKBUILDS_TXT = Utils().read_file(self.sbo_txt)
def __init__(self): queue_file = [ "# In this file you can create a list of\n", "# packages you want to build or install.\n", "#\n" ] self.meta = _meta_ self.quit = False self.queue = self.meta.lib_path + "queue/" self.queue_list = self.queue + "queue_list" if not os.path.exists(self.meta.lib_path): os.mkdir(self.meta.lib_path) if not os.path.exists(self.queue): os.mkdir(self.queue) if not os.path.isfile(self.queue_list): with open(self.queue_list, "w") as queue: for line in queue_file: queue.write(line) queue.close() self.queued = Utils().read_file(self.queue_list)