Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge remote-tracking branch 'upstream/master' into master
Shawn Webb committed 5 years ago
commit 7e2225c89f7d9f1c358547f80c3ed3186d344389
parent cec7452
15 files changed +70 -21
modified NEWS
@@ -1,3 +1,9 @@
+
Changes from 1.15.99.1 to 1.15.99.2
+
- Fix '%X' to include the file name and sum
+

+
Changes from 1.14.99.7 to 1.15.99.1
+
- Fix '%X' to not include the version
+

Changes from 1.14.99.6 to 1.14.99.7
- Default the OSVERSION check to false
- Fix some errors related to getpwname_r/getgrnam_r
modified auto.def
@@ -4,9 +4,9 @@
use cc cc-lib cc-shared pkg-config

set maj_ver 1
-
set med_ver 14
+
set med_ver 15
set min_ver 99
-
set dev_ver 5
+
set dev_ver 1
define PKG_API [expr $maj_ver * 1000000 + $med_ver * 1000 + $min_ver]
define VERSION $maj_ver.$med_ver.$min_ver[expr {$dev_ver ? ".$dev_ver" : ""}]

@@ -35,9 +35,9 @@ define LIBVERSION 4
define LIBSOEXT [format [get-define SH_SOEXTVER] [get-define LIBVERSION]]

define GITHASH ""
-
if {[cc-check-progs git] && [file exists .git]} {
-
	catch {exec git rev-parse --short HEAD} gitrev
-
	catch {exec git diff-index -m --name-only HEAD} gitdirty
+
if {[cc-check-progs git] && [file exists .git] &&
+
    ![catch {exec git rev-parse --short HEAD} gitrev] &&
+
    ![catch {exec git diff-index -m --name-only HEAD} gitdirty]} {
	define GITHASH -$gitrev[expr {$gitdirty eq {} ? {} : {-dirty}}]
}

modified libpkg/pkg.c
@@ -1490,7 +1490,7 @@ pkg_validate(struct pkg *pkg, struct pkgdb *db)
			strlen(pkg->digest))) {
		/* Calculate new digest */
		if (pkgdb_ensure_loaded(db, pkg, flags)) {
-
			return (pkg_checksum_calculate(pkg, db, false));
+
			return (pkg_checksum_calculate(pkg, db, false, true, false));
		}
		return (EPKG_FATAL);
	}
modified libpkg/pkg_checksum.c
@@ -211,7 +211,7 @@ pkg_checksum_entry_cmp(struct pkg_checksum_entry *e1,

int
pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,
-
       pkg_checksum_type_t type, bool inc_scripts)
+
       pkg_checksum_type_t type, bool inc_scripts, bool inc_version, bool inc_files)
{
	unsigned char *bdigest;
	char *olduid, *buf;
@@ -219,6 +219,7 @@ pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,
	struct pkg_checksum_entry *entries = NULL;
	struct pkg_option *option = NULL;
	struct pkg_dep *dep = NULL;
+
	struct pkg_file *f = NULL;
	int i;

	if (pkg == NULL || type >= PKG_HASH_TYPE_UNKNOWN ||
@@ -227,7 +228,8 @@ pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,

	pkg_checksum_add_entry("name", pkg->name, &entries);
	pkg_checksum_add_entry("origin", pkg->origin, &entries);
-
	pkg_checksum_add_entry("version", pkg->version, &entries);
+
	if (inc_version)
+
		pkg_checksum_add_entry("version", pkg->version, &entries);
	pkg_checksum_add_entry("arch", pkg->arch, &entries);

	while (pkg_options(pkg, &option) == EPKG_OK) {
@@ -285,6 +287,10 @@ pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,
		}
	}

+
	while (pkg_files(pkg, &f) == EPKG_OK) {
+
		pkg_checksum_add_entry(f->path, f->sum, &entries);
+
	}
+

	/* Sort before hashing */
	DL_SORT(entries, pkg_checksum_entry_cmp);

@@ -617,7 +623,8 @@ pkg_checksum_type_size(pkg_checksum_type_t type)
}

