slpkg/bin/slpkg.py
2014-05-12 09:14:36 +03:00

120 lines
4.3 KiB
Python
Executable file

#!/usr/bin/python env python
# -*- coding: utf-8 -*-
import os
import sys
import argparse
import subprocess
from config import __version__
''' path file record '''
__packages__ = "/var/log/packages/"
''' this fuction return the path of the package '''
def find_package(find_pkg):
find_pkg = subprocess.check_output(["find " + __packages__ + " -name '{}*' 2> /dev/null".format(find_pkg)],shell=True)
return find_pkg
''' main function '''
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", "--slackbuild", help="auto build package",
type=str, nargs=2, metavar=('script','source'))
parser.add_argument("-l", "--list", help="list of installed packages",
nargs="+", choices="all sbo".split(), metavar=('all, sbo'))
parser.add_argument("-i", "--install", help="install binary package",
type=str, metavar=(''))
parser.add_argument("-u", "--upgrade", help="install-upgrade package with new",
type=str, metavar=(''))
parser.add_argument("-a", "--reinstall", help="reinstall the same package",
type=str, metavar=(''))
parser.add_argument("-r", "--remove", help="remove package",
type=str, metavar=(''))
parser.add_argument("-f", "--find", help="find if package installed",
type=str, metavar=(''))
parser.add_argument("-d", "--display", help="display the contents of the package",
type=str, metavar=(''))
args = parser.parse_args()
''' print version and exit'''
if args.verbose:
print ("Version: {}".format(__version__))
''' auto build package from slackbuild script '''
if args.slackbuild:
slack_script = args.slackbuild[0]
source_tar = args.slackbuild[1]
''' remove file type from slackbuild script and store the name '''
pkg_name = slack_script.replace(".tar.gz", "")
if pkg_name != slack_script:
pass
else:
pkg_name = slack_script.replace(".tar.bz2", "")
path = subprocess.check_output(["pwd"], shell=True).replace("\n", "/")
os.system("tar xvf {}{}".format(path, slack_script))
os.system("cp {} {}".format(source_tar, pkg_name))
os.chdir(path + pkg_name)
os.system("sh {}{}{}".format(path, pkg_name + "/", pkg_name + ".SlackBuild"))
''' view list of installed packages '''
if args.list:
if "all" in args.list:
os.system("ls " + __packages__ + "* | more")
if "sbo" in args.list:
os.system("ls " + __packages__ + "* | grep 'SBo' | more")
''' install binary package '''
if args.install:
os.system("installpkg {}".format(args.install))
''' upgrade package with new '''
if args.upgrade:
os.system("upgradepkg --install-new {}".format(args.upgrade))
''' upgrade package with the same '''
if args.reinstall:
os.system("upgradepkg --reinstall {}".format(args.reinstall))
''' uninstall package '''
if args.remove:
if find_package(args.remove) == "":
os.system("echo -e '\e[31mThe package is not found\e[39m'")
else:
os.system("echo -e '\e[93m!!! WARNING !!!\e[39m'")
remove_pkg = raw_input("Are you sure to remove this package [y/n] ")
if remove_pkg == "y" or remove_pkg == "Y":
os.system("removepkg {}".format(args.remove))
''' find if package installed on your system '''
if args.find:
if find_package(args.find) == "":
os.system("echo -e '\e[31mThe package is not installed on your system\e[39m'")
else:
os.system("echo -e '\e[32mThe package is installed on your system\e[39m'")
''' print the package contents '''
if args.display:
if find_package(args.display) == "":
os.system("echo -e '\e[31mThe package is not found\e[39m'")
else:
os.system("cat {}".format(find_package(args.display)))
''' fix null arguments '''
if not any([args.verbose, args.slackbuild, args.install, args.upgrade, args.reinstall,
args.remove, args.list, args.find, args.display]):
os.system("slpkg -h")
if __name__ == "__main__":
main()