diff options
author | Timo Teräs <timo.teras@iki.fi> | 2010-12-09 11:10:12 +0200 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2010-12-09 11:10:12 +0200 |
commit | 6e89c1d5b7a02cd691117e6989bba9097dc6e9b5 (patch) | |
tree | a93c2bfd949bd7aad4df877e7d919eb37e65fd18 /src | |
parent | d92df520790dffbc114cd17c4cd1d45a09c118f9 (diff) | |
download | apk-tools-6e89c1d5b7a02cd691117e6989bba9097dc6e9b5.tar.gz apk-tools-6e89c1d5b7a02cd691117e6989bba9097dc6e9b5.tar.bz2 apk-tools-6e89c1d5b7a02cd691117e6989bba9097dc6e9b5.tar.xz apk-tools-6e89c1d5b7a02cd691117e6989bba9097dc6e9b5.zip |
db: print full url/filename of the failing package
.. instead of the pkgname-pkgver string.
Diffstat (limited to 'src')
-rw-r--r-- | src/database.c | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/database.c b/src/database.c index e22289a..5edc604 100644 --- a/src/database.c +++ b/src/database.c @@ -1397,11 +1397,14 @@ static int apk_repo_is_remote(struct apk_repository *repo) } static struct apk_bstream *apk_repo_file_open(struct apk_repository *repo, - const char *file) + const char *file, + char *buf, int buflen) { - char tmp[256]; const char *url = repo->url; + snprintf(buf, buflen, "%s%s%s", + url, url[strlen(url)-1] == '/' ? "" : "/", file); + if ((apk_flags & APK_NO_NETWORK) && apk_repo_is_remote(repo)) return NULL; @@ -1409,10 +1412,7 @@ static struct apk_bstream *apk_repo_file_open(struct apk_repository *repo, if (strcmp(repo->url, "cache") == 0) return NULL; - snprintf(tmp, sizeof(tmp), "%s%s%s", - url, url[strlen(url)-1] == '/' ? "" : "/", file); - - return apk_bstream_from_url(tmp); + return apk_bstream_from_url(buf); } struct apk_repository *apk_db_select_repo(struct apk_database *db, @@ -1553,6 +1553,7 @@ int apk_db_add_repository(apk_database_t _db, apk_blob_t repository) struct apk_bstream *bs = NULL; struct apk_repository *repo; int r, targz = 1; + char buf[PATH_MAX]; if (repository.ptr == NULL || repository.len == 0 || *repository.ptr == '#') @@ -1569,26 +1570,24 @@ int apk_db_add_repository(apk_database_t _db, apk_blob_t repository) }; if (apk_url_local_file(repo->url) == NULL) { - char cacheitem[PATH_MAX]; - apk_blob_checksum(repository, apk_checksum_default(), &repo->csum); if (apk_flags & APK_UPDATE_CACHE) apk_repository_update(db, repo); - apk_cache_format_index(APK_BLOB_BUF(cacheitem), repo, 0); - bs = apk_bstream_from_file(db->cache_fd, cacheitem); + apk_cache_format_index(APK_BLOB_BUF(buf), repo, 0); + bs = apk_bstream_from_file(db->cache_fd, buf); if (bs == NULL) { - apk_cache_format_index(APK_BLOB_BUF(cacheitem), repo, 1); - bs = apk_bstream_from_file(db->cache_fd, cacheitem); + apk_cache_format_index(APK_BLOB_BUF(buf), repo, 1); + bs = apk_bstream_from_file(db->cache_fd, buf); targz = 0; } } else { db->local_repos |= BIT(r); - bs = apk_repo_file_open(repo, apkindex_tar_gz); + bs = apk_repo_file_open(repo, apkindex_tar_gz, buf, sizeof(buf)); if (bs == NULL) { - bs = apk_repo_file_open(repo, apk_index_gz); + bs = apk_repo_file_open(repo, apk_index_gz, buf, sizeof(buf)); targz = 0; } } @@ -1994,7 +1993,7 @@ static int apk_db_unpack_pkg(struct apk_database *db, struct apk_bstream *bs = NULL; struct apk_istream *tar; struct apk_package *pkg = ipkg->pkg; - char file[PATH_MAX]; + char file[PATH_MAX], item[128]; int r, need_copy = FALSE; if (pkg->filename == NULL) { @@ -2013,26 +2012,32 @@ static int apk_db_unpack_pkg(struct apk_database *db, } if (bs == NULL) { - apk_pkg_format_plain(pkg, APK_BLOB_BUF(file)); - bs = apk_repo_file_open(repo, file); + apk_pkg_format_plain(pkg, APK_BLOB_BUF(item)); + bs = apk_repo_file_open(repo, item, file, sizeof(file)); if (apk_repo_is_remote(repo)) need_copy = TRUE; } } else { bs = apk_bstream_from_file(AT_FDCWD, pkg->filename); + strncpy(file, pkg->filename, sizeof(file)); need_copy = TRUE; } if (!apk_db_cache_active(db)) need_copy = FALSE; - if (need_copy) { - apk_pkg_format_cache(pkg, APK_BLOB_BUF(file)); - bs = apk_bstream_tee(bs, db->cachetmp_fd, file); - } if (bs == NULL) { apk_error("%s: %s", file, strerror(errno)); return errno; } + if (need_copy) { + apk_pkg_format_cache(pkg, APK_BLOB_BUF(item)); + bs = apk_bstream_tee(bs, db->cachetmp_fd, item); + if (bs == NULL) { + apk_error("Unable to cache %s: %s", + file, strerror(errno)); + return errno; + } + } ctx = (struct install_ctx) { .db = db, @@ -2060,9 +2065,7 @@ static int apk_db_unpack_pkg(struct apk_database *db, } if (r != 0) { - apk_error("%s-%s: %s", - pkg->name->name, pkg->version, - apk_error_str(r)); + apk_error("%s: %s", file, apk_error_str(r)); goto err; } r = apk_db_run_pending_script(&ctx); |