This should fix Issue #51.
git-svn-id: http://opkg.googlecode.com/svn/trunk@538
e8e0d7a0-c8d9-11dd-a880-
a1081c7ac358
+static int
+opkg_remove_cmd(int argc, char **argv);
+
static int
opkg_install_cmd(int argc, char **argv)
{
static int
opkg_install_cmd(int argc, char **argv)
{
+ if (conf->force_reinstall) {
+ int saved_force_depends = conf->force_depends;
+ conf->force_depends = 1;
+ (void)opkg_remove_cmd(argc, argv);
+ conf->force_depends = saved_force_depends;
+ conf->force_reinstall = 0;
+ }
+
signal(SIGINT, sigint_handler);
/*
signal(SIGINT, sigint_handler);
/*
pkg->dest = old_pkg->dest;
rc = 0;
} else /* cmp == 0 */ {
pkg->dest = old_pkg->dest;
rc = 0;
} else /* cmp == 0 */ {
- if (conf->force_reinstall) {
- opkg_msg(NOTICE, "Reinstalling %s (%s) on %s...\n",
- pkg->name, new_version, old_pkg->dest->name);
- pkg->dest = old_pkg->dest;
- rc = 0;
- } else {
- if(!conf->download_only)
- opkg_msg(NOTICE, "%s (%s) already install on %s."
- " Not reinstalling.\n",
- pkg->name, new_version, old_pkg->dest->name);
- rc = 1;
- }
+ opkg_msg(NOTICE, "%s (%s) already install on %s.\n",
+ pkg->name, new_version, old_pkg->dest->name);
+ rc = 1;
}
free(old_version);
free(new_version);
}
free(old_version);
free(new_version);
opkg_msg(DEBUG2, "Versions from pkg_hash_fetch:");
if ( old )
opkg_msg(DEBUG2, "Versions from pkg_hash_fetch:");
if ( old )
- opkg_msg(DEBUG2, " old %s ", old->version);
- opkg_msg(DEBUG2, " new %s\n", new->version);
+ opkg_message(DEBUG2, " old %s ", old->version);
+ opkg_message(DEBUG2, " new %s\n", new->version);
new->state_flag |= SF_USER;
if (old) {
new->state_flag |= SF_USER;
if (old) {
"\n\t%s is available "
"\n\t%d was comparison result\n",
pkg_name, old_version, new_version, cmp);
"\n\t%s is available "
"\n\t%d was comparison result\n",
pkg_name, old_version, new_version, cmp);
- if (cmp == 0 && !conf->force_reinstall) {
opkg_msg(NOTICE,
"Package %s (%s) installed in %s is up to date.\n",
old->name, old_version, old->dest->name);
opkg_msg(NOTICE,
"Package %s (%s) installed in %s is up to date.\n",
old->name, old_version, old->dest->name);
pkg->architecture, pkg->name);
return -1;
}
pkg->architecture, pkg->name);
return -1;
}
- if (pkg->state_status == SS_INSTALLED && conf->force_reinstall == 0 && conf->nodeps == 0) {
+ if (pkg->state_status == SS_INSTALLED && conf->nodeps == 0) {
err = satisfy_dependencies_for(pkg);
if (err)
return -1;
err = satisfy_dependencies_for(pkg);
if (err)
return -1;
installing pkg A, A deps B & B deps on A. So both B and A are
installed. Then A's installation is started resulting in an
uncecessary upgrade */
installing pkg A, A deps B & B deps on A. So both B and A are
installed. Then A's installation is started resulting in an
uncecessary upgrade */
- if (pkg->state_status == SS_INSTALLED && conf->force_reinstall == 0)
+ if (pkg->state_status == SS_INSTALLED)
return 0;
err = verify_pkg_installable(pkg);
return 0;
err = verify_pkg_installable(pkg);
return 0;
/* point of no return: no unwinding after this */
return 0;
/* point of no return: no unwinding after this */
- if (old_pkg && !conf->force_reinstall) {
old_pkg->state_want = SW_DEINSTALL;
if (old_pkg->state_flag & SF_NOPRUNE) {
old_pkg->state_want = SW_DEINSTALL;
if (old_pkg->state_flag & SF_NOPRUNE) {
opkg_msg(DEBUG, "pkg=%s old_state_flag=%x state_flag=%x\n",
pkg->name, old_state_flag, pkg->state_flag);
opkg_msg(DEBUG, "pkg=%s old_state_flag=%x state_flag=%x\n",
pkg->name, old_state_flag, pkg->state_flag);
- if (old_pkg && !conf->force_reinstall) {
old_pkg->state_status = SS_NOT_INSTALLED;
old_pkg->state_status = SS_NOT_INSTALLED;
time(&pkg->installed_time);
time(&pkg->installed_time);
opkg_msg(INFO, "Not deleting %s. (noaction)\n",
file_name);
opkg_msg(INFO, "Not deleting %s. (noaction)\n",
file_name);
+ file_hash_remove(file_name);
}
/* Remove empty directories */
}
/* Remove empty directories */
-
-pkg_t *
-file_hash_get_file_owner(const char *file_name)
+static const char *
+strip_offline_root(const char *file_name)
if (conf->offline_root) {
if (conf->offline_root) {
- unsigned int len = strlen(conf->offline_root);
- if (strncmp(file_name, conf->offline_root, len) == 0) {
+ len = strlen(conf->offline_root);
+ if (strncmp(file_name, conf->offline_root, len) == 0)
+ return file_name;
+}
+
+void
+file_hash_remove(const char *file_name)
+{
+ file_name = strip_offline_root(file_name);
+ hash_table_remove(&conf->file_hash, file_name);
+}
+
+pkg_t *
+file_hash_get_file_owner(const char *file_name)
+{
+ file_name = strip_offline_root(file_name);
return hash_table_get(&conf->file_hash, file_name);
}
return hash_table_get(&conf->file_hash, file_name);
}
if (file_name[file_name_len -1] == '/')
return;
if (file_name[file_name_len -1] == '/')
return;
- if (conf->offline_root) {
- unsigned int len = strlen(conf->offline_root);
- if (strncmp(file_name, conf->offline_root, len) == 0) {
- file_name += len;
- }
- }
+ file_name = strip_offline_root(file_name);
hash_table_insert(&conf->file_hash, file_name, owning_pkg);
hash_table_insert(&conf->file_hash, file_name, owning_pkg);
pkg_t *pkg_hash_fetch_installed_by_name_dest(const char *pkg_name,
pkg_dest_t *dest);
pkg_t *pkg_hash_fetch_installed_by_name_dest(const char *pkg_name,
pkg_dest_t *dest);
+void file_hash_remove(const char *file_name);
pkg_t *file_hash_get_file_owner(const char *file_name);
void file_hash_set_file_owner(const char *file_name, pkg_t *pkg);
pkg_t *file_hash_get_file_owner(const char *file_name);
void file_hash_set_file_owner(const char *file_name, pkg_t *pkg);