Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg: allow filtering files at install time
Baptiste Daroussin committed 4 years ago
commit 913c637d65bd4745c79d9ff55af910f603c1b6a6
parent 5893555
3 files changed +36 -0
modified libpkg/pkg_add.c
@@ -748,6 +748,11 @@ pkg_extract_finalize(struct pkg *pkg)
	install_as_user = (getenv("INSTALL_AS_USER") != NULL);

	while (pkg_files(pkg, &f) == EPKG_OK) {
+

+
		if (match_ucl_lists(f->path,
+
		    pkg_config_get("FILES_IGNORE_GLOB"),
+
		    pkg_config_get("FILES_IGNORE_REGEX")))
+
			continue;
		append_touched_file(f->path);
		if (*f->temppath == '\0')
			continue;
@@ -1030,6 +1035,10 @@ pkg_rollback_pkg(struct pkg *p)
	struct pkg_file *f = NULL;

	while (pkg_files(p, &f) == EPKG_OK) {
+
		if (match_ucl_lists(f->path,
+
		    pkg_config_get("FILES_IGNORE_GLOB"),
+
		    pkg_config_get("FILES_IGNORE_REGEX")))
+
			continue;
		if (*f->temppath != '\0') {
			unlinkat(p->rootfd, f->temppath, 0);
		}
@@ -1128,6 +1137,11 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,
	/* analyse previous files */
	f = NULL;
	while (pkg_files(pkg, &f) == EPKG_OK) {
+
		if (match_ucl_lists(f->path,
+
		    pkg_config_get("FILES_IGNORE_GLOB"),
+
		    pkg_config_get("FILES_IGNORE_REGEX"))) {
+
			continue;
+
		}
		if (faccessat(pkg->rootfd, RELATIVE_PATH(f->path), F_OK, 0) == 0) {
			f->previous = PKG_FILE_EXIST;
			if (!pkgdb_file_exists(db, f->path)) {
@@ -1373,6 +1387,10 @@ pkg_add_fromdir(struct pkg *pkg, const char *src)

	hardlinks = kh_init_hls();
	while (pkg_files(pkg, &f) == EPKG_OK) {
+
		if (match_ucl_lists(f->path,
+
		    pkg_config_get("FILES_IGNORE_GLOB"),
+
		    pkg_config_get("FILES_IGNORE_REGEX")))
+
			continue;
		if (fstatat(fromfd, RELATIVE_PATH(f->path), &st,
		    AT_SYMLINK_NOFOLLOW) == -1) {
			kh_destroy_hls(hardlinks);
modified libpkg/pkg_config.c
@@ -491,6 +491,18 @@ static struct config_entry c[] = {
		"FALSE",
		"Accept legacy package extensions when creating the repository",
	},
+
	{
+
		PKG_ARRAY,
+
		"FILES_IGNORE_GLOB",
+
		"NULL",
+
		"patterns of files to not extract from the package",
+
	},
+
	{
+
		PKG_ARRAY,
+
		"FILES_IGNORE_REGEX",
+
		"NULL",
+
		"patterns of files to not extract from the package",
+
	},
};

static bool parsed = false;
modified libpkg/pkgdb.c
@@ -1817,6 +1817,12 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int forced,

	while (pkg_files(pkg, &file) == EPKG_OK) {
		bool		permissive = false;
+
		if (match_ucl_lists(file->path,
+
		    pkg_config_get("FILES_IGNORE_GLOB"),
+
		    pkg_config_get("FILES_IGNORE_REGEX"))) {
+
			continue;
+
			printf("matched\n");
+
		}

		ret = run_prstmt(FILES, file->path, file->sum, package_id);
		if (ret == SQLITE_DONE)