GNU bug report logs - #35485
[PATCH] guix package: Add 'guix search' alias.

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Mon, 29 Apr 2019 08:50:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35485 in the body.
You can then email your comments to 35485 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#35485; Package guix-patches. (Mon, 29 Apr 2019 08:50:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ludovic Courtès <ludo <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Mon, 29 Apr 2019 08:50:03 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH] guix package: Add 'guix search' alias.
Date: Mon, 29 Apr 2019 10:48:47 +0200
* guix/scripts/search.scm: New file.
* Makefile.am (MODULES): Add it.
* po/guix/POTFILES.in: Add it.
* tests/guix-package-aliases.sh: Add test.
* doc/guix.texi (Invoking guix package): Document it and use it in a
couple of examples.
---
This is a followup to <https://issues.guix.info/issue/35456>.

Given our tight schedule, I’ll apply it real soon if there are no
objections (apologies for not working on it before!).

Ludo’.

 Makefile.am                   |  1 +
 doc/guix.texi                 | 13 ++++---
 guix/scripts/search.scm       | 67 +++++++++++++++++++++++++++++++++++
 po/guix/POTFILES.in           |  1 +
 tests/guix-package-aliases.sh |  2 ++
 5 files changed, 79 insertions(+), 5 deletions(-)
 create mode 100644 guix/scripts/search.scm

diff --git a/Makefile.am b/Makefile.am
index 076f1c7a71..36f3bc5c27 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -227,6 +227,7 @@ MODULES =					\
   guix/scripts/install.scm			\
   guix/scripts/remove.scm			\
   guix/scripts/upgrade.scm			\
+  guix/scripts/search.scm			\
   guix/scripts/gc.scm				\
   guix/scripts/hash.scm				\
   guix/scripts/pack.scm				\
diff --git a/doc/guix.texi b/doc/guix.texi
index 6c3dc7d208..21a0321375 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2629,6 +2629,8 @@ For your convenience, we also provide the following aliases:
 
 @itemize
 @item
+@command{guix search} is an alias for @command{guix package -s},
+@item
 @command{guix install} is an alias for @command{guix package -i},
 @item
 @command{guix remove} is an alias for @command{guix package -r},
@@ -2952,12 +2954,13 @@ name: gmp
 @dots{}
 @end example
 
-It is also possible to refine search results using several @code{-s}
-flags.  For example, the following command returns a list of board
-games:
+It is also possible to refine search results using several @code{-s} flags to
+@command{guix package}, or several arguments to @command{guix search}.  For
+example, the following command returns a list of board games (this time using
+the @command{guix search} alias):
 
 @example
-$ guix package -s '\<board\>' -s game | recsel -p name
+$ guix search '\<board\>' game | recsel -p name
 name: gnubg
 @dots{}
 @end example
@@ -2972,7 +2975,7 @@ for cryptographic libraries, filters out Haskell, Perl, Python, and Ruby
 libraries, and prints the name and synopsis of the matching packages:
 
 @example
-$ guix package -s crypto -s library | \
+$ guix search crypto library | \
     recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
 @end example
 
diff --git a/guix/scripts/search.scm b/guix/scripts/search.scm
new file mode 100644
index 0000000000..8fceb83668
--- /dev/null
+++ b/guix/scripts/search.scm
@@ -0,0 +1,67 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Ludovic Courtès <ludo <at> gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix scripts search)
+  #:use-module (guix ui)
+  #:use-module (guix scripts package)
+  #:use-module (guix scripts)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-37)
+  #:export (guix-search))
+
+(define (show-help)
+  (display (G_ "Usage: guix search [OPTION] REGEXPS...
+Search for packages matching REGEXPS."))
+  (display (G_"
+This is an alias for 'guix package -s'.\n"))
+  (newline)
+  (display (G_ "
+  -h, --help             display this help and exit"))
+  (display (G_ "
+  -V, --version          display version information and exit"))
+  (newline)
+  (show-bug-report-information))
+
+(define %options
+  ;; Specification of the command-line options.
+  (list (option '(#\h "help") #f #f
+                (lambda args
+                  (show-help)
+                  (exit 0)))
+        (option '(#\V "version") #f #f
+                (lambda args
+                  (show-version-and-exit "guix search")))))
+
+(define (guix-search . args)
+  (define (handle-argument arg result)
+    ;; Treat all non-option arguments as regexps.
+    (cons `(query search ,(or arg ""))
+          result))
+
+  (define opts
+    (args-fold* args %options
+                (lambda (opt name arg . rest)
+                  (leave (G_ "~A: unrecognized option~%") name))
+                handle-argument
+                '()))
+
+  (unless (assoc-ref opts 'query)
+    (leave (G_ "missing arguments: no regular expressions to search for~%")))
+
+  (guix-package* opts))
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index 91de60efc7..ceee589b2e 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -44,6 +44,7 @@ guix/scripts/package.scm
 guix/scripts/install.scm
 guix/scripts/remove.scm
 guix/scripts/upgrade.scm
+guix/scripts/search.scm
 guix/scripts/gc.scm
 guix/scripts/hash.scm
 guix/scripts/import.scm
diff --git a/tests/guix-package-aliases.sh b/tests/guix-package-aliases.sh
index 64ed2fbb67..5c68664093 100644
--- a/tests/guix-package-aliases.sh
+++ b/tests/guix-package-aliases.sh
@@ -56,3 +56,5 @@ then false; else true; fi
 
 if guix remove -i guile-bootstrap -p "$profile" --bootstrap
 then false; else true; fi
+
+guix search '\<board\>' game | grep '^name: gnubg'
-- 
2.21.0





Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Mon, 29 Apr 2019 10:22:02 GMT) Full text and rfc822 format available.

Notification sent to Ludovic Courtès <ludo <at> gnu.org>:
bug acknowledged by developer. (Mon, 29 Apr 2019 10:22:02 GMT) Full text and rfc822 format available.

Message #10 received at 35485-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 35485-done <at> debbugs.gnu.org
Subject: Re: [bug#35485] [PATCH] guix package: Add 'guix search' alias.
Date: Mon, 29 Apr 2019 12:21:40 +0200
Pushed as da56f10971e0b6f32969b10e38ed043b2c99bb82.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 27 May 2019 11:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 330 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.