Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge remote branch 'pkgng/master'
Will Andrews committed 14 years ago
commit ad15f5648a4b3f77fe28ebaaadb4300aab0b4d89
parent 2fce792
12 files changed +160 -78
modified libpkg/pkg.c
@@ -435,6 +435,34 @@ pkg_adddep(struct pkg *pkg, const char *name, const char *origin, const char *ve
}

int
+
pkg_addrdep(struct pkg *pkg, const char *name, const char *origin, const char *version)
+
{
+
	struct pkg_dep *d;
+

+
	if (pkg == NULL)
+
		return (ERROR_BAD_ARG("pkg"));
+

+
	if (name == NULL || name[0] == '\0')
+
		return (ERROR_BAD_ARG("name"));
+

+
	if (origin == NULL || origin[0] == '\0')
+
		return (ERROR_BAD_ARG("origin"));
+

+
	if (version == NULL || version[0] == '\0')
+
		return (ERROR_BAD_ARG("version"));
+

+
	pkg_dep_new(&d);
+

+
	sbuf_set(&d->origin, origin);
+
	sbuf_set(&d->name, name);
+
	sbuf_set(&d->version, version);
+

+
	STAILQ_INSERT_TAIL(&pkg->rdeps, d, next);
+

+
	return (EPKG_OK);
+
}
+

