Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Properly set patch when creating package for a relocated package
Baptiste Daroussin committed 12 years ago
commit 118527104731caaa6bfc5809e454f9a7d6432a95
parent 9933b34
3 files changed +24 -20
modified libpkg/pkg.h.in
@@ -1248,8 +1248,7 @@ typedef enum pkg_formats { TAR, TGZ, TBZ, TXZ } pkg_formats;
/**
 * Create package from an installed & registered package
 */
-
int pkg_create_installed(const char *, pkg_formats, const char *,
-
			 struct pkg *);
+
int pkg_create_installed(const char *, pkg_formats, struct pkg *);

/**
 * Create package from stage install with a metadata directory
modified libpkg/pkg_create.c
@@ -54,11 +54,15 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,
	struct stat	 st;
	char		 sha256[SHA256_DIGEST_LENGTH * 2 + 1];
	int64_t		 flatsize = 0;
+
	ucl_object_t	*obj;

	if (pkg_is_valid(pkg) != EPKG_OK) {
		pkg_emit_error("the package is not valid");
		return (EPKG_FATAL);
	}
+

+
	obj = pkg_annotation_lookup(pkg, "relocated");
+

	/*
	 * Get / compute size / checksum if not provided in the manifest
	 */
@@ -66,10 +70,8 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,
		const char *pkg_path = pkg_file_path(file);
		const char *pkg_sum = pkg_file_cksum(file);

-
		if (root != NULL)
-
			snprintf(fpath, sizeof(fpath), "%s%s", root, pkg_path);
-
		else
-
			strlcpy(fpath, pkg_path, sizeof(fpath));
+
		snprintf(fpath, sizeof(fpath), "%s%s%s", root ? root : "",
+
		    obj ? pkg_object_string(obj) : "", pkg_path);

		if (lstat(fpath, &st) != 0 || S_ISLNK(st.st_mode))
			continue;
@@ -130,10 +132,8 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,
	while (pkg_files(pkg, &file) == EPKG_OK) {
		const char *pkg_path = pkg_file_path(file);

-
		if (root != NULL)
-
			snprintf(fpath, sizeof(fpath), "%s%s", root, pkg_path);
-
		else
-
			strlcpy(fpath, pkg_path, sizeof(fpath));
+
		snprintf(fpath, sizeof(fpath), "%s%s%s", root ? root : "",
+
		    obj ? pkg_object_string(obj) : "", pkg_path);

		ret = packing_append_file_attr(pkg_archive, fpath, pkg_path,
		    file->uname, file->gname, file->perm);
@@ -144,10 +144,9 @@ pkg_create_from_dir(struct pkg *pkg, const char *root,

	while (pkg_dirs(pkg, &dir) == EPKG_OK) {
		const char *pkg_path = pkg_dir_path(dir);
-
		if (root != NULL)
-
			snprintf(fpath, sizeof(fpath), "%s%s", root, pkg_path);
-
		else
-
			strlcpy(fpath, pkg_dir_path(dir), sizeof(fpath));
+

+
		snprintf(fpath, sizeof(fpath), "%s%s%s", root ? root : "",
+
		    obj ? pkg_object_string(obj) : "", pkg_path);

		ret = packing_append_file_attr(pkg_archive, fpath, pkg_path,
		    dir->uname, dir->gname, dir->perm);
@@ -361,10 +360,10 @@ cleanup:
}

int
-
pkg_create_installed(const char *outdir, pkg_formats format,
-
    const char *rootdir, struct pkg *pkg)
+
pkg_create_installed(const char *outdir, pkg_formats format, struct pkg *pkg)
{
	struct packing	*pkg_archive;
+

	unsigned	 required_flags = PKG_LOAD_DEPS | PKG_LOAD_FILES |
		PKG_LOAD_CATEGORIES | PKG_LOAD_DIRS | PKG_LOAD_SCRIPTS |
		PKG_LOAD_OPTIONS | PKG_LOAD_MTREE | PKG_LOAD_LICENSES ;
@@ -377,7 +376,7 @@ pkg_create_installed(const char *outdir, pkg_formats format,
		return (EPKG_FATAL);
	}

-
	pkg_create_from_dir(pkg, rootdir, pkg_archive);
+
	pkg_create_from_dir(pkg, NULL, pkg_archive);

	return packing_finish(pkg_archive);
}
modified src/create.c
@@ -65,7 +65,7 @@ usage_create(void)

static int
pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt,
-
    const char * const outdir, const char * const rootdir, bool overwrite)
+
    const char * const outdir, bool overwrite)
{
	int i, ret = EPKG_OK, retcode = EPKG_OK;
	struct pkg *pkg = NULL;
@@ -154,7 +154,7 @@ pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt,
			}
		}
		pkg_printf("Creating package for %n-%v\n", e->pkg, e->pkg);
-
		if (pkg_create_installed(outdir, fmt, rootdir, e->pkg) !=
+
		if (pkg_create_installed(outdir, fmt, e->pkg) !=
		    EPKG_OK)
			retcode++;
		pkg_free(e->pkg);
@@ -237,6 +237,12 @@ exec_create(int argc, char **argv)
		return (EX_USAGE);
	}

+
	if (manifestdir == NULL && rootdir != NULL) {
+
		warnx("Do not specify a rootdir when creating a package from an installed package");
+
		usage_create();
+
		return (EX_USAGE);
+
	}
+

	if (outdir == NULL)
		outdir = "./";

@@ -266,7 +272,7 @@ exec_create(int argc, char **argv)
			return (EX_SOFTWARE);
		}
		return (pkg_create_matches(argc, argv, match, fmt, outdir,
-
		    rootdir, overwrite) == EPKG_OK ? EX_OK : EX_SOFTWARE);
+
		    overwrite) == EPKG_OK ? EX_OK : EX_SOFTWARE);
	} else {
		return (pkg_create_staged(outdir, fmt, rootdir, manifestdir,
		    plist, old) == EPKG_OK ? EX_OK : EX_SOFTWARE);