Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Use unified function to detect cached package name
Vsevolod Stakhov committed 12 years ago
commit f638f3729e1fb104997bb02792bf12fd5b603b37
parent e9bf105
4 files changed +42 -26
modified libpkg/pkg.h.in
@@ -1327,6 +1327,11 @@ pkg_change_t pkg_version_change_between(const struct pkg * pkg1, const struct pk
 */
int pkg_fetch_file(struct pkg_repo *repo, const char *url, char *dest, time_t t);

+
/**
+
 * Get cached name of a package
+
 */
+
void pkg_repo_cached_name(struct pkg *pkg, char *dest, size_t destlen);
+

/* glue to deal with ports */
int ports_parse_plist(struct pkg *, const char *, const char *);

modified libpkg/pkg_jobs.c
@@ -1837,7 +1837,7 @@ pkg_jobs_type(struct pkg_jobs *j)

static int
pkg_jobs_handle_install(struct pkg_solved *ps, struct pkg_jobs *j, bool handle_rc,
-
		const char *cachedir, struct pkg_manifest_key *keys)
+
		struct pkg_manifest_key *keys)
{
	struct pkg *new, *old;
	const char *pkgorigin, *oldversion = NULL;
@@ -1867,8 +1867,7 @@ pkg_jobs_handle_install(struct pkg_solved *ps, struct pkg_jobs *j, bool handle_r
	else {
		pkg_snprintf(path, sizeof(path), "%R", new);
		if (*path != '/')
-
			pkg_snprintf(path, sizeof(path), "%S/%n-%v-%z",
-
					cachedir, new, new, new);
+
			pkg_repo_cached_name(new, path, sizeof(path));
		target = path;
	}

@@ -1922,7 +1921,7 @@ pkg_jobs_execute(struct pkg_jobs *j)
	struct pkg *p = NULL;
	struct pkg_solved *ps;
	struct pkg_manifest_key *keys = NULL;
-
	const char *cachedir = NULL, *name;
+
	const char *name;
	int flags = 0;
	int retcode = EPKG_FATAL;
	bool handle_rc = false;
@@ -1936,7 +1935,6 @@ pkg_jobs_execute(struct pkg_jobs *j)
	if ((j->flags & PKG_FLAG_NOSCRIPT) == PKG_FLAG_NOSCRIPT)
		flags |= PKG_DELETE_NOSCRIPT;

-
	cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
	handle_rc = pkg_object_bool(pkg_config_get("HANDLE_RC_SCRIPTS"));

	/* XXX: get rid of hardcoded values */
@@ -1978,13 +1976,13 @@ pkg_jobs_execute(struct pkg_jobs *j)
			break;
		case PKG_SOLVED_INSTALL:
			retcode = pkg_jobs_handle_install(ps,
-
					j, handle_rc, cachedir, keys);
+
					j, handle_rc, keys);
			if (retcode != EPKG_OK)
				goto cleanup;
			break;
		case PKG_SOLVED_UPGRADE:
			retcode = pkg_jobs_handle_install(ps,
-
					j, handle_rc, cachedir, keys);
+
					j, handle_rc, keys);
			if (retcode != EPKG_OK)
				goto cleanup;
			break;
@@ -2100,8 +2098,7 @@ pkg_jobs_apply(struct pkg_jobs *j)
				continue;															\
			int64_t pkgsize;														\
			pkg_get(p, PKG_PKGSIZE, &pkgsize);				\
-
			pkg_snprintf(cachedpath, sizeof(cachedpath), "%S/%n-%v-%z", \
-
				cachedir, p, p, p);													\
+
			pkg_repo_cached_name(p, cachedpath, sizeof(cachedpath));				\
			if (stat(cachedpath, &st) == -1)										\
				dlsize += pkgsize;													\
			else																	\
@@ -2180,12 +2177,9 @@ pkg_jobs_check_conflicts(struct pkg_jobs *j)
	struct pkg_solved *ps;
	struct pkg_manifest_key *keys = NULL;
	struct pkg *pkg = NULL, *p = NULL;
-
	const char *cachedir = NULL;
	char path[MAXPATHLEN];
	int ret = EPKG_OK, res, added = 0;

-
	cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
-

	pkg_emit_integritycheck_begin();

	pkg_manifest_keys_new(&keys);