+
int
pkg_addfile(struct pkg *pkg, const char *path, const char *sha256)
{
	struct pkg_file *f;
modified libpkg/pkg.h
@@ -295,6 +295,8 @@ int pkg_setnewpkgsize(struct pkg *pkg, int64_t size);
 */
int pkg_adddep(struct pkg *pkg, const char *name, const char *origin, const
			   char *version);
+
int pkg_addrdep(struct pkg *pkg, const char *name, const char *origin, const
+
			   char *version);

/**
 * Allocate a new struct pkg_file and add it to the files of pkg.
modified libpkg/pkg_manifest.c
@@ -32,27 +32,25 @@ static int m_parse_file(struct pkg *pkg, char *buf);
static int m_parse_dir(struct pkg *pkg, char *buf);
static int m_parse_set_string(struct pkg *pkg, char *buf, pkg_attr attr);

-
#define MANIFEST_FORMAT_KEY "@pkg_format_version"
-

static struct manifest_key {
	const char *key;
	int (*parse)(struct pkg *pkg, char *buf);
} manifest_key[] = {
-
	{ "@name", m_parse_name},
-
	{ "@origin", m_parse_origin},
-
	{ "@version", m_parse_version},
-
	{ "@arch", m_parse_arch},
-
	{ "@osversion", m_parse_osversion},
-
	{ "@www", m_parse_www},
-
	{ "@comment", m_parse_comment},
-
	{ "@flatsize", m_parse_flatsize},
-
	{ "@option", m_parse_option},
-
	{ "@dep", m_parse_dep},
-
	{ "@conflict", m_parse_conflict},
-
	{ "@maintainer", m_parse_maintainer},
-
	{ "@prefix", m_parse_prefix},
-
	{ "@file", m_parse_file},
-
	{ "@dir", m_parse_dir},
+
	{ "name:", m_parse_name},
+
	{ "origin:", m_parse_origin},
+
	{ "version:", m_parse_version},
+
	{ "arch:", m_parse_arch},
+
	{ "osversion:", m_parse_osversion},
+
	{ "www:", m_parse_www},
+
	{ "comment:", m_parse_comment},
+
	{ "flatsize:", m_parse_flatsize},
+
	{ "option:", m_parse_option},
+
	{ "dep:", m_parse_dep},
+
	{ "conflict:", m_parse_conflict},
+
	{ "maintainer:", m_parse_maintainer},
+
	{ "prefix:", m_parse_prefix},
+
	{ "file:", m_parse_file},
+
	{ "dir:", m_parse_dir},
};

#define manifest_key_len (int)(sizeof(manifest_key)/sizeof(manifest_key[0]))
@@ -221,14 +219,25 @@ m_parse_file(struct pkg *pkg, char *buf)
	while (isspace(*buf))
		buf++;

-
	if (split_chr(buf, ' ') != 1)
+
	while (isspace(buf[0]))
+
		buf++;
+

+
	if (buf[0] == '-')
+
		sha256 = NULL;
+
	else
+
		sha256 = buf;
+

+
	while (!isspace(buf[0]))
+
		buf++;
+

+
	buf[0] = '\0';
+
	buf++;
+

+
	if (buf[0] != '/')
		return (EPKG_FATAL);

	path = buf;

-
	buf += strlen(path) + 1;
-
	sha256 = buf;
-

	pkg_addfile(pkg, path, sha256);

	return (EPKG_OK);
@@ -240,7 +249,7 @@ m_parse_dir(struct pkg *pkg, char *buf)
	while (isspace(*buf))
		buf++;

-
	if (*buf == '\0')
+
	if (*buf != '/')
		return (EPKG_FATAL);

	pkg_adddir(pkg, buf);
@@ -276,13 +285,6 @@ pkg_parse_manifest(struct pkg *pkg, char *buf)
	nbel = split_chr(buf, '\n');

	buf_ptr = buf;
-
	if (!STARTS_WITH(buf, MANIFEST_FORMAT_KEY)) {
-
		warn("Not a package manifest");
-
		return (-1);
-
	}
-

-
	next = strlen(buf_ptr);
-
	buf_ptr += next + 1;
	next = strlen(buf_ptr);
	for (i = 1; i <= nbel; i++) {
		found = 0;
@@ -325,17 +327,17 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)

	manifest = sbuf_new_auto();

-
	sbuf_printf(manifest, "@pkg_format_version 0.9\n"
-
			"@name %s\n"
-
			"@version %s\n"
-
			"@origin %s\n"
-
			"@comment %s\n"
-
			"@arch %s\n"
-
			"@osversion %s\n"
-
			"@www %s\n"
-
			"@maintainer %s\n"
-
			"@prefix %s\n"
-
			"@flatsize %" PRId64 "\n",
+
	sbuf_printf(manifest,
+
			"name: %s\n"
+
			"version: %s\n"
+
			"origin: %s\n"
+
			"comment: %s\n"
+
			"arch: %s\n"
+
			"osversion: %s\n"
+
			"www: %s\n"
+
			"maintainer: %s\n"
+
			"prefix: %s\n"
+
			"flatsize: %" PRId64 "\n",
			pkg_get(pkg, PKG_NAME),
			pkg_get(pkg, PKG_VERSION),
			pkg_get(pkg, PKG_ORIGIN),
@@ -349,7 +351,7 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)
			);

	while (pkg_deps(pkg, &dep) == EPKG_OK) {
-
		sbuf_printf(manifest, "@dep %s %s %s\n",
+
		sbuf_printf(manifest, "dep: %s %s %s\n",
					pkg_dep_name(dep),
					pkg_dep_origin(dep),
					pkg_dep_version(dep));
@@ -357,21 +359,21 @@ pkg_emit_manifest(struct pkg *pkg, char **dest)


	while (pkg_conflicts(pkg, &conflict) == EPKG_OK) {
-
		sbuf_printf(manifest, "@conflict %s\n", pkg_conflict_glob(conflict));
+
		sbuf_printf(manifest, "conflict: %s\n", pkg_conflict_glob(conflict));
	}

	while (pkg_options(pkg, &option) == EPKG_OK) {
-
		sbuf_printf(manifest, "@option %s %s\n", pkg_option_opt(option),
+
		sbuf_printf(manifest, "option: %s %s\n", pkg_option_opt(option),
					pkg_option_value(option));
	}

	while (pkg_files(pkg, &file) == EPKG_OK) {
-
		sbuf_printf(manifest, "@file %s %s\n", pkg_file_path(file),
-
					pkg_file_sha256(file));
+
		sbuf_printf(manifest, "file: %s %s\n", pkg_file_sha256(file) && strlen(pkg_file_sha256(file)) > 0 ? pkg_file_sha256(file) : "-",
+
					pkg_file_path(file));
	}

	while (pkg_dirs(pkg, &dir) == EPKG_OK) {
-
		sbuf_printf(manifest, "@dir %s\n", pkg_dir_path(dir));
+
		sbuf_printf(manifest, "dir: %s\n", pkg_dir_path(dir));
	}

	sbuf_finish(manifest);
modified libpkg/pkgdb.c
@@ -218,9 +218,6 @@ pkgdb_init(sqlite3 *sdb)
	"CREATE VIEW pkg_dirs AS SELECT origin, path FROM packages "
	"INNER JOIN pkg_dirs_assoc ON packages.id = pkg_dirs_assoc.package_id "
	"INNER JOIN directories ON pkg_dirs_assoc.directory_id = directories.id;"
-
	"CREATE TRIGGER pkg_dirs_clean AFTER DELETE ON packages BEGIN "
-
		"DELETE from directories WHERE id NOT IN (SELECT DISTINCT directory_id FROM pkg_dirs_assoc);"
-
	"END;"
	"CREATE TRIGGER dir_insert INSTEAD OF INSERT ON pkg_dirs "
	"FOR EACH ROW BEGIN "
		"INSERT OR IGNORE INTO directories (path) VALUES (NEW.path);"
@@ -596,7 +593,7 @@ pkgdb_loadrdeps(struct pkgdb *db, struct pkg *pkg)
	sqlite3_bind_text(stmt, 1, pkg_get(pkg, PKG_ORIGIN), -1, SQLITE_STATIC);

	while ((ret = sqlite3_step(stmt)) == SQLITE_ROW) {
-
		pkg_adddep(pkg, sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1),
+
		pkg_addrdep(pkg, sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1),
				   sqlite3_column_text(stmt, 2));
	}
	sqlite3_finalize(stmt);
@@ -1171,6 +1168,7 @@ pkgdb_unregister_pkg(struct pkgdb *db, const char *origin)
{
	sqlite3_stmt *stmt_del;
	int ret;
+
	char *errmsg;
	const char sql[] = "DELETE FROM packages WHERE origin = ?1;";

	if (db == NULL)
@@ -1190,6 +1188,14 @@ pkgdb_unregister_pkg(struct pkgdb *db, const char *origin)
	if (ret != SQLITE_DONE)
		return (ERROR_SQLITE(db->sqlite));

+
	/* cleanup directories */
+
	ret = sqlite3_exec(db->sqlite, "DELETE from directories WHERE id NOT IN (SELECT DISTINCT directory_id FROM pkg_dirs_assoc);", NULL, NULL, &errmsg);
+
	if (ret != SQLITE_OK) {
+
		ret = pkg_error_set(EPKG_FATAL, "%s", errmsg);
+
		sqlite3_free(errmsg);
+
		return (ret);
+
	}
+

	return (EPKG_OK);
}

