Date: Sun, 8 Sep 2013 13:01:03 GMT From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257122 - in soc2013/mattbw/backend: . jobs Message-ID: <201309081301.r88D13ig000677@socsvn.freebsd.org>
index | next in thread | raw e-mail
Author: mattbw Date: Sun Sep 8 13:01:03 2013 New Revision: 257122 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257122 Log: Fix breakage with valid repos being deemed invalid. Modified: soc2013/mattbw/backend/jobs/core.c soc2013/mattbw/backend/jobs/core.h soc2013/mattbw/backend/jobs/do.c soc2013/mattbw/backend/repo.c soc2013/mattbw/backend/repo.h Modified: soc2013/mattbw/backend/jobs/core.c ============================================================================== --- soc2013/mattbw/backend/jobs/core.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/core.c Sun Sep 8 13:01:03 2013 (r257122) @@ -85,27 +85,31 @@ return (err == EPKG_OK); } -bool +enum repo_set_status jobs_set_repo(struct pkg_jobs *jobs, const char *reponame) { - bool success; + enum repo_set_status status; enum repo_type type; assert(jobs != NULL); - success = true; - type = repo_type(reponame); if (type == REPO_INVALID) { - success = false; + status = REPO_SET_INVALID_REPO; + } else if (type == REPO_INVALID) { + status = REPO_SET_DISABLED_REPO; } else if (type == REPO_REMOTE) { int err; err = pkg_jobs_set_repository(jobs, pkg_repo_ident_from_name(reponame)); - success = (err == EPKG_OK); + status = (err == EPKG_OK) ? REPO_SET_OK : REPO_SET_FAILURE; + } else { + /* Ignore any other type of repository. */ + status = REPO_SET_OK; } - return success; + + return status; } /* @@ -136,6 +140,34 @@ return namevers; } +/* Converts a repo-set result to a string constant. */ +const char * +jobs_repo_set_status_to_string(enum repo_set_status status) +{ + const char *detail; + +#ifndef __clang__ + detail = "Detail message not set." +#endif + + switch (status) { + case REPO_SET_OK: + detail = "This shouldn't happen."; + break; + case REPO_SET_INVALID_REPO: + detail = "This repo doesn't seem to exist."; + break; + case REPO_SET_DISABLED_REPO: + detail = "This repo is disabled."; + break; + case REPO_SET_FAILURE: + detail = "Error while setting repo."; + break; + } + + return detail; +} + /* Emits each package queued up in a (solved) job. */ void jobs_emit_packages(struct pkg_jobs *jobs, PkBackend *backend, Modified: soc2013/mattbw/backend/jobs/core.h ============================================================================== --- soc2013/mattbw/backend/jobs/core.h Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/core.h Sun Sep 8 13:01:03 2013 (r257122) @@ -24,11 +24,19 @@ #include <stdbool.h> /* bool */ #include "../pk-backend.h" /* PkBackend */ +enum repo_set_status { + REPO_SET_OK, + REPO_SET_INVALID_REPO, + REPO_SET_DISABLED_REPO, + REPO_SET_FAILURE +}; + typedef PkInfoEnum(*pkg_info_ptr) (struct pkg *pkg); bool jobs_apply(struct pkg_jobs *jobs, PkBackend *backend, PkErrorEnum jobs_failed); -bool jobs_set_repo(struct pkg_jobs *jobs, const char *reponame); +enum repo_set_status jobs_set_repo(struct pkg_jobs *jobs, const char *reponame); char **jobs_add_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count); +const char *jobs_repo_set_status_to_string(enum repo_set_status status); struct pkg_jobs *jobs_allocate(pkg_jobs_t type, struct pkgdb *db); void jobs_emit_packages(struct pkg_jobs *jobs, PkBackend *backend, pkg_info_ptr info); void jobs_free (struct pkg_jobs **jobs_p); Modified: soc2013/mattbw/backend/jobs/do.c ============================================================================== --- soc2013/mattbw/backend/jobs/do.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/jobs/do.c Sun Sep 8 13:01:03 2013 (r257122) @@ -248,18 +248,23 @@ const char *reponame) { bool success; + enum repo_set_status status; assert(spec != NULL); assert(jobs != NULL); /* reponame can be NULL */ - success = jobs_set_repo(jobs, reponame); + status = jobs_set_repo(jobs, reponame); + success = (status == REPO_SET_OK); if (!success) { char *err_message; + const char *detail; + + detail = jobs_repo_set_status_to_string(status); (void)asprintf(&err_message, - "Could not set job repository to '%s'.", - reponame); + "Could not set job repository to '%s': %s", + reponame, detail); ERR(spec->backend, PK_ERROR_ENUM_REPO_NOT_FOUND, err_message); Modified: soc2013/mattbw/backend/repo.c ============================================================================== --- soc2013/mattbw/backend/repo.c Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/repo.c Sun Sep 8 13:01:03 2013 (r257122) @@ -45,9 +45,15 @@ type = repo_type_no_remote_check(name); - if (type == REPO_REMOTE && - (pkg_repo_find_ident(pkg_repo_ident_from_name(name)) != NULL)) { - type = REPO_INVALID; + if (type == REPO_REMOTE) { + struct pkg_repo *repo; + repo = pkg_repo_find_name(name); + + if (repo == NULL) { + type = REPO_INVALID; + } else if (!pkg_repo_enabled(repo)) { + type = REPO_DISABLED; + } } return type; } Modified: soc2013/mattbw/backend/repo.h ============================================================================== --- soc2013/mattbw/backend/repo.h Sun Sep 8 12:30:30 2013 (r257121) +++ soc2013/mattbw/backend/repo.h Sun Sep 8 13:01:03 2013 (r257122) @@ -27,7 +27,8 @@ REPO_INVALID, REPO_ANY, REPO_LOCAL, - REPO_REMOTE + REPO_REMOTE, + REPO_DISABLED }; enum repo_type repo_type(const char *name);help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309081301.r88D13ig000677>
