diff --git a/bin/is b/bin/is index e87d83c3564caebe84c8c390953b6299c5862a89..50c2651f796036eab3a0b040cb16ef1f16f7c4f6 100755 --- a/bin/is +++ b/bin/is @@ -221,7 +221,10 @@ def c_search(parser, args): ''' Search in repository ''' - raise NotImplementedError("Not yet implemented") + repoman = load_repositories(args) + for repo in repoman: + arrow(repo.config.name) + repo.search(args.pattern) def c_get(parser, args): ''' @@ -351,6 +354,7 @@ p_cat.set_defaults(func=c_cat) # search command parser p_search = subparsers.add_parser("search", help=c_search.__doc__.lower()) +p_search.add_argument("pattern", help="search pattern in repository") p_search.set_defaults(func=c_search) # get command parser diff --git a/installsystems/repository.py b/installsystems/repository.py index 84ca421506c007107d34c32a4f9a25c5ee13a485..5579fdbe0924a852a1940af67b9527a34ca38bf4 100644 --- a/installsystems/repository.py +++ b/installsystems/repository.py @@ -202,6 +202,22 @@ class Repository(object): out(' #yellow#MD5:#reset# %s' % payload_md5) out() + def search(self, pattern): + ''' + Search pattern in a repository + ''' + images = self.db.ask("SELECT name, version, author, description\ + FROM image\ + WHERE name LIKE ? OR\ + description LIKE ? OR\ + author LIKE ?", + tuple( ["%%%s%%" % pattern ] * 3) + ).fetchall() + for name, version, author, description in images: + arrow("%s v%s" % (name, version), 1) + out(" #yellow#Author:#reset# %s" % author) + out(" #yellow#Description:#reset# %s" % description) + def _remove_file(self, filename): ''' Remove a filename from pool. Check if it's not needed by db before