Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
add -O option to pkg register, this register the package in the old format
Baptiste Daroussin committed 13 years ago
commit a981f5a3190d3318de508ba8881a63f796bd47a1
parent 1c89977
3 files changed +152 -25
modified libpkg/pkg.h.in
@@ -1217,4 +1217,5 @@ int pkg_old_load_from_path(struct pkg *pkg, const char *path);
int pkg_old_emit_content(struct pkg *pkg, char **dest);
int pkg_from_old(struct pkg *pkg);
int pkg_to_old(struct pkg *pkg);
+
int pkg_register_old(struct pkg *pkg);
#endif
modified libpkg/pkg_old.c
@@ -208,3 +208,123 @@ pkg_from_old(struct pkg *p)

	return (EPKG_OK);
}
+

+
int
+
pkg_register_old(struct pkg *pkg)
+
{
+
	FILE *fp;
+
	char *name, *version, *content, *buf;
+
	const char *pkgdbdir, *tmp;
+
	char path[MAXPATHLEN];
+
	struct sbuf *install_script = sbuf_new_auto();
+
	struct sbuf *deinstall_script = sbuf_new_auto();
+

+
	pkg_to_old(pkg);
+
	pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version);
+
	pkg_old_emit_content(pkg, &content);
+

+
	pkg_config_string(PKG_CONFIG_DBDIR, &pkgdbdir);
+
	snprintf(path, MAXPATHLEN, "%s/%s-%s", pkgdbdir, name, version);
+
	mkdir(path, 0755);
+

+
	snprintf(path, MAXPATHLEN, "%s/%s-%s/+CONTENTS", pkgdbdir, name, version);
+
	fp = fopen(path, "w");
+
	fputs(content, fp);
+
	fclose(fp);
+

+
	pkg_get(pkg, PKG_DESC, &buf);
+
	snprintf(path, MAXPATHLEN, "%s/%s-%s/+DESC", pkgdbdir, name, version);
+
	fp = fopen(path, "w");
+
	fputs(buf, fp);
+
	fclose(fp);
+

+
	pkg_get(pkg, PKG_COMMENT, &buf);
+
	snprintf(path, MAXPATHLEN, "%s/%s-%s/+COMMENT", pkgdbdir, name, version);
+
	fp = fopen(path, "w");
+
	fprintf(fp, "%s\n", buf);
+
	fclose(fp);
+

+
	pkg_get(pkg, PKG_MESSAGE, &buf);
+
	if (buf != NULL && *buf != '\0') {
+
		snprintf(path, MAXPATHLEN, "%s/%s-%s/+DISPLAY", pkgdbdir, name, version);
+
		fp = fopen(path, "w");
+
		fputs(buf, fp);
+
		fclose(fp);
+
	}
+

+
	sbuf_clear(install_script);
+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_PRE_INSTALL);
+
	if (tmp != NULL && *tmp != '\0') {
+
		if (sbuf_len(install_script) == 0)
+
			sbuf_cat(install_script, "#!/bin/sh\n\n");
+
		sbuf_printf(install_script,
+
		    "if [ \"$2\" = \"PRE-INSTALL\" ]; then\n"
+
		    "%s\n"
+
		    "fi\n",
+
		    tmp);
+
	}
+

+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_INSTALL);
+
	if (tmp != NULL && *tmp != '\0') {
+
		if (sbuf_len(install_script) == 0)
+
			sbuf_cat(install_script, "#!/bin/sh\n\n");
+
		sbuf_cat(install_script, tmp);
+
	}
+

+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_POST_INSTALL);
+
	if (tmp != NULL && *tmp != '\0') {
+
		if (sbuf_len(install_script) == 0)
+
			sbuf_cat(install_script, "#!/bin/sh\n\n");
+
		sbuf_printf(install_script,
+
		    "if [ \"$2\" = \"POST-INSTALL\" ]; then\n"
+
		    "%s\n"
+
		    "fi\n",
+
		    tmp);
+
	}
+
	if (sbuf_len(install_script) > 0) {
+
		sbuf_finish(install_script);
+
		snprintf(path, MAXPATHLEN, "%s/%s-%s/+INSTALL", pkgdbdir, name, version);
+
		fp = fopen(path, "w");
+
		fputs(sbuf_data(install_script), fp);
+
		fclose(fp);
+
	}
+

+
	sbuf_clear(deinstall_script);
+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_PRE_DEINSTALL);
+
	if (tmp != NULL && *tmp != '\0') {
+
		if (sbuf_len(deinstall_script) == 0)
+
			sbuf_cat(deinstall_script, "#!/bin/sh\n\n");
+
		sbuf_printf(deinstall_script,
+
		    "if [ \"$2\" = \"DEINSTALL\" ]; then\n"
+
		    "%s\n"
+
		    "fi\n",
+
		    tmp);
+
	}
+

