diff options
Diffstat (limited to 'src/app_del.c')
-rw-r--r-- | src/app_del.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/app_del.c b/src/app_del.c index 1df4cc9..2a09ca6 100644 --- a/src/app_del.c +++ b/src/app_del.c @@ -87,13 +87,15 @@ static void print_not_deleted_pkg(struct apk_package *pkg0, struct apk_dependenc } } -static void print_not_deleted_name(struct apk_database *db, const char *match, - struct apk_name *name, void *pctx) +static int print_not_deleted_name(struct apk_database *db, const char *match, + struct apk_name *name, void *pctx) { struct apk_out *out = &db->ctx->out; struct not_deleted_ctx *ctx = (struct not_deleted_ctx *) pctx; struct apk_provider *p; + if (!name) return 0; + ctx->name = name; ctx->matches = apk_foreach_genid() | APK_FOREACH_MARKED | APK_DEP_SATISFIES; apk_print_indented_init(&ctx->indent, out, 0); @@ -101,6 +103,7 @@ static void print_not_deleted_name(struct apk_database *db, const char *match, if (p->pkg->marked) print_not_deleted_pkg(p->pkg, NULL, NULL, ctx); apk_print_indented_end(&ctx->indent); + return 0; } static void delete_pkg(struct apk_package *pkg0, struct apk_dependency *dep0, @@ -115,7 +118,7 @@ static void delete_pkg(struct apk_package *pkg0, struct apk_dependency *dep0, delete_pkg, pctx); } -static void delete_name(struct apk_database *db, const char *match, +static int delete_name(struct apk_database *db, const char *match, struct apk_name *name, void *pctx) { struct apk_out *out = &db->ctx->out; @@ -125,7 +128,7 @@ static void delete_name(struct apk_database *db, const char *match, if (!name) { apk_err(out, "No such package: %s", match); ctx->errors++; - return; + return 0; } pkg = apk_pkg_get_installed(name); @@ -133,6 +136,7 @@ static void delete_name(struct apk_database *db, const char *match, delete_pkg(pkg, NULL, NULL, pctx); else apk_deps_del(&ctx->world, name); + return 0; } static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *args) @@ -146,7 +150,7 @@ static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *arg int r = 0; apk_dependency_array_copy(&ctx->world, db->world); - apk_name_foreach_matching(db, args, apk_foreach_genid(), delete_name, ctx); + if (args->num) apk_db_foreach_matching_name(db, args, delete_name, ctx); if (ctx->errors) return ctx->errors; r = apk_solver_solve(db, 0, ctx->world, &changeset); @@ -157,10 +161,8 @@ static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *arg change->new_pkg->marked = 1; foreach_array_item(d, ctx->world) d->name->state_int = 1; - apk_name_foreach_matching( - db, args, - apk_foreach_genid() | APK_FOREACH_MARKED | APK_DEP_SATISFIES, - print_not_deleted_name, &ndctx); + if (args->num) + apk_db_foreach_sorted_name(db, args, print_not_deleted_name, &ndctx); if (ndctx.header) printf("\n"); |