modified pkg/Makefile
@@ -10,6 +10,7 @@ SRCS= add.c \
		repo.c \
		update.c \
		upgrade.c \
+
		utils.c \
		version.c \
		which.c
BINDIR=		/usr/sbin
modified pkg/create.c
@@ -8,6 +8,7 @@
#include <sysexits.h>

#include "create.h"
+
#include "utils.h"

void
usage_create(void)
@@ -139,6 +140,9 @@ exec_create(int argc, char **argv)

	if (outdir == NULL)
		outdir = "./";
+
	else
+
		if (mkdirs(outdir) != EPKG_OK)
+
			return (EX_SOFTWARE);

	if (format == NULL) {
		fmt = TXZ;
modified pkg/info.c
@@ -41,7 +41,7 @@ print_info(struct pkg *pkg, unsigned int opt)
		if (!(opt & INFO_QUIET))
			printf("%s-%s is required by:\n", pkg_get(pkg, PKG_NAME), pkg_get(pkg, PKG_VERSION));

-
		while (pkg_deps(pkg, &dep) == EPKG_OK) {
+
		while (pkg_rdeps(pkg, &dep) == EPKG_OK) {
			printf("%s-%s\n", pkg_dep_name(dep), pkg_dep_version(dep));
		}

added pkg/utils.c
@@ -0,0 +1,41 @@
+
#include <sys/param.h>
+
#include <sys/stat.h>
+

+
#include <err.h>
+
#include <errno.h>
+
#include <string.h>
+
#include <pkg.h>
+

+
#include "utils.h"
+

+
int
+
mkdirs(const char *_path)
+
{
+
	char path[MAXPATHLEN];
+
	char *p;
+

+
	strlcpy(path, _path, sizeof(path));
+
	p = path;
+
	if (*p == '/')
+
		p++;
+

+
	for (;;) {
+
		if ((p = strchr(p, '/')) != NULL)
+
			*p = '\0';
+

+
		if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0)
+
			if (errno != EEXIST && errno != EISDIR) {
+
				warn("mkdir(%s)", path);
+
				return (EPKG_FATAL);
+
			}
+

+
		/* that was the last element of the path */
+
		if (p == NULL)
+
			break;
+

+
		*p = '/';
+
		p++;
+
	}
+

+
	return (EPKG_OK);
+
}
added pkg/utils.h
@@ -0,0 +1,6 @@
+
#ifndef _UTILS_H
+
#define _UTILS_H
+

+
int mkdirs(const char *path);
+

+
#endif
modified ports/bsd.pkgng.mk
@@ -35,23 +35,22 @@ fake-pkg:
.if !defined(NO_PKG_REGISTER)
	@${ECHO_MSG} "===>   Registering installation for ${PKGNAME}"
	@${MKDIR} ${METADIR}
-
	@${ECHO_CMD} "@pkg_format_version 0.9" > ${MANIFESTF}
-
	@${ECHO_CMD} "@name ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}" >> ${MANIFESTF}
-
	@${ECHO_CMD} "@version ${PKGVERSION}" >> ${MANIFESTF}
-
	@${ECHO_CMD} "@origin ${PKGORIGIN}" >> ${MANIFESTF}
-
	@${ECHO_CMD} "@comment ${COMMENT}" >> ${MANIFESTF}
-
	@${ECHO_CMD} "@maintainer ${MAINTAINER}" >> ${MANIFESTF}
-
	@${ECHO_CMD} "@prefix ${PREFIX}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "name: ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}" > ${MANIFESTF}
