From 8eee95a2f55725c195b921d448204eca0954cafe Mon Sep 17 00:00:00 2001 From: Dimitris Zlatanidis Date: Mon, 1 Jun 2015 15:23:15 +0300 Subject: [PATCH] added skip packages when upgrading --- CHANGELOG | 8 ++++-- README.rst | 40 +++++++++++++++++++++++---- man/slpkg.8 | 4 +-- slpkg/arguments.py | 7 ++--- slpkg/binary/check.py | 62 ++++++++++++++++++++++++------------------ slpkg/main.py | 12 ++++++-- slpkg/sbo/check.py | 4 +-- slpkg/slack/patches.py | 6 ++-- 8 files changed, 95 insertions(+), 48 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a8ae12ca..30fae1b0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,24 +1,26 @@ Version 2.4.0 +02-06-2015 [Updated] - Updated comments arguments to '--help' option. +[Feature] - Added additional option to skip packages when upgrading. Version 2.3.6 -30-05-2014 +30-05-2015 [Updated] - Fixed to avoid input the first package for searching when input multiple packages together with the option '-F'. Version 2.3.5 -30-05-2014 +30-05-2015 [Updated] - Added version for SBo packages when search with option '-F'. Version 2.3.4 -28-05-2014 +28-05-2015 [Updated] - Fix arguments comments. - Update compression slackbuild package. diff --git a/README.rst b/README.rst index 6fc805f6..6f64bbc0 100644 --- a/README.rst +++ b/README.rst @@ -317,7 +317,7 @@ Command Line Tool Usage \__ \ | |_) | < (_| | |___/_| .__/|_|\_\__, | |_| |___/ - + Commands: update Run this command to update all the packages list. @@ -352,13 +352,12 @@ Command Line Tool Usage -g, config, config=[editor] Configuration file management. Print the configuration file or edit. - -l, [repository], --index, --installed List of repositories packages. - Print a list of all available + -l, [repository], --index, --installed Print a list of all available packages repository, index or print only packages installed on the system. - -c, [repository] --upgrade Check and print of available - packages for upgrade. + -c, [repository] --upgrade, --skip=[] Check the install upgraded packages + from repositories. -s, [repository] [package...] Sync packages. Install packages directly from remote repositories with all dependencies. @@ -752,6 +751,37 @@ why always you can have updated your system: Would you like to continue [Y/n]? + +Skip packages when upgrading: + +.. code-block:: bash + + $ slpkg -c sbo --upgrade --skip=pip,jdk + Checking ...................Done + Reading package lists ......Done + Resolving dependencies ...Done + + The following packages will be automatically installed or upgraded + with new version: + + +============================================================================== + | Package Version Arch Build Repos Size + +============================================================================== + Upgrading: + cffi 1.1.0 x86_64 SBo + Installing for dependencies: + pysetuptools 17.0 x86_64 SBo + pycparser 2.13 x86_64 SBo + + Installing summary + =============================================================================== + Total 3 packages. + 0 package will be installed, 1 allready installed and 2 packages + will be upgraded. + + Would you like to continue [Y/n]? + + View complete slackbuilds.org site in your terminal. Read fies, download, build or install: diff --git a/man/slpkg.8 b/man/slpkg.8 index e7c26925..b32c48b3 100644 --- a/man/slpkg.8 +++ b/man/slpkg.8 @@ -122,9 +122,9 @@ Print configuration file or edit with editor. List of packages per repository. Support command 'grep' like '# slpkg -l sbo | grep "python"'. .SS -c , check if your packages is up to date -\fBslpkg\fP \fB-c\fP <\fIrepository\fP> \fB--upgrade\fP +\fBslpkg\fP \fB-c\fP <\fIrepository\fP> \fB--upgrade\fP \fB--skip=[packages...]\fP .PP -Check your packages if up to date. +Check your packages if up to date. Option '--skip' help to skip packages when upgrading. Slackware 'patches' repository works independently of the others i.e not need before updating the list of packages by choosing "# slpkg update", works directly with the official repository and so always you can have updated your system. diff --git a/slpkg/arguments.py b/slpkg/arguments.py index 12980923..ce8503b8 100644 --- a/slpkg/arguments.py +++ b/slpkg/arguments.py @@ -69,13 +69,12 @@ Optional arguments: -g, config, config=[editor] Configuration file management. Print the configuration file or edit. - -l, [repository], --index, --installed List of repositories packages. - Print a list of all available + -l, [repository], --index, --installed Print a list of all available packages repository, index or print only packages installed on the system. - -c, [repository] --upgrade Check and print of available - packages for upgrade. + -c, [repository] --upgrade, --skip=[] Check the install upgraded packages + from repositories. -s, [repository] [package...] Sync packages. Install packages directly from remote repositories with all dependencies. diff --git a/slpkg/binary/check.py b/slpkg/binary/check.py index 568e6f87..67558abc 100644 --- a/slpkg/binary/check.py +++ b/slpkg/binary/check.py @@ -22,6 +22,8 @@ # along with this program. If not, see . +import sys + from slpkg.messages import Msg from slpkg.toolbar import status from slpkg.blacklist import BlackList @@ -34,36 +36,42 @@ from repo_init import RepoInit from greps import repo_data -def pkg_upgrade(repo): +def pkg_upgrade(repo, skip): ''' Checking packages for upgrade ''' - Msg().checking() - PACKAGES_TXT = RepoInit(repo).fetch()[0] - pkgs_for_upgrade = [] - # name = data[0] - # location = data[1] - # size = data[2] - # unsize = data[3] - data = repo_data(PACKAGES_TXT, 2000, repo) - index, toolbar_width = 0, 1000 - for pkg in installed(): - index += 1 - toolbar_width = status(index, toolbar_width, 30) - inst_pkg = split_package(pkg) - for name in data[0]: - if name: # this tips because some pkg_name is empty - repo_pkg = split_package(name[:-4]) - if (((repo_pkg[0] == inst_pkg[0] and repo_pkg[1] > inst_pkg[1] and - repo_pkg[3] == inst_pkg[3]) or - (repo_pkg[0] == inst_pkg[0] and - repo_pkg[1] == inst_pkg[1] and - repo_pkg[3] > inst_pkg[3])) and - inst_pkg[0] not in BlackList().packages()): - pkgs_for_upgrade.append('{0}-{1}'.format(repo_pkg[0], - repo_pkg[1])) - Msg().done() - return pkgs_for_upgrade + try: + Msg().checking() + PACKAGES_TXT = RepoInit(repo).fetch()[0] + pkgs_for_upgrade = [] + # name = data[0] + # location = data[1] + # size = data[2] + # unsize = data[3] + data = repo_data(PACKAGES_TXT, 2000, repo) + index, toolbar_width = 0, 1000 + for pkg in installed(): + index += 1 + toolbar_width = status(index, toolbar_width, 30) + inst_pkg = split_package(pkg) + for name in data[0]: + if name: # this tips because some pkg_name is empty + repo_pkg = split_package(name[:-4]) + if (((repo_pkg[0] == inst_pkg[0] and + repo_pkg[1] > inst_pkg[1] and + repo_pkg[3] == inst_pkg[3]) or + (repo_pkg[0] == inst_pkg[0] and + repo_pkg[1] == inst_pkg[1] and + repo_pkg[3] > inst_pkg[3])) and + inst_pkg[0] not in BlackList().packages() and + inst_pkg[0] not in skip): + pkgs_for_upgrade.append('{0}-{1}'.format(repo_pkg[0], + repo_pkg[1])) + Msg().done() + return pkgs_for_upgrade + except KeyboardInterrupt: + print("") # new line at exit + sys.exit(0) def installed(): diff --git a/slpkg/main.py b/slpkg/main.py index b60c2c40..fa075278 100644 --- a/slpkg/main.py +++ b/slpkg/main.py @@ -180,16 +180,22 @@ class ArgParse(object): def pkg_upgrade(self): """ check and upgrade packages by repository """ + skip = '' + if (len(self.args) == 4 and self.args[0] == '-c' and + self.args[2] == '--upgrade' and + self.args[3].startswith('--skip=')): + skip = ''.join(self.args[3].split("=")[1:]).split(',') + self.args.pop(3) if (len(self.args) == 3 and self.args[0] == '-c' and self.args[2] == '--upgrade'): if (self.args[1] in _m.repositories and self.args[1] not in ['slack', 'sbo']): - BinaryInstall(pkg_upgrade(self.args[1]), + BinaryInstall(pkg_upgrade(self.args[1], skip), self.args[1]).start(True) elif self.args[1] == 'slack': - Patches().start() + Patches(skip).start() elif self.args[1] == 'sbo': - SBoInstall(sbo_upgrade()).start(True) + SBoInstall(sbo_upgrade(skip)).start(True) else: usage(self.args[1]) else: diff --git a/slpkg/sbo/check.py b/slpkg/sbo/check.py index 763a3cfe..82430670 100644 --- a/slpkg/sbo/check.py +++ b/slpkg/sbo/check.py @@ -34,7 +34,7 @@ from greps import SBoGrep from search import sbo_search_pkg -def sbo_upgrade(): +def sbo_upgrade(skip): ''' Return packages for upgrade ''' @@ -47,7 +47,7 @@ def sbo_upgrade(): toolbar_width = status(index, toolbar_width, 4) name = split_package(pkg)[0] ver = split_package(pkg)[1] - if sbo_search_pkg(name): + if sbo_search_pkg(name) and name not in skip: sbo_package = ("{0}-{1}".format(name, SBoGrep(name).version())) package = ("{0}-{1}".format(name, ver)) if sbo_package > package: diff --git a/slpkg/slack/patches.py b/slpkg/slack/patches.py index 0cdf75cc..1045d36d 100644 --- a/slpkg/slack/patches.py +++ b/slpkg/slack/patches.py @@ -50,7 +50,8 @@ from slack_version import slack_ver class Patches(object): - def __init__(self): + def __init__(self, skip): + self.skip = skip self.version = _m.slack_rel self.patch_path = _m.slpkg_tmp_patches self.pkg_for_upgrade = [] @@ -135,7 +136,8 @@ class Patches(object): for name, loc, comp, uncomp in zip(data[0], data[1], data[2], data[3]): repo_pkg_name = split_package(name)[0] if (not os.path.isfile(_m.pkg_path + name[:-4]) and - repo_pkg_name not in black): + repo_pkg_name not in black and + repo_pkg_name not in self.skip): self.dwn_links.append("{0}{1}/{2}".format(mirrors("", ""), loc, name)) self.comp_sum.append(comp)