Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Forced mode ignores local conflicts as well.
Vsevolod Stakhov committed 13 years ago
commit 8a354dd6c27438c2fa73e38658d6580f8012c99c
parent e757e82
4 files changed +26 -20
modified libpkg/pkg_add.c
@@ -271,10 +271,7 @@ pkg_add(struct pkgdb *db, const char *path, unsigned flags)

	/* register the package before installing it in case there are
	 * problems that could be caught here. */
-
	if ((flags & PKG_ADD_UPGRADE) == 0)
-
		retcode = pkgdb_register_pkg(db, pkg, 0);
-
	else
-
		retcode = pkgdb_register_pkg(db, pkg, 1);
+
	retcode = pkgdb_register_pkg(db, pkg, flags & PKG_ADD_UPGRADE, flags & PKG_FLAG_FORCE);

	if (retcode != EPKG_OK)
		goto cleanup;
modified libpkg/pkg_jobs.c
@@ -490,7 +490,7 @@ pkg_jobs_install(struct pkg_jobs *j)
		}

		if ((j->flags & PKG_FLAG_FORCE) != 0)
-
			flags |= PKG_ADD_FORCE;
+
			flags |= PKG_ADD_FORCE | PKG_FLAG_FORCE;
		if ((j->flags & PKG_FLAG_NOSCRIPT) != 0)
			flags |= PKG_ADD_NOSCRIPT;
		flags |= PKG_ADD_UPGRADE;
modified libpkg/pkgdb.c
@@ -2218,7 +2218,7 @@ prstmt_finalize(struct pkgdb *db)
}

int
-
pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete)
+
pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced)
{
	struct pkg		*pkg2 = NULL;
	struct pkg_dep		*dep = NULL;
@@ -2366,18 +2366,27 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete)
			goto cleanup;
		}
		pkg_get(pkg2, PKG_NAME, &name2, PKG_VERSION, &version2);
-
		pkg_config_bool(PKG_CONFIG_DEVELOPER_MODE, &devmode);
-
		if (!devmode)
-
			pkg_config_bool(PKG_CONFIG_PERMISSIVE, &permissive);
-
		pkg_emit_error("%s-%s conflicts with %s-%s"
-
		    " (installs files into the same place). "
-
		    " Problematic file: %s%s",
-
		    name, version, name2, version2, pkg_path,
-
		    permissive ? " ignored by permissive mode" : "");
-
		pkg_free(pkg2);
-
		if (!permissive) {
-
			pkgdb_it_free(it);
-
			goto cleanup;
+
		if (!forced) {
+
			pkg_config_bool(PKG_CONFIG_DEVELOPER_MODE, &devmode);
+
			if (!devmode)
+
				pkg_config_bool(PKG_CONFIG_PERMISSIVE, &permissive);
+
			pkg_emit_error("%s-%s conflicts with %s-%s"
+
					" (installs files into the same place). "
+
					" Problematic file: %s%s",
+
					name, version, name2, version2, pkg_path,
+
					permissive ? " ignored by permissive mode" : "");
+
			pkg_free(pkg2);
+
			if (!permissive) {
+
				pkgdb_it_free(it);
+
				goto cleanup;
+
			}
+
		}
+
		else {
+
			pkg_emit_error("%s-%s conflicts with %s-%s"
+
					" (installs files into the same place). "
+
					" Problematic file: %s ignored by forced mode",
+
					name, version, name2, version2, pkg_path);
+
			pkg_free(pkg2);
		}
	}

@@ -2634,7 +2643,7 @@ pkgdb_register_ports(struct pkgdb *db, struct pkg *pkg)

	pkg_emit_install_begin(pkg);

-
	ret = pkgdb_register_pkg(db, pkg, 0);
+
	ret = pkgdb_register_pkg(db, pkg, 0, 0);
	if (ret == EPKG_OK)
		pkg_emit_install_finished(pkg);

modified libpkg/private/pkg.h
@@ -374,7 +374,7 @@ int pkgdb_load_group(struct pkgdb *db, struct pkg *pkg);
int pkgdb_load_shlib_required(struct pkgdb *db, struct pkg *pkg);
int pkgdb_load_shlib_provided(struct pkgdb *db, struct pkg *pkg);

-
int pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete);
+
int pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete, int forced);
int pkgdb_update_shlibs_required(struct pkg *pkg, int64_t package_id, sqlite3 *s);
int pkgdb_update_shlibs_provided(struct pkg *pkg, int64_t package_id, sqlite3 *s);
int pkgdb_register_finale(struct pkgdb *db, int retcode);