Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
create: allow to create a package with readable +MANIFEST
Baptiste Daroussin committed 5 years ago
commit 7a5549848b2fcd03a76b7609b707f931b821d790
parent f27396b
5 files changed +37 -14
modified docs/pkg-create.8
@@ -24,7 +24,7 @@
.\" ---------------------------------------------------------------------------
.Sh SYNOPSIS
.Nm
-
.Op Fl nqv
+
.Op Fl enqv
.Op Fl f Ar format
.Op Fl l Ar level
.Op Fl o Ar outdir
@@ -33,7 +33,7 @@
.Op Fl t Ar timestamp
.Fl m Ar metadatadir
.Nm
-
.Op Fl nqv
+
.Op Fl enqv
.Op Fl f Ar format
.Op Fl l Ar level
.Op Fl o Ar outdir
@@ -41,7 +41,7 @@
.Op Fl t Ar timestamp
.Fl M Ar manifest
.Nm
-
.Op Fl gnqvx
+
.Op Fl egnqvx
.Op Fl f Ar format
.Op Fl l Ar level
.Op Fl o Ar outdir
@@ -49,7 +49,7 @@
.Op Fl t Ar timestamp
.Ar pkg-name ...
.Nm
-
.Op Fl nqv
+
.Op Fl enqv
.Op Fl f Ar format
.Op Fl l Ar level
.Op Fl o Ar outdir
@@ -59,6 +59,7 @@
.\" ---------------------------------------------------------------------------
.Pp
.Nm
+
.Op Cm --expand-manifest
.Op Cm --no-clobber
.Op Cm --quiet
.Op Cm --verbose
@@ -69,6 +70,7 @@
.Op Cm --root-dir Ar rootdir
.Cm --metadata Ar metadatadir
.Nm
+
.Op Cm --expand-manifest
.Op Cm --no-clobber
.Op Cm --quiet
.Op Cm --verbose
@@ -78,6 +80,7 @@
.Op Cm --root-dir Ar rootdir
.Cm --manifest Ar manifest
.Nm
+
.Op Cm --expand-manifest
.Op Cm --{glob,no-clobber,regex}
.Op Cm --quiet
.Op Cm --verbose
@@ -87,6 +90,7 @@
.Op Cm --root-dir Ar rootdir
.Ar pkg-name ...
.Nm
+
.Op Cm --expand-manifest
.Op Cm --no-clobber
.Op Cm --quiet
.Op Cm --verbose
@@ -129,6 +133,8 @@ The following options are supported by
.It Fl a , Cm --all
Create package tarballs from all packages installed on your system.
This option is incompatible with the
+
.It Fl e, Cm --expand-manifest
+
The manifest contained in pkg will be expanded to readable UCL format.
.Fl g , x
or
.Fl m Ar metadatadir
modified libpkg/pkg.h.in
@@ -1652,6 +1652,7 @@ void pkg_create_set_overwrite(struct pkg_create *, bool);
void pkg_create_set_rootdir(struct pkg_create *, const char *);
void pkg_create_set_output_dir(struct pkg_create *, const char *);
void pkg_create_set_timestamp(struct pkg_create *, time_t);
+
void pkg_create_set_expand_manifest(struct pkg_create *, bool);
int pkg_create(struct pkg_create *, const char *, const char *, bool);
int pkg_create_i(struct pkg_create *, struct pkg *, bool);
/* deprecated */
modified libpkg/pkg_create.c
@@ -43,7 +43,6 @@

static int load_metadata(struct pkg *pkg, const char *metadata, const char *plist,
    const char *rootdir);
-
static int pkg_create_from_dir(struct pkg *, const char *, struct packing *);
static void fixup_abi(struct pkg *pkg, const char *rootdir, bool testing);
static void counter_init(const char *what, int64_t max);
static void counter_count(void);
@@ -53,7 +52,7 @@ extern struct pkg_ctx ctx;

static int
pkg_create_from_dir(struct pkg *pkg, const char *root,
-
    struct packing *pkg_archive)
+
    struct pkg_create *pc, struct packing *pkg_archive)
{
	char		 fpath[MAXPATHLEN];
	struct pkg_file	*file = NULL;
@@ -137,7 +136,10 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,
	fflush(b->fp);
	packing_append_buffer(pkg_archive, b->buf, "+COMPACT_MANIFEST", strlen(b->buf));
	xstring_reset(b);
-
	pkg_emit_manifest_buf(pkg, b, 0, NULL);
+
	if (pc->expand_manifest)
+
		pkg_emit_manifest_buf(pkg, b, PKG_MANIFEST_EMIT_UCL, NULL);
+
	else
+
		pkg_emit_manifest_buf(pkg, b, 0, NULL);
	fflush(b->fp);
	packing_append_buffer(pkg_archive, b->buf, "+MANIFEST", strlen(b->buf));
	xstring_free(b);
@@ -241,6 +243,7 @@ pkg_create_new(void)
	pc->format = TXZ;
	pc->timestamp = (time_t) -1;
	pc->overwrite = true;
+
	pc->expand_manifest = false;

	return (pc);
}
@@ -276,6 +279,12 @@ pkg_create_set_compression_level(struct pkg_create *pc, int clevel)
}

void
+
pkg_create_set_expand_manifest(struct pkg_create *pc, bool expand)
+
{
+
	pc->expand_manifest = expand;
+
}
+

+
void
pkg_create_set_rootdir(struct pkg_create *pc, const char *rootdir)
{
	pc->rootdir = rootdir;
@@ -347,7 +356,7 @@ pkg_create_i(struct pkg_create *pc, struct pkg *pkg, bool hash)
		return (EPKG_FATAL);
	}

-
	if ((ret = pkg_create_from_dir(pkg, NULL, pkg_archive)) != EPKG_OK) {
+
	if ((ret = pkg_create_from_dir(pkg, NULL, pc, pkg_archive)) != EPKG_OK) {
		pkg_emit_error("package creation failed");
	}
	packing_finish(pkg_archive);
@@ -389,7 +398,7 @@ pkg_create(struct pkg_create *pc, const char *metadata, const char *plist,
		return (EPKG_FATAL);
	}

-
	if ((ret = pkg_create_from_dir(pkg, pc->rootdir, pkg_archive)) != EPKG_OK)
+
	if ((ret = pkg_create_from_dir(pkg, pc->rootdir, pc, pkg_archive)) != EPKG_OK)
		pkg_emit_error("package creation failed");

	packing_finish(pkg_archive);
modified libpkg/private/pkg.h
@@ -364,6 +364,7 @@ struct trigger {

struct pkg_create {
	bool overwrite;
+
	bool expand_manifest;
	int compression_level;
	pkg_formats format;
	time_t timestamp;
modified src/create.c
@@ -62,13 +62,13 @@ struct pkg_entry *pkg_head = NULL;
void
usage_create(void)
{
-
	fprintf(stderr, "Usage: pkg create [-Ohnqv] [-f format] [-l level] "
+
	fprintf(stderr, "Usage: pkg create [-eOhnqv] [-f format] [-l level] "
		"[-o outdir] [-p plist] [-r rootdir] -m metadatadir\n");
-
	fprintf(stderr, "Usage: pkg create [-Ohnqv] [-f format] [-l level] "
+
	fprintf(stderr, "Usage: pkg create [-eOhnqv] [-f format] [-l level] "
		"[-o outdir] [-r rootdir] -M manifest\n");
-
	fprintf(stderr, "       pkg create [-Ohgnqvx] [-f format] [-l level] "
+
	fprintf(stderr, "       pkg create [-eOhgnqvx] [-f format] [-l level] "
		"[-o outdir] [-r rootdir] pkg-name ...\n");
-
	fprintf(stderr, "       pkg create [-Ohnqv] [-f format] [-l level] "
+
	fprintf(stderr, "       pkg create [-eOhnqv] [-f format] [-l level] "
		"[-o outdir] [-r rootdir] -a\n\n");
	fprintf(stderr, "For more information see 'pkg help create'.\n");
}
@@ -181,6 +181,7 @@ exec_create(int argc, char **argv)
	int		 ret;
	bool		 hash = false;
	bool		 overwrite = true;
+
	bool		 expand_manifest = false;
	time_t		 ts = (time_t)-1;

	/* Sentinel values: INT_MIN (fast), 0 (default), INT_MAX (best). */
@@ -194,6 +195,7 @@ exec_create(int argc, char **argv)

	struct option longopts[] = {
		{ "all",	no_argument,		NULL,	'a' },
+
		{ "expand-manifest",	no_argument,	NULL,	'e' },
		{ "format",	required_argument,	NULL,	'f' },
		{ "glob",	no_argument,		NULL,	'g' },
		{ "hash",	no_argument,		NULL,	'h' },
@@ -211,11 +213,14 @@ exec_create(int argc, char **argv)
		{ NULL,		0,			NULL,	0   },
	};

-
	while ((ch = getopt_long(argc, argv, "+aghxf:l:r:m:M:no:p:qvt:", longopts, NULL)) != -1) {
+
	while ((ch = getopt_long(argc, argv, "+aeghxf:l:r:m:M:no:p:qvt:", longopts, NULL)) != -1) {
		switch (ch) {
		case 'a':
			match = MATCH_ALL;
			break;
+
		case 'e':
+
			expand_manifest = true;
+
			break;
		case 'f':
			format = optarg;
			break;
@@ -312,6 +317,7 @@ exec_create(int argc, char **argv)
	pkg_create_set_overwrite(pc, overwrite);
	pkg_create_set_rootdir(pc, rootdir);
	pkg_create_set_output_dir(pc, outdir);
+
	pkg_create_set_expand_manifest(pc, expand_manifest);
	if (ts != (time_t)-1)
		pkg_create_set_timestamp(pc, ts);