summaryrefslogtreecommitdiff
path: root/src/backend/search.py
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2024-01-20 22:52:36 +0000
committerV3n3RiX <venerix@koprulu.sector>2024-01-20 22:52:36 +0000
commit5cf564d3b5109c2a9e4b5917eb7d834f8b911d3b (patch)
tree1a237d98fdd45a123b1175c35bf068ec6c42ed54 /src/backend/search.py
parenta513187d4842758e63fda6abd90c86d4f9d19928 (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.py185
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))