+
	@${ECHO_CMD} "version: ${PKGVERSION}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "origin: ${PKGORIGIN}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "comment: ${COMMENT}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "maintainer: ${MAINTAINER}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "prefix: ${PREFIX}" >> ${MANIFESTF}
.if defined(WWW)
-
	@${ECHO_CMD} "@www ${WWW}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "www: ${WWW}" >> ${MANIFESTF}
.endif
	@${MAKE} -C ${.CURDIR} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u >> ${MANIFESTF}
.if !defined(DISABLE_CONFLICTS)
.for conflicts in ${CONFLICTS}
-
	@${ECHO_CMD} "@conflict ${conflicts}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "conflict: ${conflicts}" >> ${MANIFESTF}
.endfor
.for conflicts in ${CONFLICTS_INSTALL}
-
	@${ECHO_CMD} "@conflict ${conflicts}" >> ${MANIFESTF}
+
	@${ECHO_CMD} "conflict: ${conflicts}" >> ${MANIFESTF}
.endfor
.endif
.if exists(${PKGINSTALL})
modified ports/pkg2ng
@@ -17,6 +17,7 @@ do
	DESC="${DB}/+DESC"

	ORIGIN=$(pkg_info -qo ${PKG})
+
	PREFX=$(pkg_info -qp ${PKG})
	MAINTAINER=$( make -C /usr/ports/${ORIGIN} -V MAINTAINER )
	# +CONTENTS
	MDIR=$(mktemp -d /tmp/pkg2ngXXXXX)
