str_list_push: remove unused function
[oweals/opkg-lede.git] / tests / libopkg_test.c
index ac6173829e3920f53dbecd1cacf57a06c683ef93..16ed2cc3694ab8ab502b4513abeb307955ac8a03 100644 (file)
-#include <opkg.h>
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h>
 
-void
-progress_callback (opkg_t *opkg, int percent, void *data)
-{
-  printf ("\r%s %3d%%", (char*) data, percent);
-  fflush (stdout);
-}
-
-void
-package_list_callback (opkg_t *opkg, opkg_package_t *pkg, void *data)
-{
-  static install_count = 0;
-  static total_count = 0;
-
-  if (pkg->installed)
-    install_count++;
+#include <opkg.h>
 
-  total_count++;
+int opkg_state_changed;
+pkg_t *find_pkg = NULL;
 
-  printf ("\rPackage count: %d Installed, %d Total Available", install_count, total_count);
-  fflush (stdout);
+#define TEST_PACKAGE "aspell"
 
-  opkg_package_free (pkg);
+static void progress_callback(const opkg_progress_data_t * progress, void *data)
+{
+       printf("\r%s %3d%%\n", (char *)data, progress->percentage);
+       fflush(stdout);
 }
 
-int
-main (int argc, char **argv)
+static void list_pkg(pkg_t * pkg)
 {
-  opkg_t *opkg;
-  int err;
-  
-  opkg = opkg_new ();
+       char *v = pkg_version_str_alloc(pkg);
+       printf("%s - %s\n", pkg->name, v);
+       free(v);
+}
 
-  opkg_set_option (opkg, "offline_root", "/tmp/");
+static void package_list_installed_callback(pkg_t * pkg, void *data)
+{
+       if (pkg->state_status == SS_INSTALLED)
+               list_pkg(pkg);
+}
 
-  opkg_read_config_files (opkg);
+static void package_list_callback(pkg_t * pkg, void *data)
+{
+       static int install_count = 0;
+       static int total_count = 0;
 
-  err = opkg_update_package_lists (opkg, progress_callback, "Updating...");
-  printf ("\nopkg_update_package_lists returned %d\n", err);
+       if (pkg->state_status == SS_INSTALLED)
+               install_count++;
 
-  err = opkg_install_package (opkg, "aspell", progress_callback, "Installing...");
-  printf ("\nopkg_install_package returned %d\n", err);
+       total_count++;
 
-  err = opkg_upgrade_package (opkg, "aspell", progress_callback, "Upgrading...");
-  printf ("\nopkg_upgrade_package returned %d\n", err);
+       printf("\rPackage count: %d Installed, %d Total Available",
+              install_count, total_count);
+       fflush(stdout);
 
-  err = opkg_upgrade_all (opkg, progress_callback, "Upgrading all...");
-  printf ("\nopkg_upgrade_package returned %d\n", err);
+       if (!find_pkg) {
+               /* store the first package to print out later */
+               find_pkg = pkg;
+       }
+}
 
-  err = opkg_remove_package (opkg, "aspell", progress_callback, "Removing...");
-  printf ("\nopkg_remove_package returned %d\n", err);
+static void package_list_upgradable_callback(pkg_t * pkg, void *data)
+{
+       list_pkg(pkg);
+}
 
-  opkg_list_packages (opkg, package_list_callback, NULL);
-  printf ("\n");
+static void print_package(pkg_t * pkg)
+{
+       char *v = pkg_version_str_alloc(pkg);
+       const char *tags = pkg_get_string(pkg, PKG_TAGS);
+
+       printf("Name:         %s\n"
+              "Version:      %s\n"
+              "Repository:   %s\n"
+              "Architecture: %s\n"
+              "Description:  %s\n"
+              "Tags:         %s\n"
+              "Size:         %lu\n"
+              "Status:       %d\n",
+              pkg->name,
+              v,
+              pkg->src->name,
+              pkg_get_architecture(pkg),
+              pkg_get_string(pkg, PKG_DESCRIPTION),
+              tags ? tags : "",
+              (unsigned long) pkg_get_int(pkg, PKG_SIZE), pkg->state_status);
+       free(v);
+}
 
-  opkg_free (opkg);
+int main(int argc, char **argv)
+{
+       pkg_t *pkg;
+       int err;
+
+       if (argc < 2) {
+               printf("Usage: %s command\n"
+                      "\nCommands:\n"
+                      "\tupdate - Update package lists\n"
+                      "\tfind [package] - Print details of the specified package\n"
+                      "\tinstall [package] - Install the specified package\n"
+                      "\tupgrade [package] - Upgrade the specified package\n"
+                      "\tlist upgrades - List the available upgrades\n"
+                      "\tlist all - List all available packages\n"
+                      "\tlist installed - List all the installed packages\n"
+                      "\tremove [package] - Remove the specified package\n"
+                      "\trping - Reposiroties ping, check the accessibility of repositories\n"
+                      "\ttest - Run test script\n", basename(argv[0]));
+               exit(0);
+       }
+
+       setenv("OFFLINE_ROOT", "/tmp", 0);
+
+       if (opkg_new()) {
+               printf("opkg_new() failed. This sucks.\n");
+               print_error_list();
+               return 1;
+       }
+
+       switch (argv[1][0]) {
+       case 'f':
+               pkg = opkg_find_package(argv[2], NULL, NULL, NULL);
+               if (pkg) {
+                       print_package(pkg);
+               } else
+                       printf("Package \"%s\" not found!\n", find_pkg->name);
+               break;
+       case 'i':
+               err =
+                   opkg_install_package(argv[2], progress_callback,
+                                        "Installing...");
+               printf("\nopkg_install_package returned %d\n", err);
+               break;
+
+       case 'u':
+               if (argv[1][2] == 'd') {
+                       err =
+                           opkg_update_package_lists(progress_callback,
+                                                     "Updating...");
+                       printf("\nopkg_update_package_lists returned %d\n",
+                              err);
+                       break;
+               } else {
+                       if (argc < 3) {
+                               err =
+                                   opkg_upgrade_all(progress_callback,
+                                                    "Upgrading all...");
+                               printf("\nopkg_upgrade_all returned %d\n", err);
+                       } else {
+                               err =
+                                   opkg_upgrade_package(argv[2],
+                                                        progress_callback,
+                                                        "Upgrading...");
+                               printf("\nopkg_upgrade_package returned %d\n",
+                                      err);
+                       }
+               }
+               break;
+
+       case 'l':
+               if (argc < 3) {
+                       printf
+                           ("Please specify one either all, installed or upgrades\n");
+               } else {
+                       switch (argv[2][0]) {
+                       case 'u':
+                               printf("Listing upgradable packages...\n");
+                               opkg_list_upgradable_packages
+                                   (package_list_upgradable_callback, NULL);
+                               break;
+                       case 'a':
+                               printf("Listing all packages...\n");
+                               opkg_list_packages(package_list_callback, NULL);
+                               printf("\n");
+                               break;
+                       case 'i':
+                               printf("Listing installed packages...\n");
+                               opkg_list_packages
+                                   (package_list_installed_callback, NULL);
+                               break;
+                       default:
+                               printf("Unknown list option \"%s\"\n", argv[2]);
+                       }
+               }
+               break;
+
+       case 'r':
+               if (argv[1][1] == 'e') {
+                       err =
+                           opkg_remove_package(argv[2], progress_callback,
+                                               "Removing...");
+                       printf("\nopkg_remove_package returned %d\n", err);
+                       break;
+               } else if (argv[1][1] == 'p') {
+                       err = opkg_repository_accessibility_check();
+                       printf
+                           ("\nopkg_repository_accessibility_check returned (%d)\n",
+                            err);
+                       break;
+               }
+
+       default:
+               printf("Unknown command \"%s\"\n", argv[1]);
+       }
+
+       opkg_free();
+
+       return 0;
 }