int
-
pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db, bool inc_scripts)
+
pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db, bool inc_scripts,
+
    bool inc_version, bool inc_files)
{
	char *new_digest;
	struct pkg_repo *repo;
@@ -637,7 +644,8 @@ pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db, bool inc_scripts)
	}

	new_digest = xmalloc(pkg_checksum_type_size(type));
-
	if (pkg_checksum_generate(pkg, new_digest, pkg_checksum_type_size(type), type, inc_scripts)
+
	if (pkg_checksum_generate(pkg, new_digest, pkg_checksum_type_size(type),
+
	    type, inc_scripts, inc_version, inc_files)
			!= EPKG_OK) {
		free(new_digest);
		return (EPKG_FATAL);
modified libpkg/pkg_jobs.c
@@ -739,7 +739,7 @@ pkg_jobs_process_remote_pkg(struct pkg_jobs *j, struct pkg *rp,
	struct pkg_dep *rdep = NULL;

	if (rp->digest == NULL) {
-
		if (pkg_checksum_calculate(rp, j->db, false) != EPKG_OK) {
+
		if (pkg_checksum_calculate(rp, j->db, false, true, false) != EPKG_OK) {
			return (EPKG_FATAL);
		}
	}
modified libpkg/pkg_jobs_universe.c
@@ -163,7 +163,7 @@ pkg_jobs_universe_add_pkg(struct pkg_jobs_universe *universe, struct pkg *pkg,
	if (pkg->digest == NULL) {
		pkg_debug(3, "no digest found for package %s (%s-%s)",
		    pkg->uid, pkg->name, pkg->version);
-
		if (pkg_checksum_calculate(pkg, universe->j->db, false) != EPKG_OK) {
+
		if (pkg_checksum_calculate(pkg, universe->j->db, false, true, false) != EPKG_OK) {
			*found = NULL;
			return (EPKG_FATAL);
		}
@@ -420,7 +420,8 @@ pkg_jobs_universe_handle_provide(struct pkg_jobs_universe *universe,
		if (unit == NULL) {
			if (rpkg->digest == NULL) {
				pkg_debug(3, "no digest found for package %s", rpkg->uid);
-
				if (pkg_checksum_calculate(rpkg, universe->j->db, false) != EPKG_OK) {
+
				if (pkg_checksum_calculate(rpkg,
+
				    universe->j->db, false, true, false) != EPKG_OK) {
					return (EPKG_FATAL);
				}
			}
modified libpkg/pkg_printf.c
@@ -1496,7 +1496,7 @@ format_int_checksum(UT_string *buf, const void *data, struct percent_esc *p)
{
	struct pkg	*pkg = (struct pkg *)data;

-
	pkg_checksum_calculate(pkg, NULL, true);
+
	pkg_checksum_calculate(pkg, NULL, true, false, true);
	return (string_val(buf, pkg->digest, p));
}

modified libpkg/pkg_repo_create.c
@@ -396,7 +396,7 @@ pkg_create_repo_worker(struct pkg_fts_item *start, size_t nelts,
			if (meta->version == 1) {
				if (pkg_checksum_generate(pkg, mdigest,
				    pkg_checksum_type_size(meta->digest_format),
-
				    meta->digest_format, false) != EPKG_OK) {
+
				    meta->digest_format, false, true, false) != EPKG_OK) {
					pkg_emit_error("Cannot generate digest for a package");
					ret = EPKG_FATAL;

modified libpkg/pkgdb.c
@@ -3167,7 +3167,7 @@ pkgdb_begin_solver(struct pkgdb *db)
	if (it != NULL) {
		kv_init(pkglist);
		while (pkgdb_it_next(it, &p, PKG_LOAD_BASIC|PKG_LOAD_OPTIONS) == EPKG_OK) {
-
			pkg_checksum_calculate(p, NULL, false);
+
			pkg_checksum_calculate(p, NULL, false, true, false);
			kv_prepend(typeof(p), pkglist, p);
			p = NULL;
			cnt ++;
modified libpkg/private/pkg.h
@@ -793,7 +793,7 @@ bool ucl_object_emit_file(const ucl_object_t *obj, enum ucl_emitter emit_type,
pkg_object* pkg_emit_object(struct pkg *pkg, short flags);

int pkg_checksum_generate(struct pkg *pkg, char *dest, size_t destlen,
-
       pkg_checksum_type_t type, bool inc_scripts);
+
    pkg_checksum_type_t type, bool inc_scripts, bool inc_version, bool inc_files);

/*
 * Calculates checksum for any data.
@@ -818,7 +818,8 @@ pkg_checksum_type_t pkg_checksum_file_get_type(const char *cksum, size_t clen);
pkg_checksum_type_t pkg_checksum_type_from_string(const char *name);
const char* pkg_checksum_type_to_string(pkg_checksum_type_t type);
size_t pkg_checksum_type_size(pkg_checksum_type_t type);
-
int pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db, bool inc_scripts);
+
int pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db, bool inc_scripts,
+
    bool inc_version, bool inc_files);
char *pkg_checksum_generate_file(const char *path, pkg_checksum_type_t type);
char *pkg_checksum_generate_fileat(int fd, const char *path,
    pkg_checksum_type_t type);
modified libpkg/repo/binary/update.c
@@ -387,7 +387,7 @@ pkg_repo_binary_add_from_manifest(const char *buf, sqlite3 *sqlite, size_t len,
	}

	if (pkg->digest == NULL || !pkg_checksum_is_valid(pkg->digest, strlen(pkg->digest)))
-
		pkg_checksum_calculate(pkg, NULL, false);
+
		pkg_checksum_calculate(pkg, NULL, false, true, false);
	abi = pkg->abi != NULL ? pkg->abi : pkg->arch;
	if (abi == NULL || !is_valid_abi(abi, true)) {
		rc = EPKG_FATAL;
modified libpkg/utils.c
@@ -259,7 +259,7 @@ format_exec_cmd(char **dest, const char *in, const char *prefix,
			 */
			/* FALLTHRU */
		case '#':
-
			utstring_printf(buf, "%c", argc);
+
			utstring_printf(buf, "%d", argc);
			break;
		default:
			if ((sz = strspn(in, "0123456789")) > 0) {
modified src/create.c
@@ -136,7 +136,7 @@ pkg_create_matches(int argc, char **argv, match_t match, struct pkg_create *pc)
		pkg_printf("Creating package for %n-%v\n", e->pkg, e->pkg);
		ret = pkg_create_i(pc, e->pkg, false);
		if (ret == EPKG_EXIST) {
-
			pkg_printf("%s-%v already packaged, skipping...\n",
+
			pkg_printf("%n-%v already packaged, skipping...\n",
			  e->pkg, e->pkg);
		}
		if (ret != EPKG_OK && ret != EPKG_EXIST)
modified tests/frontend/query.sh
@@ -19,6 +19,17 @@ files: {
	"${TMPDIR}/bla": ""
}
EOF
+
	atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg test2 test 2
+
	cat >> test2.ucl << EOF
+
options: {
+
	"OPT1": "on"
+
	"OPT2": "off"
+
}
+
files: {
+
	"${TMPDIR}/plop": ""
+
	"${TMPDIR}/bla": ""
+
}
+
EOF
	atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg plop plop 1
	cat >> plop.ucl << EOF
deps: {
@@ -101,4 +112,25 @@ EOF
		-e empty \
		-s exit:0 \
		pkg query -e "%#O == 0" "%n"
+

+
	atf_check \
+
		-o empty \
+
		-e empty \
+
		-s exit:0 \
+
		pkg create -M test.ucl
+

+
	atf_check \
+
		-o empty \
+
		-e empty \
+
		-s exit:0 \
+
		pkg create -M test2.ucl
+

+
	sum1=$(pkg query -F ./test-1.txz '%X')
+
	sum2=$(pkg query -F ./test-2.txz '%X')
+

+
	atf_check \
+
		-o empty \
+
		-e empty \
+
		-s exit:0 \
+
		test "${sum1}" = "${sum2}"
}
modified tests/frontend/test_environment.sh.in
@@ -6,6 +6,7 @@ export PATH=$(atf_get_srcdir)/../../src/:${PATH}
export INSTALL_AS_USER=yes
export PKG_DBDIR=.
export NO_TICK=yes
+
export PKG_ENABLE_PLUGINS=false
@if coverage
export LLVM_PROFILE_FILE=/tmp/pkg.%p.profraw
@endif