policy: new applet
to show different versions of package and the repositories from which it is available from.cute-signatures
parent
98c6b46de6
commit
5725f656b0
|
@ -21,7 +21,7 @@ endif
|
||||||
progs-y += apk
|
progs-y += apk
|
||||||
apk-objs := apk.o add.o del.o fix.o update.o info.o \
|
apk-objs := apk.o add.o del.o fix.o update.o info.o \
|
||||||
search.o upgrade.o cache.o ver.o index.o fetch.o \
|
search.o upgrade.o cache.o ver.o index.o fetch.o \
|
||||||
audit.o verify.o dot.o
|
audit.o verify.o dot.o policy.o
|
||||||
|
|
||||||
libapk.so-objs := common.o database.o package.o archive.o \
|
libapk.so-objs := common.o database.o package.o archive.o \
|
||||||
version.o io.o url.o gunzip.o blob.o hash.o print.o \
|
version.o io.o url.o gunzip.o blob.o hash.o print.o \
|
||||||
|
|
|
@ -97,7 +97,7 @@ struct apk_name {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct apk_repository {
|
struct apk_repository {
|
||||||
char *url;
|
const char *url;
|
||||||
struct apk_checksum csum;
|
struct apk_checksum csum;
|
||||||
apk_blob_t description;
|
apk_blob_t description;
|
||||||
};
|
};
|
||||||
|
|
|
@ -68,7 +68,7 @@ static const char * const apk_triggers_file = "lib/apk/db/triggers";
|
||||||
static const char * const apk_triggers_file_tmp = "lib/apk/db/triggers.new";
|
static const char * const apk_triggers_file_tmp = "lib/apk/db/triggers.new";
|
||||||
static const char * const apk_triggers_file_old = "var/lib/apk/triggers";
|
static const char * const apk_triggers_file_old = "var/lib/apk/triggers";
|
||||||
|
|
||||||
static const char * const apk_installed_file = "lib/apk/db/installed";
|
const char * const apk_installed_file = "lib/apk/db/installed";
|
||||||
static const char * const apk_installed_file_tmp = "lib/apk/db/installed.new";
|
static const char * const apk_installed_file_tmp = "lib/apk/db/installed.new";
|
||||||
static const char * const apk_installed_file_old = "var/lib/apk/installed";
|
static const char * const apk_installed_file_old = "var/lib/apk/installed";
|
||||||
|
|
||||||
|
@ -609,7 +609,7 @@ int apk_repo_format_real_url(struct apk_database *db, struct apk_repository *rep
|
||||||
int apk_repo_format_item(struct apk_database *db, struct apk_repository *repo, struct apk_package *pkg,
|
int apk_repo_format_item(struct apk_database *db, struct apk_repository *repo, struct apk_package *pkg,
|
||||||
int *fd, char *buf, size_t len)
|
int *fd, char *buf, size_t len)
|
||||||
{
|
{
|
||||||
if (strcmp(repo->url, "cache") == 0) {
|
if (repo->url == apk_linked_cache_dir) {
|
||||||
*fd = db->cache_fd;
|
*fd = db->cache_fd;
|
||||||
return apk_pkg_format_cache_pkg(APK_BLOB_PTR_LEN(buf, len), pkg);
|
return apk_pkg_format_cache_pkg(APK_BLOB_PTR_LEN(buf, len), pkg);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1423,7 +1423,7 @@ static int add_repos_from_file(void *ctx, int dirfd, const char *file)
|
||||||
static void apk_db_setup_repositories(struct apk_database *db)
|
static void apk_db_setup_repositories(struct apk_database *db)
|
||||||
{
|
{
|
||||||
db->repos[APK_REPOSITORY_CACHED] = (struct apk_repository) {
|
db->repos[APK_REPOSITORY_CACHED] = (struct apk_repository) {
|
||||||
.url = "cache",
|
.url = apk_linked_cache_dir,
|
||||||
.csum.data = {
|
.csum.data = {
|
||||||
0xb0,0x35,0x92,0x80,0x6e,0xfa,0xbf,0xee,0xb7,0x09,
|
0xb0,0x35,0x92,0x80,0x6e,0xfa,0xbf,0xee,0xb7,0x09,
|
||||||
0xf5,0xa7,0x0a,0x7c,0x17,0x26,0x69,0xb0,0x05,0x38 },
|
0xf5,0xa7,0x0a,0x7c,0x17,0x26,0x69,0xb0,0x05,0x38 },
|
||||||
|
@ -1737,7 +1737,7 @@ void apk_db_close(struct apk_database *db)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = APK_REPOSITORY_FIRST_CONFIGURED; i < db->num_repos; i++) {
|
for (i = APK_REPOSITORY_FIRST_CONFIGURED; i < db->num_repos; i++) {
|
||||||
free(db->repos[i].url);
|
free((void*) db->repos[i].url);
|
||||||
free(db->repos[i].description.ptr);
|
free(db->repos[i].description.ptr);
|
||||||
}
|
}
|
||||||
foreach_array_item(ppath, db->protected_paths)
|
foreach_array_item(ppath, db->protected_paths)
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
/* policy.c - Alpine Package Keeper (APK)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013 Timo Teräs <timo.teras@iki.fi>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 as published
|
||||||
|
* by the Free Software Foundation. See http://www.gnu.org/ for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "apk_defines.h"
|
||||||
|
#include "apk_applet.h"
|
||||||
|
#include "apk_database.h"
|
||||||
|
#include "apk_version.h"
|
||||||
|
#include "apk_print.h"
|
||||||
|
|
||||||
|
extern const char * const apk_installed_file;
|
||||||
|
|
||||||
|
static void print_policy(struct apk_database *db, const char *match, struct apk_name *name, void *ctx)
|
||||||
|
{
|
||||||
|
struct apk_provider *p;
|
||||||
|
struct apk_repository *repo;
|
||||||
|
int i, j, num = 0;
|
||||||
|
/*
|
||||||
|
zlib1g policy:
|
||||||
|
2.0:
|
||||||
|
@testing http://nl.alpinelinux.org/alpine/edge/testing
|
||||||
|
1.7:
|
||||||
|
@edge http://nl.alpinelinux.org/alpine/edge/main
|
||||||
|
1.2.3.5 (upgradeable):
|
||||||
|
http://nl.alpinelinux.org/alpine/v2.6/main
|
||||||
|
1.2.3.4 (installed):
|
||||||
|
/media/cdrom/...
|
||||||
|
http://nl.alpinelinux.org/alpine/v2.5/main
|
||||||
|
1.1:
|
||||||
|
http://nl.alpinelinux.org/alpine/v2.4/main
|
||||||
|
*/
|
||||||
|
foreach_array_item(p, name->providers) {
|
||||||
|
if (p->pkg->name != name)
|
||||||
|
continue;
|
||||||
|
if (num++ == 0)
|
||||||
|
printf("%s policy:\n", name->name);
|
||||||
|
printf(" " BLOB_FMT ":\n", BLOB_PRINTF(*p->version));
|
||||||
|
if (p->pkg->ipkg != NULL)
|
||||||
|
printf(" %s\n", apk_installed_file);
|
||||||
|
for (i = 0; i < db->num_repos; i++) {
|
||||||
|
repo = &db->repos[i];
|
||||||
|
if (!(BIT(i) & p->pkg->repos))
|
||||||
|
continue;
|
||||||
|
for (j = 0; j < db->num_repo_tags; j++) {
|
||||||
|
if (db->repo_tags[j].allowed_repos & p->pkg->repos)
|
||||||
|
printf(" "BLOB_FMT"%s%s\n",
|
||||||
|
BLOB_PRINTF(db->repo_tags[j].tag),
|
||||||
|
j == 0 ? "" : " ",
|
||||||
|
repo->url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int policy_main(void *ctx, struct apk_database *db, struct apk_string_array *args)
|
||||||
|
{
|
||||||
|
apk_name_foreach_matching(db, args, apk_foreach_genid(), print_policy, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct apk_applet apk_policy = {
|
||||||
|
.name = "policy",
|
||||||
|
.help = "Show repository policy for packages.",
|
||||||
|
.open_flags = APK_OPENF_READ,
|
||||||
|
.main = policy_main,
|
||||||
|
};
|
||||||
|
|
||||||
|
APK_DEFINE_APPLET(apk_policy);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue