Commit 8c425a1e authored by Timo Teräs's avatar Timo Teräs

dot: new option: --installed

to consider only installed packages
parent d315c901
...@@ -19,8 +19,9 @@ ...@@ -19,8 +19,9 @@
#define S_EVALUATING -2 #define S_EVALUATING -2
struct dot_ctx { struct dot_ctx {
int errors_only; int not_empty : 1;
int not_empty; int errors_only : 1;
int installed_only : 1;
}; };
static int dot_parse(void *pctx, struct apk_db_options *dbopts, static int dot_parse(void *pctx, struct apk_db_options *dbopts,
...@@ -32,6 +33,10 @@ static int dot_parse(void *pctx, struct apk_db_options *dbopts, ...@@ -32,6 +33,10 @@ static int dot_parse(void *pctx, struct apk_db_options *dbopts,
case 0x10000: case 0x10000:
ctx->errors_only = 1; ctx->errors_only = 1;
break; break;
case 0x10001:
ctx->installed_only = 1;
dbopts->open_flags &= ~APK_OPENF_NO_INSTALLED;
break;
default: default:
return -1; return -1;
} }
...@@ -68,6 +73,9 @@ static int dump_pkg(struct dot_ctx *ctx, struct apk_package *pkg) ...@@ -68,6 +73,9 @@ static int dump_pkg(struct dot_ctx *ctx, struct apk_package *pkg)
struct apk_provider *p0; struct apk_provider *p0;
int r, ret = 0; int r, ret = 0;
if (ctx->installed_only && pkg->ipkg == NULL)
return 0;
if (pkg->state_int == S_EVALUATED) if (pkg->state_int == S_EVALUATED)
return 0; return 0;
...@@ -89,6 +97,8 @@ static int dump_pkg(struct dot_ctx *ctx, struct apk_package *pkg) ...@@ -89,6 +97,8 @@ static int dump_pkg(struct dot_ctx *ctx, struct apk_package *pkg)
} }
foreach_array_item(p0, name->providers) { foreach_array_item(p0, name->providers) {
if (ctx->installed_only && p0->pkg->ipkg == NULL)
continue;
if (!apk_dep_is_provided(dep, p0)) if (!apk_dep_is_provided(dep, p0))
continue; continue;
...@@ -148,6 +158,7 @@ static int dot_main(void *pctx, struct apk_database *db, struct apk_string_array ...@@ -148,6 +158,7 @@ static int dot_main(void *pctx, struct apk_database *db, struct apk_string_array
static struct apk_option dot_options[] = { static struct apk_option dot_options[] = {
{ 0x10000, "errors", "Output only parts of the graph which are considered " { 0x10000, "errors", "Output only parts of the graph which are considered "
"errorneus: e.g. cycles and missing packages" }, "errorneus: e.g. cycles and missing packages" },
{ 0x10001, "installed", "Consider only installed packages" },
}; };
static struct apk_applet apk_dot = { static struct apk_applet apk_dot = {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment