From 62ce5bff4493ba1402e80b51eb3db6bb8fe93e3c Mon Sep 17 00:00:00 2001 From: dslackw Date: Wed, 28 May 2014 17:35:41 +0300 Subject: [PATCH] updated for version 1.3.6 --- CHANGELOG | 5 + PKG-INFO | 2 +- README.rst | 38 ++++++- bin/slpkg | 307 ++++++++++++++++++++++++++++++++++++++++++++++------ man/slpkg.8 | 35 +++++- setup.py | 2 +- 6 files changed, 353 insertions(+), 36 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ad176ac1..45f3d174 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +28-05-2014 +Version 1.3.6 + +[Feature] - Added download package with all dependencies build and install all + 24-05-2014 Version 1.3.5 diff --git a/PKG-INFO b/PKG-INFO index 4764baad..a00f1adc 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: slpkg -Version: 1.3.5 +Version: 1.3.6 Author: dslackw Author-email: d zlatanidis at gmail com Maintainer: dslackw diff --git a/README.rst b/README.rst index 94eab3ea..aed8293b 100644 --- a/README.rst +++ b/README.rst @@ -17,6 +17,7 @@ Slpkg is a terminal tool in order to easy use Slackware packages. Features -------- +- Download package with all dependencies build and install all - Automatic tool build and install packages - List all installed packages - Ī¤racking dependencies @@ -71,8 +72,8 @@ Command Line Tool Usage .. code-block:: bash usage: slpkg [-h] [-v] [-s script [source ...]] [-l all, sbo [all, sbo ...]] - [-t] [-n] [-c] [-i [...]] [-u [...]] [-a [...]] [-r [...]] - [-f [...]] [-d [...]] + [-t] [-n] [-c] [-b] [-i [...]] [-u [...]] [-a [...]] + [-r [...]] [-f [...]] [-d [...]] Utility to help package management in Slackware @@ -86,6 +87,7 @@ Command Line Tool Usage -t tracking dependencies -n find from SBo repositority -c check if your package is up to date + -b download, build & install pkg from SBo -i [ ...] install binary packages -u [ ...] install-upgrade packages with new -a [ ...] reinstall the same packages @@ -98,6 +100,38 @@ Command Line Tool Usage Slpkg Examples -------------- +Find package from slackbuilds.org download, +build and install with all dependencies : + +.. code-block:: bash + + $ slpkg -b brasero + Searching `brasero` from slackbuilds.org ... + Searching `libunique` from slackbuilds.org ..... + Searching `gst1-plugins-bad` from slackbuilds.org ...... + Searching `gst1-plugins-base` from slackbuilds.org ........ + Searching `gstreamer1` from slackbuilds.org .... + Searching `orc` from slackbuilds.org .... + + +============================================================================== + | Installing new package /tmp/brasero-3.11.3-x86_64-1_SBo.tgz + +============================================================================== + + Verifying package brasero-3.11.3-x86_64-1_SBo.tgz. + Installing package brasero-3.11.3-x86_64-1_SBo.tgz: + PACKAGE DESCRIPTION: + # brasero (CD/DVD burning application) + # + # Brasero is a application to burn CD/DVD for the Gnome Desktop. It is + # designed to be as simple as possible and has some unique features to + # enable users to create their discs easily and quickly. + # + # Homepage: http://projects.gnome.org/brasero + # + Executing install script for brasero-3.11.3-x86_64-1_SBo.tgz. + Package brasero-3.11.3-x86_64-1_SBo.tgz installed. + + Tracking all dependencies of packages: diff --git a/bin/slpkg b/bin/slpkg index 00b69030..b4744739 100755 --- a/bin/slpkg +++ b/bin/slpkg @@ -3,13 +3,17 @@ -'''Slpkg is a terminal tool in order to easy use Slackware packages. -It's a quick and easy way to manage your packages in slackware to a command. +'''Utility to help package management in Slackware. +Slpkg is a terminal tool in order to easy use Slackware packages. + + +It's a quick and easy way to manage your packages in Slackware to a command. + usage: slpkg [-h] [-v] [-s script [source ...]] [-l all, sbo [all, sbo ...]] - [-t] [-n] [-c] [-i [...]] [-u [...]] [-a [...]] [-r [...]] - [-f [...]] [-d [...]] + [-t] [-n] [-c] [-b] [-i [...]] [-u [...]] [-a [...]] + [-r [...]] [-f [...]] [-d [...]] Utility to help package management in Slackware @@ -23,6 +27,7 @@ optional arguments: -t tracking dependencies -n find from SBo repositority -c check if your package is up to date + -b download, build & install pkg from SBo -i [ ...] install binary packages -u [ ...] install-upgrade packages with new -a [ ...] reinstall the same packages @@ -46,7 +51,7 @@ import subprocess __author__ = "dslackw" -__version__ = "1.3.5" +__version__ = "1.3.6" __license__ = "GNU General Public License v3 (GPLv3)" __email__ = "d.zlatanidis@gmail.com" @@ -66,6 +71,8 @@ tmp = "/tmp/" # create dependencies list dep_results = [] +dep_links_results = [] + # SlackBuilds repository link @@ -111,8 +118,6 @@ def rmv_unused(name): return name - - # get filename from links def get_file(link): char = "/" @@ -134,6 +139,26 @@ def get_file(link): return file +# get version from files +def get_version(name): + char = "-" + + j = 0 + results = [] + for i in name: + j += 1 + results.append(name[-j:]) + + for file in results: + if file.startswith(char): + file = file + break + + file = file.strip(" ") # remove spaces from string + + return file + + # this fuction return if the package exist def find_package(find_pkg, directory): @@ -268,6 +293,7 @@ def sbo_extra_dwn(sbo_url, name): read_info = url_read(sbo_url) results = [] + for line in read_info.splitlines(): if line.startswith(' '): line = line[10:-1] @@ -296,31 +322,77 @@ def sbo_requires_pkg(sbo_url, name): # search for package dependencies def sbo_dependencies_pkg(name): + if name == "%README%": # avoid to search %README% as dependency + pass + else: + find_sbo_url = sbo_search_pkg(name) + if find_sbo_url == None: + print ("\n") + print ("{}The {}'{}'{} not found{}\n".format(colors.RED, + colors.CYAN, name, colors.RED, colors.ENDC)) + + else: + find_sbo_req = sbo_requires_pkg(find_sbo_url, name) + dependencies = find_sbo_req.split() # convert string to list + + if dependencies == []: + pass + + else: + dep_results.append(dependencies) + + for line in dependencies: + print + sbo_dependencies_pkg(line) + + return dep_results + + + +# search for package dependencies +def sbo_dependencies_links_pkg(name): if name == "%README%": # avoid to search %README% as dependency pass else: + find_sbo_url = sbo_search_pkg(name) + if find_sbo_url == None: - print ("\n") + print ("\n") print ("{}The {}'{}'{} not found{}\n".format(colors.RED, - colors.CYAN, name, colors.RED, colors.ENDC)) + colors.CYAN, name, colors.RED, colors.ENDC)) else: + find_sbo_dwn = sbo_slackbuild_dwn(find_sbo_url, name) + find_source_dwn = sbo_source_dwn(find_sbo_url, name) + find_extra_dwn = sbo_extra_dwn(find_sbo_url, name) find_sbo_req = sbo_requires_pkg(find_sbo_url, name) - dependencies = find_sbo_req.split() # convert string to list + + # create flag to know how much extra source there are + if find_extra_dwn != []: + flag = str(len(find_extra_dwn)) + dep_links_results.append(flag) + + sbo_dwn = find_sbo_dwn.split() + source_dwn = find_source_dwn.split() + dependencies = find_sbo_req.split() + + dep_links_results.append(find_extra_dwn) + dep_links_results.append(source_dwn) + dep_links_results.append(sbo_dwn) + if dependencies == []: pass - + else: - dep_results.append(dependencies) + dep_links_results.append(dependencies) + for line in dependencies: + print + sbo_dependencies_links_pkg(line) - for line in dependencies: - print - sbo_dependencies_pkg(line) - - return dep_results + return dep_links_results @@ -358,8 +430,7 @@ def build_package(script, source): shutil.copy2(source_tar, pkg_name) os.chdir(path + pkg_name) os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild")) - print ("{}Use {}`slpkg -u`{} to install - upgrade this package{}\n".format(colors.YELLOW, - colors.CYAN, colors.YELLOW, colors.ENDC)) + os.chdir(path) except (OSError, IOError): print print ("{}Wrong file name, Please try again...{}\n".format(colors.RED, @@ -373,12 +444,6 @@ def build_extra_pkg(script, source, extra): source_tar = source extra_source = extra - print slack_script - print source_tar - print extra_source - - - # remove file type from slackbuild script and store the name pkg_name = slack_script.replace(".tar.gz", "") if pkg_name != slack_script: @@ -395,8 +460,6 @@ def build_extra_pkg(script, source, extra): shutil.copy2(extra_source, pkg_name) os.chdir(path + pkg_name) os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild")) - print ("{}Use {}`slpkg -u`{} to install - upgrade this package{}\n".format(colors.YELLOW, - colors.CYAN, colors.YELLOW, colors.ENDC)) except (OSError, IOError): print print ("{}Wrong file name, Please try again...{}\n".format(colors.RED, @@ -428,8 +491,6 @@ def build_extra2_pkg(script, source, extra, extra2): shutil.copy2(extra2_source, pkg_name) os.chdir(path + pkg_name) os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild")) - print ("{}Use {}`slpkg -u`{} to install - upgrade this package{}\n".format(colors.YELLOW, - colors.CYAN, colors.YELLOW, colors.ENDC)) except (OSError, IOError): print print ("{}Wrong file name, Please try again...{}\n".format(colors.RED, @@ -499,11 +560,12 @@ def pkg_tracking(name): print ("+" + "=" * pkg_len) find_dependencies.reverse() + print (" |") for i in range(len(find_dependencies)): found = " --", str(len(find_dependencies[i])), " ".join(find_dependencies[i]) print (" |") - print " ".join(found) + print " ".join(found) print @@ -654,6 +716,169 @@ def sbo_check(name): +# find package and dependencies download, build and install +def sbo_build(name): + find_dependencies_links = sbo_dependencies_links_pkg(name) + + # create one list + if find_dependencies_links != []: + results = [] + for i in range(len(find_dependencies_links)): + for j in range(len(find_dependencies_links[i])): + results.append(find_dependencies_links[i][j]) + + + # grep only links from list + dwn_link = [] + for link in results: + if link.startswith('http'): + dwn_link.append(link) + + dwn_link.reverse() # upside-down list + + files = [] + for i in range(len(dwn_link)): + files.append(get_file(dwn_link[i])) # get tar archives from link + + # get version from source code + version = [] + j = 1 + for i in range(len(files) / 2): + if files[j].endswith("tar.gz"): + ver = files[j] + ver = ver[:-7] # remove archive type .tar.gz + ver = get_version(ver) # remove file name and take the version + ver = ver.replace("-", "") + version.append(ver) + j += 2 + + elif files[j].endswith("tar.bz2"): + ver = files[j] + ver = ver[:-8] + ver = get_version(ver) + ver = ver.replace("-", "") + version.append(ver) + j += 2 + + elif files[j].endswith("zip"): + ver = files[j] + ver = ver[:-4] + ver = get_version(ver) + ver = ver.replace("-", "") + version.append(ver) + j += 2 + + elif files[j].endswith("tar.xz"): + ver = files[j] + ver = ver[:-7] + ver = get_version(ver) + ver = ver.replace("-", "") + version.append(ver) + j += 2 + + + # get filename from sbo script + filename = [] + y = 0 + for i in range(len(files) / 2): + if files[y].endswith("tar.gz"): + file = files[y] + file = file[:-7] + filename.append(file) + y += 2 + + elif files[y].endswith("tar.bz2"): + file = files[y] + file = file[:-8] + filename.append(file) + y += 2 + + elif files[y].endswith("zip"): + file = files[y] + file = file[:-4] + filename.append(file) + y += 2 + + elif files[y].endswith("tar.xz"): + file = files[y] + file = file[:-7] + filename.append(file) + y += 2 + + + # link sbo filename with version + filename_version = [] + for i in range(len(filename)): + filename_version.append(filename[i] + "-" + version[i]) + + wget_links = set(dwn_link) # remove duplicate links + + # dwonload links + for link in wget_links: + os.system("wget {}".format(link)) + + # build packages and store slackware files in /tmp directory + if results[0] == "1": # check how many extra sources + + for i in range(len(files) / 2): + if len(files) < 4: + script = files[0] + source = files[1] + extra = files[2] + build_extra_pkg(script, source, extra) + + install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", "")) + os.system("upgradepkg --install-new {}".format(install_pkg)) + break + else: + + script = files[0] + source = files[1] + build_package(script, source) + + install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", "")) + os.system("upgradepkg --install-new {}".format(install_pkg)) + + for j in range(0, 2): + files.pop(0) + + elif results[0] == "2": # check how many extra sources + + for i in range(len(files) / 2): + if len(files) < 5: + script = files[0] + source = files[1] + extra = files[2] + extra2 = files[3] + build_extra2_pkg(script, source, extra, extra2) + + install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", "")) + os.system("upgradepkg --install-new {}".format(install_pkg)) + break + else: + script = files[0] + source = files[1] + build_package(script, source) + + install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", "")) + os.system("upgradepkg --install-new {}".format(install_pkg)) + + for j in range(0, 2): + files.pop(0) + else: + + for i in range(len(files) / 2): + script = files[0] + source = files[1] + build_package(script, source) + install_pkg = (subprocess.check_output(["ls /tmp/{}*.tgz".format(filename_version[i])],shell=True).replace("\n", "")) + os.system("upgradepkg --install-new {}".format(install_pkg)) + + for j in range(0, 2): + files.pop(0) + + + # install binary package def pkg_install(name): s_user(getpass.getuser()) @@ -733,30 +958,46 @@ def pkg_display(name): def main(): description = "Utility to help package management in Slackware" parser = argparse.ArgumentParser(description=description) + parser.add_argument("-v", "--verbose", help="print version and exit", action="store_true") + parser.add_argument("-s", help="auto build package", type=str, nargs="+", metavar=('script','source')) + parser.add_argument("-l", help="list of installed packages", nargs="+", choices="all sbo".split(), metavar=('all, sbo')) + parser.add_argument("-t", help="tracking dependencies", type=str, metavar=('')) + parser.add_argument("-n", help="find from SBo repositority", type=str, metavar=('')) + parser.add_argument("-c", help="check if your package is up to date", type=str, metavar=('')) + + parser.add_argument("-b", help="download, build & install pkg from SBo", + type=str, metavar=('')) + parser.add_argument("-i", help="install binary packages", type=str, nargs="+", metavar=('')) + parser.add_argument("-u", help="install-upgrade packages with new", type=str, nargs="+", metavar=('')) + parser.add_argument("-a", help="reinstall the same packages", type=str, nargs="+", metavar=('')) + parser.add_argument("-r", help="remove packages", type=str, nargs="+", metavar=('')) + parser.add_argument("-f", help="find if packages installed", type=str, nargs="+", metavar=('')) + parser.add_argument("-d", help="display the contents of the packages", type=str, nargs="+", metavar=('')) + args = parser.parse_args() @@ -783,7 +1024,11 @@ def main(): if args.c: sbo_check(args.c) + + if args.b: + sbo_build(args.b) + if args.i: pkg_install(args.i) @@ -808,7 +1053,7 @@ def main(): pkg_display(args.d) - if not any([args.verbose, args.s, args.t, args.c, args.n, args.i, args.u, args.a, + if not any([args.verbose, args.s, args.t, args.c, args.n, args.b, args.i, args.u, args.a, args.r, args.l, args.f, args.d]): os.system("slpkg -h") diff --git a/man/slpkg.8 b/man/slpkg.8 index e4fd0da6..b2ef6078 100644 --- a/man/slpkg.8 +++ b/man/slpkg.8 @@ -16,7 +16,7 @@ slpkg - Utility to help package management in Slackware .SH SYNOPSIS \fBslpkg\fP \fB-h\fP \fB-v\fP \fB-s script [source ...]\fP \fB-l all, sbo [all, sbo ...]\fP - \fB-t\fP \fB-n\fP \fB-c\fP \fB-i [...]\fP \fB-u [...]\fP \fB-a [...]\fP \fB-r [...]\fP \fB-f [...]\fP \fB-d [...]\fP + \fB-t\fP \fB-n\fP \fB-c\fP \fB-b\fP \fB-i [...]\fP \fB-u [...]\fP \fB-a [...]\fP \fB-r [...]\fP \fB-f [...]\fP \fB-d [...]\fP .SH DESCRIPTION \fBslpkg\fP is a terminal tool in order to easy use Slackware packages. .PP @@ -31,6 +31,7 @@ It's a quick and easy way to manage your packages in slackware to a command. \fB-t tracking dependencies\fP \fB-n find from SBo repositority\fP \fB-c check if your package is up to date\fP + \fB-b download, build & install pkg from SBo\fP \fB-i [ ...] install binary packages\fP \fB-u [ ...] install-upgrade packages with new\fP \fB-a [ ...] reinstall the same packages\fP @@ -69,6 +70,11 @@ the network. (www.slackbuilds.org) \fBslpkg\fP \fB-c\fP <\fIname of package\fP> .PP Check if your packages from www.slackbuilds.org is updated. +.SS -b , find, download, build and install package with all dependencies +\fBslpkg\fP \fB-b\fP <\fIname of package\fP> +.PP +Find package from slackbuild.org with all dependencies, +download, build and install them. .SS -i , install binary package \fBslpkg\fP \fB-i\fP <\fIpackages.t?z\fP> .PP @@ -112,6 +118,7 @@ For example: \fBslpkg \-\-help\fP - display help for slpkg .SH EXAMPLES + $ \fBslpkg -t brasero\fP +========================= @@ -127,6 +134,32 @@ $ \fBslpkg -t brasero\fP | -- 2 libunique gst1-plugins-bad +$ \fBslpkg -b flexget\fP + Searching `brasero` from slackbuilds.org ... + Searching `libunique` from slackbuilds.org ... + Searching `gst1-plugins-bad` from slackbuilds.org ... + Searching `gst1-plugins-base` from slackbuilds.org ... + Searching `gstreamer1` from slackbuilds.org ... + Searching `orc` from slackbuilds.org ... + + +============================================================================== + | Installing new package /tmp/brasero-3.11.3-x86_64-1_SBo.tgz + +============================================================================== + + Verifying package brasero-3.11.3-x86_64-1_SBo.tgz. + Installing package brasero-3.11.3-x86_64-1_SBo.tgz: + PACKAGE DESCRIPTION: + # brasero (CD/DVD burning application) + # + # Brasero is a application to burn CD/DVD for the Gnome Desktop. It is + # designed to be as simple as possible and has some unique features to + # enable users to create their discs easily and quickly. + # + # Homepage: http://projects.gnome.org/brasero + # + Executing install script for brasero-3.11.3-x86_64-1_SBo.tgz. + Package brasero-3.11.3-x86_64-1_SBo.tgz installed. + $ \fBslpkg -c flashplayer-plugin\fP Searching `flashplayer-plugin` from slackbuilds.org ... diff --git a/setup.py b/setup.py index 0614b3f6..837adee5 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ from distutils.core import setup setup( name = 'slpkg', - version = "1.3.5", + version = "1.3.6", description = "Python tool to manage Slackware packages", keywords = ["slackware", "slpkg", "upgrade", "install", "remove", "view", "slackpkg", "tool"],