@@ -26,19 +27,18 @@ do
	MANIFEST=${MDIR}/+MANIFEST
	PLIST=${MDIR}/plist
	cp -f ${DB}/+INSTALL ${MDIR} 2>/dev/null
-
	echo "@pkg_format_version 0.9" >> ${MANIFEST}
-
	echo "@name ${PKG%-*}" >> ${MANIFEST}
-
	echo "@version ${PKG##*-}" >> ${MANIFEST}
-
	echo "@origin ${ORIGIN}" >> ${MANIFEST}
-
	echo "@comment ${COMMENT}" >> ${MANIFEST}
-
	echo "@maintainer ${MAINTAINER}" >> ${MANIFEST}
-
	echo "@prefix /usr/local" >> ${MANIFEST}
+
	echo "name: ${PKG%-*}" >> ${MANIFEST}
+
	echo "version: ${PKG##*-}" >> ${MANIFEST}
+
	echo "origin: ${ORIGIN}" >> ${MANIFEST}
+
	echo "comment: ${COMMENT}" >> ${MANIFEST}
+
	echo "maintainer: ${MAINTAINER}" >> ${MANIFEST}
+
	echo "prefix: ${PREFX##* }" >> ${MANIFEST}
	pkg_info -qr ${PKG} | while read ignore dep; do
		deporigin=$(pkg_info -qo ${dep})
-
		echo "@dep ${dep%-*} ${deporigin} ${dep##*-}" >> ${MANIFEST}
+
		echo "dep: ${dep%-*} ${deporigin} ${dep##*-}" >> ${MANIFEST}
	done
	egrep -v "^@[pkgdep|ignore|conflicts]" ${DB}/+CONTENTS >> ${PLIST}
-
	awk '/^@conflicts/ { print "@conflict "$2 }' ${DB}/+CONTENTS >> ${MANIFEST}
+
	awk '/^@conflicts/ { print "conflict: "$2 }' ${DB}/+CONTENTS >> ${MANIFEST}

	OPTIONS=""

modified tests/manifest.c
@@ -5,7 +5,6 @@
#include "tests.h"

char manifest[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name foobar\n"
	"@version 0.3\n"
	"@origin foo/bar\n"
@@ -22,12 +21,10 @@ char manifest[] = ""
	"@conflict bar-*\n"
	"@option foo true\n"
	"@option bar false\n"
-
	"@file /usr/local/bin/foo "
-
		"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b\n";
+
	"@file 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b /usr/local/bin/foo\n";

/* Name empty */
char wrong_manifest1[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name\n"
	"@version 0.3\n"
	"@origin foo/bar\n"
@@ -45,7 +42,6 @@ char wrong_manifest1[] = ""

/* bad dependency line */
char wrong_manifest2[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name foobar\n"
	"@version 0.3\n"
	"@origin foo/bar\n"
@@ -63,7 +59,6 @@ char wrong_manifest2[] = ""

/* bad conflict line */
char wrong_manifest3[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name foobar\n"
	"@version 0.3\n"
	"@origin foo/bar\n"
@@ -81,7 +76,6 @@ char wrong_manifest3[] = ""

/* bad option line */
char wrong_manifest4[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name foobar\n"
	"@version 0.3\n"
	"@origin foo/bar\n"
@@ -99,7 +93,6 @@ char wrong_manifest4[] = ""

/* bad option line */
char wrong_manifest5[] = ""
-
	"@pkg_format_version 0.9\n"
	"@name foobar\n"
	"@version 0.3\n"
	"@origin foo/bar\n"