summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/dbsearch.py20
-rw-r--r--src/frontend/cli/README.md71
-rwxr-xr-xsrc/frontend/cli/sisyphus-cli.py39
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')