diff options
-rw-r--r-- | src/backend/dbsearch.py | 20 | ||||
-rw-r--r-- | src/frontend/cli/README.md | 71 | ||||
-rwxr-xr-x | src/frontend/cli/sisyphus-cli.py | 39 |
3 files changed, 71 insertions, 59 deletions
diff --git a/src/backend/dbsearch.py b/src/backend/dbsearch.py index d3b66b7..c82ee93 100644 --- a/src/backend/dbsearch.py +++ b/src/backend/dbsearch.py @@ -6,11 +6,11 @@ import sqlite3 def searchDB(filter, cat = '', pn = '', desc = ''): NOVIRT = "AND cat NOT LIKE 'virtual'" SELECTS = { - 'all': f'''SELECT + 'any': f'''SELECT i.category AS cat, i.name as pn, i.version as iv, - IFNULL(a.version, 'None') AS av, + 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 @@ -44,11 +44,11 @@ def searchDB(filter, cat = '', pn = '', desc = ''): 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}''', - 'local': f'''SELECT + 'alien': f'''SELECT i.category AS cat, i.name AS pn, i.version as iv, - a.version AS av, + IFNULL(a.version, 'alien') AS av, d.description AS desc FROM local_packages AS i LEFT JOIN remote_packages AS a @@ -57,7 +57,7 @@ def searchDB(filter, cat = '', pn = '', desc = ''): 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 NULL''', + AND av IS 'alien' ''', 'remote': f'''SELECT a.category AS cat, a.name AS pn, @@ -100,21 +100,27 @@ def tosql(string): return '%%' if string == '' else string.replace('*', '%').replace('?', '_') def showSearch(filter, cat, pn, desc, single = False): + sisyphus.update.start() print(f"Searching for {filter} packages ...\n") pkglist = searchDB(filter, tosql(cat), tosql(pn), tosql(desc)) if len(pkglist) == 0: print("No binary package found!") else: + if single: + print(f"{'Package':45} {'Installed':20} Available") for pkg in pkglist: if not single: print(f"* {pkg['cat']}/{pkg['pn']}") print(f"\tInstalled version: {pkg['iv']}") - print(f"\tLatest available version: {pkg['av']}") + if pkg['av'] != 'alien': + print(f"\tLatest available version: {pkg['av']}") + else: + print('\tAlien package') print(f"\tDescription: {pkg['desc']}\n") else: cpn = f"{pkg['cat']}/{pkg['pn']}" - print(f"{cpn:45} i:{str(pkg['iv']):20} a:{str(pkg['av'])}") + print(f"{cpn:45} {str(pkg['iv']):20} {str(pkg['av'])}") print(f"\nFound {len(pkglist)} binary package(s)") print("To search for source packages, use the '--ebuild' option.") diff --git a/src/frontend/cli/README.md b/src/frontend/cli/README.md index 54fc628..0ef8b69 100644 --- a/src/frontend/cli/README.md +++ b/src/frontend/cli/README.md @@ -60,9 +60,13 @@ The remote can be selected by using the --remote option. * Examples: - branch master --remote=gitlab # pull the branch 'master' from gitlab.com - branch next --remote=pagure # pull the branch 'next' from pagure.io +` branch master --remote=gitlab # pull the branch 'master' from gitlab.com +` + +` branch next --remote=pagure # pull the branch 'next' from pagure.io +` + !!! WARNING !!! @@ -72,17 +76,22 @@ Branch 'master' must be paired with the stable binary repository (odd numbers in * Examples: - sisyphus mirror set 1 +` sisyphus mirror set 1 +` - sisyphus mirror set 5 +` sisyphus mirror set 5 +` Branch 'next' must be paired with the testing binary repository (even numbers in 'sisyphus mirror list'). * Examples: - sisyphus mirror set 2 +` sisyphus mirror set 2 +` + +` sisyphus mirror set 8 +` - sisyphus mirror set 8 **Usage**: @@ -103,11 +112,11 @@ Use the --ebuild option to install ebuild(source) packages. * Examples: - sisyphus install pidgin +` sisyphus install pidgin` will install pidgin binary package (if available); if there is none, but the ebuild(source) package for pidgin is found, it will stop and suggest the --ebuild option. - sisyphus install pidgin --ebuild +` sisyphus install pidgin --ebuild` will compile pidgin from source @@ -218,35 +227,37 @@ In addition, search can be performed by package description, using the -d (--des (use single or double quotes when the description contains spaces) -Use the -s (--state) filters to select only packages of interest. Possible values: +Use the -f (--filter) option to select only packages of interest. Possible values: - all (default) - search the entire database + any (default) - search the entire database - installed - search in all installed packages - - local - search for installed packages but not available + alien - search for installed packages but not available (this filter can match packages installed from e-builds or packages no longer maintained as binaries) + installed - search in all installed packages + remote - search for available packages but not installed upgrade - search for installed packages where installed version is different from available version -!!! NOTE !!! bash will expand a single * character as current folder listing. -To search for all '--state' packages escape it, or surround it with quotes, or use an empty string: +!!! NOTE !!!: + +bash will expand a single * character as current folder listing. +To search for all matching '--filter' packages escape it, or surround it with quotes, or use an empty string: - sisyphus search * -s installed # this is not valid! + sisyphus search * -f installed # this is not valid! - sisyphus search \* -s local # OK + sisyphus search \* -f alien # OK - sisyphus search '*' -s remote # OK + sisyphus search '*' -f remote # OK - sisyphus search '' -s upgrade # OK + sisyphus search '' -f upgrade # OK To search for all (including source) packages, use the --ebuild option. This is slower since will perform an emerge --search actually. With this option, more than one package can be provided as search term. -'-d', '-s' and '-q' (quiet) options are ignored in this mode. +'-d', '-f' and '-q' (quiet) options are ignored in this mode. **Usage**: @@ -257,7 +268,7 @@ $ sisyphus search [OPTIONS] PACKAGE... **Options**: * `-d, --description TEXT`: Match description. -* `-s, --state [all|installed|local|remote|upgrade]`: [default: all] +* `-f, --filter [any|alien|installed|remote|upgrade]`: [default: any] * `-q`: Short (one line) output. * `-e, --ebuild`: Search in ebuilds (slower). * `--help`: Show this message and exit. @@ -301,12 +312,10 @@ This will not allways be possible, as the reverse dependency chain may be way to * Examples: - sisyphus uninstall firefox - -will succeed, nothing depends on it - - sisyphus uninstall pulseaudio +` sisyphus uninstall firefox` +will succeed, nothing depends on it +` sisyphus uninstall pulseaudio` will fail, many packages depend on it With --force option, packages are uninstalled *UNSAFELY* by ignoring reverse dependencies. @@ -316,12 +325,10 @@ Upgrading the system may pull the packages back in, to fix the reverse dependenc * Examples : - sisyphus uninstall pulseaudio --force - +` sisyphus uninstall pulseaudio --force` will succeed, but you may no longer have audio - sisyphus uninstall openrc --force - +` sisyphus uninstall openrc --force` will succeed, but the system will be broken **Usage**: @@ -358,11 +365,11 @@ Use the --ebuild option to upgrade **EVERYTHING**, binary and/or ebuild(source) * Examples: - sisyphus upgrade +` sisyphus upgrade` will upgrade the system using binary packages; if any ebuild(source) package upgrade is detected, it will stop and suggest the --ebuild option - sisyphus upgrade --ebuild +` sisyphus upgrade --ebuild` will upgrade the system using both binary and/or ebuild(source) packages diff --git a/src/frontend/cli/sisyphus-cli.py b/src/frontend/cli/sisyphus-cli.py index e5eb999..c5c6f25 100755 --- a/src/frontend/cli/sisyphus-cli.py +++ b/src/frontend/cli/sisyphus-cli.py @@ -20,20 +20,17 @@ def app_callback(ctx: typer.Context): """ ctx.info_name = 'sisyphus' -class State(str, Enum): - all = 'all' +class Filter(str, Enum): + any = 'any' + alien = 'alien' installed = 'installed' - local = 'local' remote = 'remote' upgrade = 'upgrade' -def state_completion(): - return ["all", "installed", "local", "remote", "upgrade"] - @app.command("search") def search(package: List[str] = typer.Argument(...), desc: str = typer.Option('', '--description', '-d', help = 'Match description.'), - state: State = typer.Option(State.all, '--state', '-s', show_default=True, autocompletion=state_completion), + filter: Filter = typer.Option(Filter.any, '--filter', '-f', show_default=True), quiet: bool = typer.Option(False, '-q', help='Short (one line) output.'), ebuild: bool = typer.Option(False, "--ebuild", "-e", help = 'Search in ebuilds (slower).')): """Search for binary and/or ebuild (source) packages. @@ -63,42 +60,44 @@ def search(package: List[str] = typer.Argument(...), (use single or double quotes when the description contains spaces) - Use the -s (--state) filters to select only packages of interest. Possible values: - - all (default) - search the entire database + Use the -f (--filter) option to select only packages of interest. Possible values: - installed - search in all installed packages + any (default) - search the entire database - local - search for installed packages but not available + alien - search for installed packages but not available (this filter can match packages installed from e-builds or packages no longer maintained as binaries) + installed - search in all installed packages + remote - search for available packages but not installed upgrade - search for installed packages where installed version is different from available version - !!! NOTE !!! bash will expand a single * character as current folder listing. - To search for all '--state' packages escape it, or surround it with quotes, or use an empty string: + !!! NOTE !!!: + + bash will expand a single * character as current folder listing. + To search for all matching '--filter' packages escape it, or surround it with quotes, or use an empty string: - sisyphus search * -s installed # this is not valid! + sisyphus search * -f installed # this is not valid! - sisyphus search \* -s local # OK + sisyphus search \* -f alien # OK - sisyphus search '*' -s remote # OK + sisyphus search '*' -f remote # OK - sisyphus search '' -s upgrade # OK + sisyphus search '' -f upgrade # OK To search for all (including source) packages, use the --ebuild option. This is slower since will perform an emerge --search actually. With this option, more than one package can be provided as search term. - '-d', '-s' and '-q' (quiet) options are ignored in this mode. + '-d', '-f' and '-q' (quiet) options are ignored in this mode. """ if not ebuild: if '/' in package[0]: cat, pn = package[0].split('/') else: cat, pn = '', package[0] - sisyphus.dbsearch.showSearch(state.value, cat, pn, desc, quiet) + sisyphus.dbsearch.showSearch(filter.value, cat, pn, desc, quiet) else: if not package: raise typer.Exit('No search term provided, try: sisyphus search --help') |