opkg: add downloading, configuring and installing state changes
authorticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Mon, 15 Dec 2008 04:21:21 +0000 (04:21 +0000)
committerticktock35 <ticktock35@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>
Mon, 15 Dec 2008 04:21:21 +0000 (04:21 +0000)
git-svn-id: http://opkg.googlecode.com/svn/trunk@27 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358

opkg_configure.c
opkg_download.c
opkg_install.c
opkg_state.c
opkg_state.h

index 16f83478971dcb5a4e9a73c5eba1a50f16d16acb..8309e40d6dbe67fcd138d0f1a0d2c529de83dfe7 100644 (file)
@@ -18,6 +18,7 @@
 #include "opkg.h"
 
 #include "opkg_configure.h"
+#include "opkg_state.h"
 
 int opkg_configure(opkg_conf_t *conf, pkg_t *pkg)
 {
@@ -28,6 +29,12 @@ int opkg_configure(opkg_conf_t *conf, pkg_t *pkg)
        end of opkg_install(). Do we care? */
     /* DPKG_INCOMPATIBILITY:
        dpkg actually includes a version number to this script call */
+
+    char *pkgid;
+    sprintf_alloc (&pkgid, "%s;%s;%s;", pkg->name, pkg->version, pkg->architecture);
+    opkg_set_current_state (OPKG_STATE_CONFIGURING_PKG, pkgid);
+    free (pkgid);
+
     err = pkg_run_script(conf, pkg, "postinst", "configure");
     if (err) {
        printf("ERROR: %s.postinst returned %d\n", pkg->name, err);
@@ -35,6 +42,7 @@ int opkg_configure(opkg_conf_t *conf, pkg_t *pkg)
     }
 
     opkg_state_changed++;
+    opkg_set_current_state (OPKG_STATE_NONE, NULL);
     return 0;
 }
 
index c3fa44cc209a38adc9c0a12ff8da812c636eb235..2bdbb00cae92537c75ca2a5df3ab96b4788c1160 100644 (file)
@@ -201,6 +201,7 @@ int opkg_download_pkg(opkg_conf_t *conf, pkg_t *pkg, const char *dir)
 {
     int err;
     char *url;
+    char *pkgid;
 
     if (pkg->src == NULL) {
        opkg_message(conf,OPKG_ERROR, "ERROR: Package %s (parent %s) is not available from any configured src.\n",
@@ -208,6 +209,10 @@ int opkg_download_pkg(opkg_conf_t *conf, pkg_t *pkg, const char *dir)
        return -1;
     }
 
+    sprintf_alloc (&pkgid, "%s;%s;%s;", pkg->name, pkg->version, pkg->architecture);
+    opkg_set_current_state (OPKG_STATE_DOWNLOADING_PKG, pkgid);
+    free (pkgid);
+
     sprintf_alloc(&url, "%s/%s", pkg->src->value, pkg->filename);
 
     /* XXX: BUG: The pkg->filename might be something like
@@ -219,6 +224,7 @@ int opkg_download_pkg(opkg_conf_t *conf, pkg_t *pkg, const char *dir)
     err = opkg_download(conf, url, pkg->local_filename);
     free(url);
 
+    opkg_set_current_state (OPKG_STATE_NONE, NULL);
     return err;
 }
 
index b278724a256e436122de3737b078172613984d22..599ae4d33fdeec0a492a56098d0efc72fa1d84ff 100644 (file)
@@ -34,6 +34,7 @@ typedef void (*sighandler_t)(int);
 
 #include "opkg_utils.h"
 #include "opkg_message.h"
+#include "opkg_state.h"
 
 #include "sprintf_alloc.h"
 #include "file_util.h"
@@ -751,6 +752,7 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade)
      abstract_pkg_t *ab_pkg = NULL;
      int old_state_flag;
      char* file_md5;
+     char *pkgid;
 
     
      if ( from_upgrade ) 
@@ -851,6 +853,10 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade)
      replacees = pkg_vec_alloc();
      pkg_get_installed_replacees(conf, pkg, replacees);
 
+     sprintf_alloc (&pkgid, "%s;%s;%s;", pkg->name, pkg->version, pkg->architecture);
+     opkg_set_current_state (OPKG_STATE_INSTALLING_PKG, pkgid);
+     free (pkgid);
+
      /* this next section we do with SIGINT blocked to prevent inconsistency between opkg database and filesystem */
      {
          sigset_t newset, oldset;
@@ -991,6 +997,7 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade)
 
          return err;
      }
+     opkg_set_current_state (OPKG_STATE_NONE, NULL);
 }
 
 static int prerm_upgrade_old_pkg(opkg_conf_t *conf, pkg_t *pkg, pkg_t *old_pkg)
index ded9683c6b9ac48c6b0d1f02e79f7fbfabc594e1..3dbd6c6b6a701066351258bc609d58097c364728 100644 (file)
 */
 
 #include "libopkg.h"
+#include "opkg_state.h"
+
+
+static char *state_strings[] =
+{
+  "None",
+  "Downloading Package",
+  "Installing Package",
+  "Configuring Package",
+  "Upgrading Package",
+  "Removing Package",
+  "Downloading Repository",
+  "Verifying Repository Signature"
+};
+
+
 
 opkg_state_changed_callback opkg_cb_state;
 
@@ -27,10 +43,19 @@ opkg_set_current_state (opkg_state_t state, const char *data)
 {
   if (opkg_state_data)
     free (opkg_state_data);
-  opkg_state_data = malloc (strlen (data));
-  strcpy (opkg_state_data, data);
+  if (data)
+  {
+    opkg_state_data = malloc (strlen (data));
+    strcpy (opkg_state_data, data);
+  }
+  else
+  {
+    opkg_state_data = NULL;
+  }
 
   opkg_state = state;
+
+  printf ("opkg state set to %s: %s\n", state_strings[state], data);
 }
 
 void
index fc376757f70c27c28e7bf787739f34e48749c5e7..36dd28e9557a1bbd14e86ffecc6558d2f09b86d0 100644 (file)
@@ -15,7 +15,8 @@
    General Public License for more details.
 */
 
-
+#ifndef OPKG_STATE_H
+#define OPKG_STATE_H
 
 typedef enum _opkg_state {
   OPKG_STATE_NONE,
@@ -25,6 +26,7 @@ typedef enum _opkg_state {
   OPKG_STATE_UPGRADING_PKG,
   OPKG_STATE_REMOVING_PKG,
   OPKG_STATE_DOWNLOADING_REPOSITORY,
-  OPKG_STATE_VERIFYING_REPOSITORY_SIGNITURE
+  OPKG_STATE_VERIFYING_REPOSITORY_SIGNATURE
 } opkg_state_t;
 
+#endif /* OPKG_STATE_H */