info: support displaying provides

cute-signatures
Timo Teräs 2012-02-29 08:59:26 +02:00
parent f27f194d92
commit 15adb0475f
1 changed files with 32 additions and 6 deletions

View File

@ -30,12 +30,13 @@ struct info_ctx {
#define APK_INFO_URL 0x02
#define APK_INFO_SIZE 0x04
#define APK_INFO_DEPENDS 0x08
#define APK_INFO_RDEPENDS 0x10
#define APK_INFO_CONTENTS 0x20
#define APK_INFO_TRIGGERS 0x40
#define APK_INFO_INSTALL_IF 0x80
#define APK_INFO_RINSTALL_IF 0x100
#define APK_INFO_REPLACES 0x200
#define APK_INFO_PROVIDES 0x10
#define APK_INFO_RDEPENDS 0x20
#define APK_INFO_CONTENTS 0x40
#define APK_INFO_TRIGGERS 0x80
#define APK_INFO_INSTALL_IF 0x100
#define APK_INFO_RINSTALL_IF 0x200
#define APK_INFO_REPLACES 0x400
static void verbose_print_pkg(struct apk_package *pkg, int minimal_verbosity)
{
@ -189,6 +190,26 @@ static void info_print_depends(struct apk_database *db, struct apk_package *pkg)
}
}
static void info_print_provides(struct apk_database *db, struct apk_package *pkg)
{
apk_blob_t separator = APK_BLOB_STR(apk_verbosity > 1 ? " " : "\n");
char dep[256];
int i;
if (apk_verbosity == 1)
printf(PKG_VER_FMT " provides:\n",
PKG_VER_PRINTF(pkg));
if (apk_verbosity > 1)
printf("%s: ", pkg->name->name);
for (i = 0; i < pkg->provides->num; i++) {
apk_blob_t b = APK_BLOB_BUF(dep);
apk_blob_push_dep(&b, db, &pkg->provides->item[i]);
apk_blob_push_blob(&b, separator);
b = apk_blob_pushed(APK_BLOB_BUF(dep), b);
fwrite(b.ptr, b.len, 1, stdout);
}
}
static void info_print_required_by(struct apk_database *db, struct apk_package *pkg)
{
int i, j;
@ -339,6 +360,7 @@ static void info_subaction(struct info_ctx *ctx, struct apk_package *pkg)
info_print_url,
info_print_size,
info_print_depends,
info_print_provides,
info_print_required_by,
info_print_contents,
info_print_triggers,
@ -402,6 +424,9 @@ static int info_parse(void *ctx, struct apk_db_options *dbopts,
case 'R':
ictx->subaction_mask |= APK_INFO_DEPENDS;
break;
case 'p':
ictx->subaction_mask |= APK_INFO_PROVIDES;
break;
case 'r':
ictx->subaction_mask |= APK_INFO_RDEPENDS;
break;
@ -461,6 +486,7 @@ static struct apk_option info_options[] = {
{ 'e', "installed", "Check if PACKAGE is installed" },
{ 'W', "who-owns", "Print the package owning the specified file" },
{ 'R', "depends", "List packages that the PACKAGE depends on" },
{ 'p', "provides", "List virtual packages provided by PACKAGE" },
{ 'r', "rdepends", "List all packages depending on PACKAGE" },
{ 0x10000, "replaces", "List packages whom files PACKAGE might replace" },
{ 'i', "install-if", "List the PACKAGE's install-if rule" },