Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Implement zstandard format
jrmarino committed 8 years ago
commit 9605c369c451abb8077e8cf515360bd86154a504
parent ea8490c
7 files changed +22 -6
modified docs/pkg-create.8
@@ -148,7 +148,7 @@ Set
.Ar format
as the package output format.
It can be one of
-
.Ar txz , tbz , tgz
+
.Ar zst, txz , tbz , tgz
or
.Ar tar
which are currently the only supported formats.
modified libpkg/packing.c
@@ -315,6 +315,11 @@ packing_set_format(struct archive *a, pkg_formats format)
	const char *notsupp_fmt = "%s is not supported, trying %s";

	switch (format) {
+
	case ZST:
+
		if (archive_write_add_filter_zstd(a) == ARCHIVE_OK)
+
			return ("zst");
+
		else
+
			pkg_emit_error(notsupp_fmt, "zstd", "xz");
	case TXZ:
		if (archive_write_add_filter_xz(a) == ARCHIVE_OK)
			return ("txz");
@@ -350,6 +355,8 @@ packing_format_from_string(const char *str)
		return TGZ;
	if (strcmp(str, "tar") == 0)
		return TAR;
+
	if (strcmp(str, "zst") == 0)
+
		return ZST;
	pkg_emit_error("unknown format %s, using txz", str);
	return TXZ;
}
@@ -372,6 +379,9 @@ packing_format_to_string(pkg_formats format)
	case TAR:
		res = "tar";
		break;
+
	case ZST:
+
		res = "zst";
+
		break;
	}

	return (res);
modified libpkg/pkg.h.in
@@ -1111,7 +1111,7 @@ void pkg_solve_problem_free(struct pkg_solve_problem *problem);
/**
 * Archive formats options.
 */
-
typedef enum pkg_formats { TAR, TGZ, TBZ, TXZ } pkg_formats;
+
typedef enum pkg_formats { TAR, TGZ, TBZ, TXZ, ZST } pkg_formats;

/**
 * Create package from an installed & registered package
modified libpkg/pkg_jobs.c
@@ -192,7 +192,8 @@ pkg_jobs_maybe_match_file(struct job_pattern *jp, const char *pattern)
		 * Compare suffix with .txz or .tbz
		 */
		dot_pos ++;
-
		if (strcmp(dot_pos, "txz") == 0 ||
+
		if (strcmp(dot_pos, "zst") == 0 ||
+
			strcmp(dot_pos, "txz") == 0 ||
			strcmp(dot_pos, "tbz") == 0 ||
			strcmp(dot_pos, "tgz") == 0 ||
			strcmp(dot_pos, "tar") == 0) {
modified libpkg/pkg_repo_meta.c
@@ -97,7 +97,7 @@ pkg_repo_meta_open_schema_v1()
			"version = {type = integer};\n"
			"maintainer = {type = string};\n"
			"source = {type = string};\n"
-
			"packing_format = {enum = [txz, tbz, tgz, tar]};\n"
+
			"packing_format = {enum = [zst, txz, tbz, tgz, tar]};\n"
			"digest_format = {enum = [sha256_base32, sha256_hex, blake2_base32, blake2s_base32]};\n"
			"digests = {type = string};\n"
			"manifests = {type = string};\n"
modified scripts/completion/_pkg.in
@@ -236,7 +236,7 @@ _pkg() {
				'(-q --quiet)'{-q,--quiet}'[force quiet output]' \
				'(-v --verbose)'{-v,--verbose}'[be verbose]' \
				'(-n --no-clobber)'{-n,--no-clobber}'[no not overwrite existing packages]' \
-
				'(-f --format)'{-f,--format}'[format]:format:((tar tgz tbz txz))' \
+
				'(-f --format)'{-f,--format}'[format]:format:((tar tgz tbz txz zst))' \
				'(-o --out-dir)'{-o,--out-dir}'[output directory]:outdir:_files -/' \
				'(-r --root-dir)'{-r,--root-dir}'[specify root directory]:rootdir:_files -/' \
				- '(manifest)' \
modified src/create.c
@@ -116,6 +116,9 @@ pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt,
	case TAR:
		format = "tar";
		break;
+
	case ZST:
+
		format = "zst";
+
		break;
	}

	for (i = 0; i < argc || match == MATCH_ALL; i++) {
@@ -185,7 +188,7 @@ cleanup:
 * -m: path to dir where to find the metadata
 * -q: quiet mode
 * -M: manifest file
-
 * -f <format>: format could be txz, tgz, tbz or tar
+
 * -f <format>: format could be zst, txz, tgz, tbz or tar
 * -o: output directory where to create packages by default ./ is used
 */

@@ -301,6 +304,8 @@ exec_create(int argc, char **argv)
			fmt = TGZ;
		else if (strcmp(format, "tar") == 0)
			fmt = TAR;
+
		else if (strcmp(format, "zst") == 0)
+
			fmt = ZST;
		else {
			warnx("unknown format %s, using txz", format);
			fmt = TXZ;