cli: implement --lists-dir
[oweals/opkg-lede.git] / src / opkg-cl.c
index ebaa3d063e9d851c788ff317adfa2835ffa1cfff..d70ad50d9e3b41e5d9fe0298a3fdf6b09bae2135 100644 (file)
@@ -28,6 +28,7 @@
 #include "opkg_cmd.h"
 #include "file_util.h"
 #include "opkg_message.h"
+#include "opkg_download.h"
 #include "../libbb/libbb.h"
 
 enum {
@@ -40,13 +41,17 @@ enum {
        ARGS_OPT_FORCE_REMOVAL_OF_ESSENTIAL_PACKAGES,
        ARGS_OPT_FORCE_SPACE,
        ARGS_OPT_FORCE_POSTINSTALL,
+       ARGS_OPT_FORCE_REMOVE,
+       ARGS_OPT_FORCE_CHECKSUM,
        ARGS_OPT_ADD_ARCH,
        ARGS_OPT_ADD_DEST,
        ARGS_OPT_NOACTION,
        ARGS_OPT_DOWNLOAD_ONLY,
        ARGS_OPT_NODEPS,
+       ARGS_OPT_NOCASE,
        ARGS_OPT_AUTOREMOVE,
        ARGS_OPT_CACHE,
+       ARGS_OPT_FORCE_SIGNATURE,
 };
 
 static struct option long_options[] = {
@@ -79,9 +84,16 @@ static struct option long_options[] = {
                ARGS_OPT_FORCE_REMOVAL_OF_ESSENTIAL_PACKAGES},
        {"force-postinstall", 0, 0, ARGS_OPT_FORCE_POSTINSTALL},
        {"force_postinstall", 0, 0, ARGS_OPT_FORCE_POSTINSTALL},
+       {"force-remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
+       {"force_remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
+       {"force-checksum", 0, 0, ARGS_OPT_FORCE_CHECKSUM},
+       {"force_checksum", 0, 0, ARGS_OPT_FORCE_CHECKSUM},
+       {"force-signature", 0, 0, ARGS_OPT_FORCE_SIGNATURE},
+       {"force_signature", 0, 0, ARGS_OPT_FORCE_SIGNATURE},
        {"noaction", 0, 0, ARGS_OPT_NOACTION},
        {"download-only", 0, 0, ARGS_OPT_DOWNLOAD_ONLY},
        {"nodeps", 0, 0, ARGS_OPT_NODEPS},
+       {"nocase", 0, 0, ARGS_OPT_NOCASE},
        {"offline", 1, 0, 'o'},
        {"offline-root", 1, 0, 'o'},
        {"add-arch", 1, 0, ARGS_OPT_ADD_ARCH},
@@ -89,6 +101,8 @@ static struct option long_options[] = {
        {"test", 0, 0, ARGS_OPT_NOACTION},
        {"tmp-dir", 1, 0, 't'},
        {"tmp_dir", 1, 0, 't'},
+       {"lists-dir", 1, 0, 'l'},
+       {"lists_dir", 1, 0, 'l'},
        {"verbosity", 2, 0, 'V'},
        {"version", 0, 0, 'v'},
        {0, 0, 0, 0}
@@ -103,7 +117,7 @@ args_parse(int argc, char *argv[])
        char *tuple, *targ;
 
        while (1) {
-               c = getopt_long_only(argc, argv, "Ad:f:no:p:t:vV::",
+               c = getopt_long_only(argc, argv, "Ad:f:ino:p:l:t:vV::",
                                long_options, &option_index);
                if (c == -1)
                        break;
@@ -118,12 +132,18 @@ args_parse(int argc, char *argv[])
                case 'f':
                        conf->conf_file = xstrdup(optarg);
                        break;
+               case 'i':
+                       conf->nocase = FNM_CASEFOLD;
+                       break;
                case 'o':
                        conf->offline_root = xstrdup(optarg);
                        break;
                case 't':
                        conf->tmp_dir = xstrdup(optarg);
                        break;
+               case 'l':
+                       conf->lists_dir = xstrdup(optarg);
+                       break;
                case 'v':
                        printf("opkg version %s\n", VERSION);
                        exit(0);
@@ -166,9 +186,18 @@ args_parse(int argc, char *argv[])
                case ARGS_OPT_FORCE_POSTINSTALL:
                        conf->force_postinstall = 1;
                        break;
+               case ARGS_OPT_FORCE_REMOVE:
+                       conf->force_remove = 1;
+                       break;
+               case ARGS_OPT_FORCE_CHECKSUM:
+                       conf->force_checksum = 1;
+                       break;
                case ARGS_OPT_NODEPS:
                        conf->nodeps = 1;
                        break;
+               case ARGS_OPT_NOCASE:
+                       conf->nocase = FNM_CASEFOLD;
+                       break;
                case ARGS_OPT_ADD_ARCH:
                case ARGS_OPT_ADD_DEST:
                        tuple = xstrdup(optarg);
@@ -189,6 +218,9 @@ args_parse(int argc, char *argv[])
         case ARGS_OPT_DOWNLOAD_ONLY:
                        conf->download_only = 1;
                        break;
+               case ARGS_OPT_FORCE_SIGNATURE:
+                       conf->force_signature = 1;
+                       break;
                case ':':
                        parse_err = -1;
                        break;
@@ -200,6 +232,9 @@ args_parse(int argc, char *argv[])
                }
        }
 
+       if(!conf->conf_file && !conf->offline_root)
+               conf->conf_file = xstrdup("/etc/opkg.conf");
+
        if (parse_err)
                return parse_err;
        else
@@ -214,7 +249,7 @@ usage()
 
        printf("\nPackage Manipulation:\n");
        printf("\tupdate                        Update list of available packages\n");
-       printf("\tupgrade                       Upgrade installed packages\n");
+       printf("\tupgrade <pkgs>                Upgrade packages\n");
        printf("\tinstall <pkgs>                Install package(s)\n");
        printf("\tconfigure <pkgs>      Configure unpacked package(s)\n");
        printf("\tremove <pkgs|regexp>  Remove package(s)\n");
@@ -225,16 +260,21 @@ usage()
        printf("\tlist                  List available packages\n");
        printf("\tlist-installed                List installed packages\n");
        printf("\tlist-upgradable               List installed and upgradable packages\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("\tcompare-versions <v1> <op> <v2>\n");
        printf("\t                    compare versions using <= < > >= = << >>\n");
        printf("\tprint-architecture    List installable package architectures\n");
+       printf("\tdepends [-A] [pkgname|pat]+\n");
        printf("\twhatdepends [-A] [pkgname|pat]+\n");
        printf("\twhatdependsrec [-A] [pkgname|pat]+\n");
+       printf("\twhatrecommends[-A] [pkgname|pat]+\n");
+       printf("\twhatsuggests[-A] [pkgname|pat]+\n");
        printf("\twhatprovides [-A] [pkgname|pat]+\n");
        printf("\twhatconflicts [-A] [pkgname|pat]+\n");
        printf("\twhatreplaces [-A] [pkgname|pat]+\n");
@@ -269,15 +309,20 @@ usage()
        printf("\t--force-downgrade     Allow opkg to downgrade packages\n");
        printf("\t--force-space         Disable free space checks\n");
        printf("\t--force-postinstall   Run postinstall scripts even in offline mode\n");
+       printf("\t--force-remove        Remove package even if prerm script fails\n");
+       printf("\t--force-checksum      Don't fail on checksum mismatches\n");
        printf("\t--noaction            No action -- test only\n");
        printf("\t--download-only       No action -- download only\n");
        printf("\t--nodeps              Do not follow dependencies\n");
+       printf("\t--nocase              Perform case insensitive pattern matching\n");
        printf("\t--force-removal-of-dependent-packages\n");
        printf("\t                      Remove package and all dependencies\n");
        printf("\t--autoremove          Remove packages that were installed\n");
        printf("\t                      automatically to satisfy dependencies\n");
        printf("\t-t                    Specify tmp-dir.\n");
        printf("\t--tmp-dir             Specify tmp-dir.\n");
+       printf("\t-l                    Specify lists-dir.\n");
+       printf("\t--lists-dir           Specify lists-dir.\n");
 
        printf("\n");
 
@@ -328,6 +373,8 @@ main(int argc, char *argv[])
            !strcmp(cmd_name,"compare-versions") ||
            !strcmp(cmd_name,"list_installed") ||
            !strcmp(cmd_name,"list-installed") ||
+           !strcmp(cmd_name,"list_changed_conffiles") ||
+           !strcmp(cmd_name,"list-changed-conffiles") ||
            !strcmp(cmd_name,"status") )
                noreadfeedsfile = 1;