diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-01-20 22:52:36 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-01-20 22:52:36 +0000 |
commit | 5cf564d3b5109c2a9e4b5917eb7d834f8b911d3b (patch) | |
tree | 1a237d98fdd45a123b1175c35bf068ec6c42ed54 /src/backend/search.py | |
parent | a513187d4842758e63fda6abd90c86d4f9d19928 (diff) |
don't silently fail while attempting to uninstall a package with reverse dependenciesv6.2401.0
Diffstat (limited to 'src/backend/search.py')
-rw-r--r-- | src/backend/search.py | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/src/backend/search.py b/src/backend/search.py deleted file mode 100644 index 22bd4ba..0000000 --- a/src/backend/search.py +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/python3 - -import signal -import sqlite3 -import subprocess -import sisyphus.checkenv -import sisyphus.getcolor -import sisyphus.getfs -import sisyphus.update - - -def sigint_handler(signal, frame): - sys.exit(0) - - -signal.signal(signal.SIGINT, sigint_handler) - - -def srch_db(filter, cat='', pn='', desc=''): - NOVIRT = "AND cat NOT LIKE 'virtual'" - SELECTS = { - 'all': f'''SELECT - i.category AS cat, - i.name as pn, - i.version as iv, - IFNULL(a.version, 'alien') AS av, - d.description AS desc - FROM local_packages AS i LEFT OUTER JOIN remote_packages as a - ON i.category = a.category - AND i.name = a.name - AND i.slot = a.slot - LEFT JOIN remote_descriptions AS d ON i.name = d.name AND i.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT} - UNION - SELECT - a.category AS cat, - a.name as pn, - IFNULL(i.version, 'None') AS iv, - a.version as av, - d.description AS desc - FROM remote_packages AS a LEFT OUTER JOIN local_packages AS i - ON a.category = i.category - AND a.name = i.name - AND a.slot = i.slot - LEFT JOIN remote_descriptions AS d ON a.name = d.name AND a.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT}''', - 'installed': f'''SELECT - i.category AS cat, - i.name AS pn, - i.version AS iv, - a.version as av, - d.description AS desc - FROM local_packages AS i - LEFT JOIN remote_packages AS a - ON i.category = a.category - AND i.name = a.name - AND i.slot = a.slot - LEFT JOIN remote_descriptions AS d ON i.name = d.name AND i.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT}''', - 'alien': f'''SELECT - i.category AS cat, - i.name AS pn, - i.version as iv, - IFNULL(a.version, 'alien') AS av, - d.description AS desc - FROM local_packages AS i - LEFT JOIN remote_packages AS a - ON a.category = i.category - AND a.name = i.name - AND a.slot = i.slot - LEFT JOIN remote_descriptions AS d ON i.name = d.name AND i.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT} - AND av IS 'alien' ''', - 'available': f'''SELECT - a.category AS cat, - a.name AS pn, - i.version as iv, - a.version AS av, - d.description AS desc - FROM remote_packages AS a - LEFT JOIN local_packages AS i - ON a.category = i.category - AND a.name = i.name - AND a.slot = i.slot - LEFT JOIN remote_descriptions AS d ON a.name = d.name AND a.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT} - AND iv IS NULL''', - 'upgradable': f'''SELECT - i.category AS cat, - i.name AS pn, - i.version as iv, - a.version AS av, - d.description AS desc - FROM local_packages AS i - INNER JOIN remote_packages AS a - ON i.category = a.category - AND i.name = a.name - AND i.slot = a.slot - LEFT JOIN remote_descriptions AS d ON i.name = d.name AND i.category = d.category - WHERE cat LIKE '%{cat}%' AND pn LIKE '%{pn}%' AND desc LIKE '%{desc}%' {NOVIRT} - AND iv <> av''' - } - - with sqlite3.connect(sisyphus.getfs.lcl_db) as db: - db.row_factory = sqlite3.Row - cursor = db.cursor() - cursor.execute(SELECTS[filter]) - rows = cursor.fetchall() - - return rows - - -def tosql(string): - return '%%' if string == '' else string.replace('*', '%').replace('?', '_') - - -def srch_rslt(filter, cat, pn, desc, single): - print("\nSearching" + sisyphus.getcolor.bright_yellow + " " + - f"{filter}" + " " + sisyphus.getcolor.reset + "packages ..." + "\n") - pkglist = srch_db(filter, tosql(cat), tosql(pn), tosql(desc)) - - if len(pkglist) == 0: - print(sisyphus.getcolor.bright_red + - "No binary package found!\n" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.bright_yellow + "Use the" + sisyphus.getcolor.reset + " " + "'" + "--ebuild" + - "'" + " " + sisyphus.getcolor.bright_yellow + "option to search source packages" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.bright_yellow + "Use" + sisyphus.getcolor.reset + " " + "'" + - "sisyphus search --help" + "'" + " " + sisyphus.getcolor.bright_yellow + "for help" + sisyphus.getcolor.reset) - else: - if single: - print(sisyphus.getcolor.green + - f"{'Package category/name':45} {'Installed version':20} {'Latest available version':30} {'Description'}" + sisyphus.getcolor.reset) - for pkg in pkglist: - if not single: - print(sisyphus.getcolor.bright_green + "*" + " " + sisyphus.getcolor.reset + - sisyphus.getcolor.bright_white + f"{pkg['cat']}/{pkg['pn']}" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.green + "\tInstalled version:" + - " " + sisyphus.getcolor.reset + f"{pkg['iv']}") - if pkg['av'] != 'alien': - print(sisyphus.getcolor.green + "\tLatest available version:" + - " " + sisyphus.getcolor.reset + f"{pkg['av']}") - else: - print(sisyphus.getcolor.green + "\tAlien package:" + " " + sisyphus.getcolor.reset + - "Use `sisyphus search --ebuild" + " " + f"{pkg['pn']}`" + " " + "for available version!") - print(sisyphus.getcolor.green + "\tDescription:" + " " + - sisyphus.getcolor.reset + f"{pkg['desc']}" + "\n") - else: - cpn = f"{pkg['cat']}/{pkg['pn']}" - print(sisyphus.getcolor.bright_white + f"{cpn:45}" + " " + sisyphus.getcolor.reset + - f"{str(pkg['iv']):20}" + " " + f"{str(pkg['av']):30}" + " " + f"{str(pkg['desc'])}") - print("\nFound" + " " + sisyphus.getcolor.bright_yellow + - f"{len(pkglist)}" + " " + sisyphus.getcolor.reset + "matching package(s) ...") - - -def start(filter, cat, pn, desc, single): - if sisyphus.checkenv.root(): - print(sisyphus.getcolor.bright_red + - "\nSearching as root, database can be updated!\n" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.bright_yellow + - "Search results will be accurate\n" + sisyphus.getcolor.reset) - while True: - user_input = input(sisyphus.getcolor.bright_white + "Would you like to proceed?" + sisyphus.getcolor.reset + " " + - "[" + sisyphus.getcolor.bright_green + "Yes" + sisyphus.getcolor.reset + "/" + sisyphus.getcolor.bright_red + "No" + sisyphus.getcolor.reset + "]" + " ") - if user_input.lower() in ['yes', 'y', '']: - sisyphus.update.start(gfx_ui=False) - break - elif user_input.lower() in ['no', 'n']: - print(sisyphus.getcolor.bright_red + - "\nSkipping database update, displaying search results!\n" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.bright_yellow + - "Search results may be inaccurate" + sisyphus.getcolor.reset) - break - else: - continue - else: - print(sisyphus.getcolor.bright_red + - "\nSearching as user, database cannot be updated!\n" + sisyphus.getcolor.reset) - print(sisyphus.getcolor.bright_yellow + - "Search results may be inaccurate" + sisyphus.getcolor.reset) - - srch_rslt(filter, cat, pn, desc, single) - - -def estart(pkgname): - subprocess.call(['emerge', '--search', '--getbinpkg'] + list(pkgname)) |