Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add a flag to control if the pkg version test is done: it isn't wanted when we're just querying for available upgrades in order to fetch the pkgs.
Matthew Seaman committed 13 years ago
commit 8f9fc43b9e97c84c2d4469757d20d8fa4adecc7c
parent 632169d
7 files changed +42 -25
modified libpkg/pkg.h.in
@@ -296,6 +296,8 @@ typedef enum _pkg_flags {
	PKG_FLAG_AUTOMATIC = (1U << 3),
	PKG_FLAG_WITH_DEPS = (1U << 4),
	PKG_FLAG_NOSCRIPT = (1U << 5),
+
	PKG_FLAG_PKG_VERSION_TEST = (1U << 6),
+
	PKG_FLAG_UPGRADES_FOR_INSTALLED = (1U << 7),
} pkg_flags;

typedef enum _pkg_config_key {
modified libpkg/pkg_jobs.c
@@ -2,6 +2,7 @@
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -169,11 +170,16 @@ jobs_solve_upgrade(struct pkg_jobs *j)
	struct pkgdb_it *it;
	char *origin;
	bool all = false;
+
	bool pkgversiontest = false;

	if ((j->flags & PKG_FLAG_FORCE) != 0)
		all = true;

-
	if ((it = pkgdb_query_upgrades(j->db, j->reponame, all)) == NULL)
+
	if ((j->flags & PKG_FLAG_PKG_VERSION_TEST) != 0)
+
		pkgversiontest = true;
+

+
	if ((it = pkgdb_query_upgrades(j->db, j->reponame, all,
+
	        pkgversiontest)) == NULL)
		return (EPKG_FATAL);

	while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) == EPKG_OK) {
@@ -196,17 +202,21 @@ jobs_solve_install(struct pkg_jobs *j)
	char *origin;
	bool force = false;
	bool recursive = false;
+
	bool pkgversiontest = false;

-

-
	if ((j->flags & PKG_FLAG_FORCE) == PKG_FLAG_FORCE)
+
	if ((j->flags & PKG_FLAG_FORCE) != 0)
		force = true;

-
	if ((j->flags & PKG_FLAG_RECURSIVE) == PKG_FLAG_RECURSIVE)
+
	if ((j->flags & PKG_FLAG_RECURSIVE) != 0)
		recursive = true;

+
	if ((j->flags & PKG_FLAG_PKG_VERSION_TEST) != 0)
+
		pkgversiontest = true;
+

	LL_FOREACH(j->patterns, jp) {
		if ((it = pkgdb_query_installs(j->db, jp->match, jp->nb,
-
		    jp->pattern, j->reponame, force, recursive)) == NULL)
+
		        jp->pattern, j->reponame, force, recursive,
+
			pkgversiontest)) == NULL)
			return (EPKG_FATAL);

		while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC|PKG_LOAD_DEPS) == EPKG_OK) {
@@ -232,6 +242,9 @@ jobs_solve_fetch(struct pkg_jobs *j)
	char *origin;
	unsigned flag = PKG_LOAD_BASIC;

+
	if ((j->flags & PKG_FLAG_UPGRADES_FOR_INSTALLED) != 0)
+
		return (jobs_solve_upgrade(j));
+

	if ((j->flags & PKG_FLAG_WITH_DEPS) != 0)
		flag |= PKG_LOAD_DEPS;

modified libpkg/pkgdb.c
@@ -2911,7 +2911,7 @@ cleanup:

struct pkgdb_it *
pkgdb_query_installs(struct pkgdb *db, match_t match, int nbpkgs, char **pkgs,
-
    const char *repo, bool force, bool recursive)
+
        const char *repo, bool force, bool recursive, bool pkgversiontest)
{
	sqlite3_stmt	*stmt = NULL;
	struct pkgdb_it	*it;
@@ -2921,7 +2921,8 @@ pkgdb_query_installs(struct pkgdb *db, match_t match, int nbpkgs, char **pkgs,
	const char	*reponame = NULL;
	bool             pkg_not_found = false;

-
	if ((it = pkgdb_query_newpkgversion(db, repo)) != NULL) {
+
	if (pkgversiontest && 
+
	    (it = pkgdb_query_newpkgversion(db, repo)) != NULL) {
		pkg_emit_newpkgversion();
		return (it);
	}
@@ -3128,7 +3129,8 @@ pkgdb_query_installs(struct pkgdb *db, match_t match, int nbpkgs, char **pkgs,
}

struct pkgdb_it *
-
pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all)
+
pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all,
+
	bool pkgversiontest)
{
	sqlite3_stmt	*stmt = NULL;
	struct sbuf	*sql = NULL;
@@ -3136,7 +3138,8 @@ pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all)
	struct pkgdb_it	*it;
	int		 ret;

-
	if ((it = pkgdb_query_newpkgversion(db, repo)) != NULL) {
+
	if (pkgversiontest &&
+
	    (it = pkgdb_query_newpkgversion(db, repo)) != NULL) {
		pkg_emit_newpkgversion();
		return (it);
	}
modified libpkg/private/pkgdb.h
@@ -58,8 +58,8 @@ int pkgdb_transaction_rollback(sqlite3 *sqlite, const char *savepoint);

struct pkgdb_it *pkgdb_query_delete(struct pkgdb *db, match_t type, int nbpkgs, char **pkgs, int recursive);
struct pkgdb_it *pkgdb_query_autoremove(struct pkgdb *db);
-
struct pkgdb_it *pkgdb_query_upgrades(struct pkgdb *db, const char *reponame, bool all);
-
struct pkgdb_it *pkgdb_query_installs(struct pkgdb *db, match_t type, int nbpkgs, char **pkgs, const char *reponame, bool force, bool recursive);
+
struct pkgdb_it *pkgdb_query_upgrades(struct pkgdb *db, const char *reponame, bool all, bool pkgversiontest);
+
struct pkgdb_it *pkgdb_query_installs(struct pkgdb *db, match_t type, int nbpkgs, char **pkgs, const char *reponame, bool force, bool recursive, bool pkgversiontest);
struct pkgdb_it *pkgdb_query_fetch(struct pkgdb *db, match_t type, int nbpkgs, char **pkgs, const char *reponame, unsigned flags);

int pkgdb_obtain_lock(struct pkgdb *db);
modified pkg/fetch.c
@@ -1,5 +1,6 @@
/*-
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -58,7 +59,7 @@ exec_fetch(int argc, char **argv)
	int		 retcode = EX_SOFTWARE;
	bool		 auto_update;
	bool		 force = false;
-
	bool		 updates_for_installed = false;
+
	bool		 upgrades_for_installed = false;
	bool		 yes;
	unsigned	 mode;
	match_t		 match = MATCH_EXACT;
@@ -92,7 +93,9 @@ exec_fetch(int argc, char **argv)
			reponame = optarg;
			break;
		case 'u':
-
			updates_for_installed = true;
+
			f |= PKG_FLAG_UPGRADES_FOR_INSTALLED;
+
			upgrades_for_installed = true;
+
			break;
		case 'x':
			match = MATCH_REGEX;
			break;
@@ -107,12 +110,12 @@ exec_fetch(int argc, char **argv)
	argc -= optind;
	argv += optind;
	
-
	if (argc < 1 && match != MATCH_ALL && !updates_for_installed) {
+
	if (argc < 1 && match != MATCH_ALL && !upgrades_for_installed) {
		usage_fetch();
		return (EX_USAGE);
	}

-
        if (match == MATCH_ALL && updates_for_installed) {
+
        if (match == MATCH_ALL && upgrades_for_installed) {
		usage_fetch();
		return (EX_USAGE);
	}
@@ -133,7 +136,7 @@ exec_fetch(int argc, char **argv)
	} else if (retcode != EPKG_OK)
		return (EX_IOERR);

-
	if (updates_for_installed) {
+
	if (upgrades_for_installed) {
		retcode = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_LOCAL);

		if (retcode == EPKG_ENOACCESS) {
@@ -155,13 +158,9 @@ exec_fetch(int argc, char **argv)

	pkg_jobs_set_flags(jobs, f);

-
	if (updates_for_installed) {
-
		if (pkg_jobs_updates_for_installed(jobs) != EPKG_OK)
-
			goto cleanup;
-
	} else {
-
		if (pkg_jobs_add(jobs, match, argv, argc) != EPKG_OK)
-
			goto cleanup;
-
	}
+
	if (!upgrades_for_installed &&
+
	    pkg_jobs_add(jobs, match, argv, argc) != EPKG_OK)
+
		goto cleanup;

	if (pkg_jobs_solve(jobs) != EPKG_OK)
		goto cleanup;
modified pkg/install.c
@@ -63,7 +63,7 @@ exec_install(int argc, char **argv)
	match_t match = MATCH_EXACT;
	bool dry_run = false;
	nbactions = nbdone = 0;
-
	pkg_flags f = PKG_FLAG_NONE;
+
	pkg_flags f = PKG_FLAG_NONE | PKG_FLAG_PKG_VERSION_TEST;

	pkg_config_bool(PKG_CONFIG_ASSUME_ALWAYS_YES, &yes);
	pkg_config_bool(PKG_CONFIG_REPO_AUTOUPDATE, &auto_update);
modified pkg/upgrade.c
@@ -54,7 +54,7 @@ exec_upgrade(int argc, char **argv)
	bool dry_run = false;
	bool auto_update;
	nbactions = nbdone = 0;
-
	pkg_flags f = PKG_FLAG_NONE;
+
	pkg_flags f = PKG_FLAG_NONE | PKG_FLAG_PKG_VERSION_TEST;

	pkg_config_bool(PKG_CONFIG_ASSUME_ALWAYS_YES, &yes);
	pkg_config_bool(PKG_CONFIG_REPO_AUTOUPDATE, &auto_update);