@@ -2198,8 +2192,7 @@ pkg_jobs_check_conflicts(struct pkg_jobs *j)
			if (p->type == PKG_REMOTE) {
				pkg_snprintf(path, sizeof(path), "%R", p);
				if (*path != '/')
-
					pkg_snprintf(path, sizeof(path), "%S/%n-%v-%z",
-
							cachedir, p, p, p);
+
					pkg_repo_cached_name(p, path, sizeof(path));
				if (pkg_open(&pkg, path, keys, 0) != EPKG_OK)
					return (EPKG_FATAL);
				p = pkg;
modified libpkg/pkg_repo.c
@@ -66,6 +66,29 @@ struct sig_cert {
	bool trusted;
};

+
void
+
pkg_repo_cached_name(struct pkg *pkg, char *dest, size_t destlen)
+
{
+
	const char *sum, *name, *version, *reponame, *repourl, *ext = NULL;
+
	const char *cachedir = NULL;
+

+
	cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
+

+
	pkg_get(pkg, PKG_REPONAME, &reponame,
+
			PKG_CKSUM, &sum, PKG_NAME, &name, PKG_VERSION, &version,
+
			PKG_REPOPATH, &repourl);
+

+
	if (repourl != NULL)
+
		ext = strrchr(repourl, '.');
+

+
	if (ext != NULL)
+
		pkg_snprintf(dest, destlen, "%S/%n-%v-%z%S",
+
				cachedir, pkg, pkg, pkg, ext);
+
	else
+
		pkg_snprintf(dest, destlen, "%S/%n-%v-%z",
+
				cachedir, pkg, pkg, pkg);
+
}
+

int
pkg_repo_fetch_package(struct pkg *pkg)
{
@@ -75,20 +98,16 @@ pkg_repo_fetch_package(struct pkg *pkg)
	char cksum[SHA256_DIGEST_LENGTH * 2 +1];
	char *path = NULL;
	const char *packagesite = NULL;
-
	const char *cachedir = NULL;
+

	int retcode = EPKG_OK;
-
	const char *sum, *name, *version, *reponame;
+
	const char *reponame, *name, *version, *sum;
	struct pkg_repo *repo;

	assert((pkg->type & PKG_REMOTE) == PKG_REMOTE);

-
	cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
-

	pkg_get(pkg, PKG_REPONAME, &reponame,
-
	    PKG_CKSUM, &sum, PKG_NAME, &name, PKG_VERSION, &version);
-

-
	pkg_snprintf(dest, sizeof(dest), "%S/%n-%v-%z",
-
			cachedir, pkg, pkg, pkg);
+
			PKG_CKSUM, &sum, PKG_NAME, &name, PKG_VERSION, &version);
+
	pkg_repo_cached_name(pkg, dest, sizeof(dest));

	/* If it is already in the local cachedir, dont bother to
	 * download it */
modified src/utils.c
@@ -591,7 +591,7 @@ set_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
		int64_t *newsize, int64_t *dlsize,
		struct pkg_solved_display_item **disp)
{
-
	const char *oldversion, *cachedir;
+
	const char *oldversion;
	char path[MAXPATHLEN];
	struct stat st;
	int64_t flatsize, oldflatsize, pkgsize;
@@ -600,7 +600,6 @@ set_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
	flatsize = oldflatsize = pkgsize = 0;
	oldversion = NULL;

-
	cachedir = pkg_object_string(pkg_config_get("PKG_CACHEDIR"));
	pkg_get(new_pkg, PKG_FLATSIZE, &flatsize, PKG_PKGSIZE, &pkgsize);
	if (old_pkg != NULL)
		pkg_get(old_pkg, PKG_VERSION, &oldversion, PKG_FLATSIZE, &oldflatsize);
@@ -623,7 +622,7 @@ set_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
	switch (type) {
	case PKG_SOLVED_INSTALL:
	case PKG_SOLVED_UPGRADE:
-
		pkg_snprintf(path, MAXPATHLEN, "%S/%R", cachedir, new_pkg);
+
		pkg_repo_cached_name(new_pkg, path, sizeof(path));

		if (stat(path, &st) == -1 || pkgsize != st.st_size)
			/* file looks corrupted (wrong size),
@@ -668,7 +667,7 @@ set_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
		*dlsize += pkgsize;
		it->display_type = PKG_DISPLAY_FETCH;

-
		pkg_snprintf(path, MAXPATHLEN, "%S/%R", cachedir, new_pkg);
+
		pkg_repo_cached_name(new_pkg, path, sizeof(path));
		if (stat(path, &st) != -1)
			*oldsize = st.st_size;
		else