cli: implement find command
authorJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:18:18 +0000 (10:18 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:18:18 +0000 (10:18 +0100)
Introduce a new opkg "find" command which matches both the name and the
description of packages.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
libopkg/opkg_cmd.c
src/opkg-cl.c

index b98b86fb1ec116ed4ebd49dc245650e8ae832912..1a8f8573a290de2f85452ebda53cd4d0e6671c94 100644 (file)
@@ -594,7 +594,7 @@ opkg_download_cmd(int argc, char **argv)
 
 
 static int
 
 
 static int
-opkg_list_cmd(int argc, char **argv)
+opkg_list_find_cmd(int argc, char **argv, int use_desc)
 {
      int i;
      pkg_vec_t *available;
 {
      int i;
      pkg_vec_t *available;
@@ -610,7 +610,8 @@ opkg_list_cmd(int argc, char **argv)
      for (i=0; i < available->len; i++) {
          pkg = available->pkgs[i];
          /* if we have package name or pattern and pkg does not match, then skip it */
      for (i=0; i < available->len; i++) {
          pkg = available->pkgs[i];
          /* if we have package name or pattern and pkg does not match, then skip it */
-         if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase))
+         if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase) &&
+             (!use_desc || !pkg->description || fnmatch(pkg_name, pkg->description, conf->nocase)))
               continue;
           print_pkg(pkg);
      }
               continue;
           print_pkg(pkg);
      }
@@ -619,6 +620,18 @@ opkg_list_cmd(int argc, char **argv)
      return 0;
 }
 
      return 0;
 }
 
+static int
+opkg_list_cmd(int argc, char **argv)
+{
+       return opkg_list_find_cmd(argc, argv, 0);
+}
+
+static int
+opkg_find_cmd(int argc, char **argv)
+{
+       return opkg_list_find_cmd(argc, argv, 1);
+}
+
 
 static int
 opkg_list_installed_cmd(int argc, char **argv)
 
 static int
 opkg_list_installed_cmd(int argc, char **argv)
@@ -1262,6 +1275,7 @@ static opkg_cmd_t cmds[] = {
      {"configure", 0, (opkg_cmd_fun_t)opkg_configure_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"files", 1, (opkg_cmd_fun_t)opkg_files_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"search", 1, (opkg_cmd_fun_t)opkg_search_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"configure", 0, (opkg_cmd_fun_t)opkg_configure_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"files", 1, (opkg_cmd_fun_t)opkg_files_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"search", 1, (opkg_cmd_fun_t)opkg_search_cmd, PFM_DESCRIPTION|PFM_SOURCE},
+     {"find", 1, (opkg_cmd_fun_t)opkg_find_cmd, PFM_SOURCE},
      {"download", 1, (opkg_cmd_fun_t)opkg_download_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"compare_versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"compare-versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"download", 1, (opkg_cmd_fun_t)opkg_download_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"compare_versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"compare-versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE},
index 1e7642f7024e913dbcf305e107812eb05430630a..5f66d28f7332c302232c5988b456695b7a36ba14 100644 (file)
@@ -246,6 +246,7 @@ usage()
        printf("\tlist-changed-conffiles        List user modified configuration files\n");
        printf("\tfiles <pkg>           List files belonging to <pkg>\n");
        printf("\tsearch <file|regexp>  List package providing <file>\n");
        printf("\tlist-changed-conffiles        List user modified configuration files\n");
        printf("\tfiles <pkg>           List files belonging to <pkg>\n");
        printf("\tsearch <file|regexp>  List package providing <file>\n");
+       printf("\tfind <regexp>         List packages whose name or description matches <regexp>\n");
        printf("\tinfo [pkg|regexp]     Display all info for <pkg>\n");
        printf("\tstatus [pkg|regexp]   Display all status for <pkg>\n");
        printf("\tdownload <pkg>                Download <pkg> to current directory\n");
        printf("\tinfo [pkg|regexp]     Display all info for <pkg>\n");
        printf("\tstatus [pkg|regexp]   Display all status for <pkg>\n");
        printf("\tdownload <pkg>                Download <pkg> to current directory\n");