Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Use unified function to detect cached package name
Vsevolod Stakhov committed 12 years ago
commit f638f3729e1fb104997bb02792bf12fd5b603b37
parent e9bf1056d93e07a6ef39430b4619acbf7d020024
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