Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
begin work on pkg upgrade, now able to show the diff between the local repo and the remote one
Baptiste Daroussin committed 15 years ago
commit 93ad3b24beff3549cac437621254229148368cdf
parent 7e8a64a
5 files changed +47 -3
modified libpkg/pkg.h
@@ -85,7 +85,8 @@ typedef enum {
	PKG_OSVERSION,
	PKG_MAINTAINER,
	PKG_WWW,
-
	PKG_PREFIX
+
	PKG_PREFIX,
+
	PKG_NEWVERSION
} pkg_attr;

/**
@@ -385,6 +386,11 @@ struct pkgdb_it * pkgdb_query(struct pkgdb *db, const char *pattern,
							  match_t type);

/**
+
 * 
+
 */
+
struct pkgdb_it *pkgdb_repos_diff(struct pkgdb *db);
+

+
/**
 * @todo Return directly the struct pkg?
 */
struct pkgdb_it * pkgdb_query_which(struct pkgdb *db, const char *path);
@@ -398,6 +404,7 @@ struct pkgdb_it * pkgdb_query_which(struct pkgdb *db, const char *path);
#define PKG_LOAD_SCRIPTS (1<<5)
#define PKG_LOAD_OPTIONS (1<<6)
#define PKG_LOAD_MTREE (1<<7)
+
#define PKG_LOAD_NEWVERSION (1<<8)

/**
 * Get the next pkg.
modified libpkg/pkg_private.h
@@ -9,7 +9,7 @@

#include "pkg_util.h"

-
#define PKG_NUM_FIELDS 12
+
#define PKG_NUM_FIELDS 13

struct pkg {
	struct {
modified libpkg/pkgdb.c
@@ -333,8 +333,14 @@ pkgdb_it_next(struct pkgdb_it *it, struct pkg **pkg_p, int flags)
			if ((ret = pkgdb_loadmtree(it->db, pkg)) != EPKG_OK)
				return (ret);

+
		if (flags & PKG_LOAD_NEWVERSION)
+
			pkg_set(pkg, PKG_NEWVERSION, sqlite3_column_text(it->stmt, 13));
+

		return (EPKG_OK);
	case SQLITE_DONE:
+
		if (flags & PKG_LOAD_NEWVERSION)
+
			sqlite3_exec(it->db->sqlite, "DETACH remote;", NULL, NULL, NULL);
+

		return (EPKG_END);
	default:
		return (ERROR_SQLITE(it->db->sqlite));
@@ -1199,3 +1205,32 @@ pkgdb_compact(struct pkgdb *db)

	return (retcode);
}
+

+
struct pkgdb_it *
+
pkgdb_repos_diff(struct pkgdb *db)
+
{
+

+
	sqlite3_stmt *stmt;
+
	char *errmsg;
+

+
	const char sql[] = ""
+
		"SELECT l.id, l.origin, l.name, l.version, l.comment, l.desc, "
+
		"l.message, l.arch, l.osversion, l.maintainer, "
+
		"l.www, l.prefix, l.flatsize, r.version, r.flatsize "
+
		"FROM main.packages AS l, "
+
		"remote.packages AS r "
+
		"WHERE l.origin = r.origin "
+
		"AND l.version != r.version";
+

+

+
	if (sqlite3_exec(db->sqlite, "ATTACH \"/var/db/pkg/repo.sqlite\" as remote;", NULL, NULL, &errmsg) != SQLITE_OK){
+
		pkg_error_set(EPKG_FATAL, "%s", errmsg);
+
		sqlite3_free(errmsg);
+
		return (NULL);
+
	}
+

+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK)
+
		return (NULL);
+

+
	return (pkgdb_it_new(db, stmt));
+
}
modified pkg/Makefile
@@ -7,6 +7,7 @@ SRCS= add.c \
		register.c \
		repo.c \
		update.c \
+
		upgrade.c \
		version.c \
		which.c
BINDIR=		/usr/sbin
modified pkg/main.c
@@ -12,6 +12,7 @@
#include "add.h"
#include "version.h"
#include "update.h"
+
#include "upgrade.h"
#include "register.h"
#include "repo.h"

@@ -32,7 +33,7 @@ static struct commands {
	{ "register", exec_register, usage_register},
	{ "repo", exec_repo, usage_repo},
	{ "update", exec_update, usage_update},
-
	{ "upgrade", NULL, NULL},
+
	{ "upgrade", exec_upgrade, usage_upgrade},
	{ "version", exec_version, usage_version},
	{ "which", exec_which, usage_which},
};