+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_DEINSTALL);
+
	if (tmp != NULL && *tmp != '\0') {
+
		if (sbuf_len(deinstall_script) == 0)
+
			sbuf_cat(deinstall_script, "#!/bin/sh\n\n");
+
		sbuf_cat(deinstall_script, tmp);
+
	}
+

+
	tmp = pkg_script_get(pkg, PKG_SCRIPT_POST_DEINSTALL);
+
	if (tmp != NULL && tmp[0] != '\0') {
+
		if (sbuf_len(deinstall_script) == 0)
+
			sbuf_cat(deinstall_script, "#!/bin/sh\n\n");
+
		sbuf_printf(deinstall_script,
+
		    "if [ \"$2\" = \"POST-DEINSTALL\" ]; then\n"
+
		    "%s\n"
+
		    "fi\n",
+
		    tmp);
+
	}
+
	if (sbuf_len(deinstall_script) > 0) {
+
		sbuf_finish(deinstall_script);
+
		snprintf(path, MAXPATHLEN, "%s/%s-%s/+DEINSTALL", pkgdbdir, name, version);
+
		fp = fopen(path, "w");
+
		fputs(sbuf_data(deinstall_script), fp);
+
		fclose(fp);
+
	}
+

+
	return (EPKG_OK);
+
}
modified pkg/register.c
@@ -66,7 +66,7 @@ static const char * const scripts[] = {
void
usage_register(void)
{
-
	fprintf(stderr, "usage: pkg register [-ld] [-i <input-path>]"
+
	fprintf(stderr, "usage: pkg register [-Old] [-i <input-path>]"
	                " -m <metadatadir> -f <plist-file>\n\n");
	fprintf(stderr, "For more information see 'pkg help register'.\n");
}
@@ -95,26 +95,16 @@ exec_register(int argc, char **argv)

	bool legacy = false;
	bool developer = false;
+
	bool old = false;

	int i;
	int ret = EPKG_OK, retcode;

-
	retcode = pkgdb_access(PKGDB_MODE_READ  |
-
			       PKGDB_MODE_WRITE |
-
			       PKGDB_MODE_CREATE,
-
			       PKGDB_DB_LOCAL);
-
	if (retcode == EPKG_ENOACCESS) {
-
		warnx("Insufficient privilege to register packages");
-
		return (EX_NOPERM);
-
	} else if (retcode != EPKG_OK)
-
		return (EX_IOERR);
-
	else
-
		retcode = EX_OK;

	pkg_config_bool(PKG_CONFIG_DEVELOPER_MODE, &developer);

	pkg_new(&pkg, PKG_INSTALLED);
-
	while ((ch = getopt(argc, argv, "f:m:i:ld")) != -1) {
+
	while ((ch = getopt(argc, argv, "f:m:i:ldO")) != -1) {
		switch (ch) {
		case 'f':
			if ((plist = strdup(optarg)) == NULL)
@@ -135,6 +125,9 @@ exec_register(int argc, char **argv)
		case 'l':
			legacy = true;
			break;
+
		case 'O':
+
			old = true;
+
			break;
		default:
			printf("%c\n", ch);
			usage_register();
@@ -142,6 +135,20 @@ exec_register(int argc, char **argv)
		}
	}

+
	if (!old) {
+
		retcode = pkgdb_access(PKGDB_MODE_READ  |
+
				       PKGDB_MODE_WRITE |
+
				       PKGDB_MODE_CREATE,
+
				       PKGDB_DB_LOCAL);
+
		if (retcode == EPKG_ENOACCESS) {
+
			warnx("Insufficient privilege to register packages");
+
			return (EX_NOPERM);
+
		} else if (retcode != EPKG_OK)
+
			return (EX_IOERR);
+
		else
+
			retcode = EX_OK;
+
	}
+

	if (plist == NULL)
		errx(EX_USAGE, "missing -f flag");

@@ -196,12 +203,9 @@ exec_register(int argc, char **argv)

	free(plist);

-
#ifndef PKG_COMPAT
-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
+
	if (!old && pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		return (EX_IOERR);
	}
-
#else
-
#endif

	pkg_analyse_files(db, pkg);

@@ -225,19 +229,21 @@ exec_register(int argc, char **argv)
		free(input_path);
	}

-
#ifndef PKG_COMPAT
-
	if (pkgdb_register_ports(db, pkg) != EPKG_OK)
-
		retcode = EX_SOFTWARE;
-
#else
-
#endif
+
	if (old) {
+
		if (pkg_register_old(pkg) != EPKG_OK)
+
			retcode = EX_SOFTWARE;
+
	} else {
+
		if (pkgdb_register_ports(db, pkg) != EPKG_OK)
+
			retcode = EX_SOFTWARE;
+
	}

	pkg_get(pkg, PKG_MESSAGE, &message);
	if (message != NULL && !legacy)
		printf("%s\n", message);

-
#ifndef PKG_COMPAT
-
	pkgdb_close(db);
-
#endif
+
	if (!old)
+
		pkgdb_close(db);
+

	pkg_free(pkg);

	return (retcode);