xbps-{bin,repo}: use static const tables to parse objs in XBPS_PKGPROPS files.
This commit is contained in:
parent
ac6fe51340
commit
bc259ae720
@ -55,8 +55,8 @@ void fetch_file_progress_cb(void *);
|
|||||||
|
|
||||||
/* From util.c */
|
/* From util.c */
|
||||||
int show_pkg_files(prop_dictionary_t);
|
int show_pkg_files(prop_dictionary_t);
|
||||||
void show_pkg_info(prop_dictionary_t);
|
void show_pkg_info(prop_dictionary_t, bool);
|
||||||
void show_pkg_info_only_repo(prop_dictionary_t);
|
void show_pkg_info_only_repo(prop_dictionary_t);
|
||||||
int show_pkg_namedesc(prop_object_t, void *, bool *);
|
int show_pkg_namedesc(prop_object_t, void *, bool *);
|
||||||
int list_strings_in_array(prop_object_t, void *, bool *);
|
int list_strings_in_array(prop_object_t, void *, bool *);
|
||||||
int list_strings_sep_in_array(prop_object_t, void *, bool *);
|
int list_strings_sep_in_array(prop_object_t, void *, bool *);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2008-2010 Juan Romero Pardines.
|
* Copyright (c) 2008-2011 Juan Romero Pardines.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -43,7 +43,7 @@ show_pkg_info_from_metadir(const char *pkgname)
|
|||||||
if (d == NULL)
|
if (d == NULL)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
show_pkg_info(d);
|
show_pkg_info(d, false);
|
||||||
prop_object_release(d);
|
prop_object_release(d);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2008-2010 Juan Romero Pardines.
|
* Copyright (c) 2008-2011 Juan Romero Pardines.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -36,111 +36,177 @@
|
|||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "../xbps-repo/defs.h"
|
#include "../xbps-repo/defs.h"
|
||||||
|
|
||||||
void
|
struct object_info {
|
||||||
show_pkg_info_only_repo(prop_dictionary_t dict)
|
const char *key;
|
||||||
{
|
const char *descr;
|
||||||
prop_object_t obj;
|
|
||||||
char size[8];
|
|
||||||
int rv;
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "filename");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING) {
|
|
||||||
printf("Filename: %s", prop_string_cstring_nocopy(obj));
|
|
||||||
obj = prop_dictionary_get(dict, "filename-size");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_NUMBER) {
|
|
||||||
rv = xbps_humanize_number(size,
|
|
||||||
(int64_t)prop_number_unsigned_integer_value(obj));
|
|
||||||
if (rv == -1)
|
|
||||||
printf(" (size: %ju)\n",
|
|
||||||
prop_number_unsigned_integer_value(obj));
|
|
||||||
else
|
|
||||||
printf(" (size: %s)\n", size);
|
|
||||||
} else
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "filename-sha256");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf("SHA256: %s\n", prop_string_cstring_nocopy(obj));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
show_pkg_info(prop_dictionary_t dict)
|
|
||||||
{
|
|
||||||
prop_object_t obj;
|
|
||||||
const char *sep;
|
const char *sep;
|
||||||
|
prop_type_t type;
|
||||||
|
bool from_repo;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct object_info obj_info[] = {
|
||||||
|
{
|
||||||
|
.key = "filename",
|
||||||
|
.descr = "Binary package:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "filename-size",
|
||||||
|
.descr = "Binary package size",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_NUMBER,
|
||||||
|
.from_repo = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "filename-sha256",
|
||||||
|
.descr = "Binary package SHA256:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "archive-compression-type",
|
||||||
|
.descr = "Binary package compression type:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "pkgname",
|
||||||
|
.descr = "Package:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "installed_size",
|
||||||
|
.descr = "Installed size",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_NUMBER,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "maintainer",
|
||||||
|
.descr = "Maintainer:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "architecture",
|
||||||
|
.descr = "Architecture:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "version",
|
||||||
|
.descr = "Version:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "preserve",
|
||||||
|
.descr = "Preserve files",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_BOOL,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "replaces",
|
||||||
|
.descr = "Replaces these packages:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_ARRAY,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "provides",
|
||||||
|
.descr = "Provides virtual packages:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_ARRAY,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "conflicts",
|
||||||
|
.descr = "Conflicts with:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_ARRAY,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "conf_files",
|
||||||
|
.descr = "Configuration files:\n",
|
||||||
|
.sep = " ",
|
||||||
|
.type = PROP_TYPE_ARRAY,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = "short_desc",
|
||||||
|
.descr = "Description:",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false },
|
||||||
|
{
|
||||||
|
.key = "long_desc",
|
||||||
|
.descr = " ",
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_STRING,
|
||||||
|
.from_repo = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.key = NULL,
|
||||||
|
.descr = NULL,
|
||||||
|
.sep = NULL,
|
||||||
|
.type = PROP_TYPE_UNKNOWN,
|
||||||
|
.from_repo = false
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
show_pkg_info(prop_dictionary_t dict, bool only_repo)
|
||||||
|
{
|
||||||
|
const struct object_info *oip;
|
||||||
|
prop_object_t obj;
|
||||||
char size[8];
|
char size[8];
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(dict != NULL);
|
||||||
assert(prop_dictionary_count(dict) != 0);
|
assert(prop_dictionary_count(dict) != 0);
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "archive-compression-type");
|
for (oip = obj_info; oip->key != NULL; oip++) {
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
if (only_repo && oip->from_repo == false)
|
||||||
printf("Compression type: %s\n",
|
continue;
|
||||||
prop_string_cstring_nocopy(obj));
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "pkgname");
|
obj = prop_dictionary_get(dict, oip->key);
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
switch (prop_object_type(obj)) {
|
||||||
printf("Package: %s\n", prop_string_cstring_nocopy(obj));
|
case PROP_TYPE_STRING:
|
||||||
|
printf("%s %s\n", oip->descr,
|
||||||
obj = prop_dictionary_get(dict, "installed_size");
|
prop_string_cstring_nocopy(obj));
|
||||||
if (prop_object_type(obj) == PROP_TYPE_NUMBER) {
|
break;
|
||||||
printf("Installed size: ");
|
case PROP_TYPE_NUMBER:
|
||||||
if (xbps_humanize_number(size,
|
printf("%s: ", oip->descr);
|
||||||
(int64_t)prop_number_unsigned_integer_value(obj)) == -1)
|
if (xbps_humanize_number(size,
|
||||||
printf("%ju\n",
|
(int64_t)prop_number_unsigned_integer_value(obj)) == -1)
|
||||||
prop_number_unsigned_integer_value(obj));
|
printf("%ju\n",
|
||||||
else
|
prop_number_unsigned_integer_value(obj));
|
||||||
printf("%s\n", size);
|
else
|
||||||
|
printf("%s\n", size);
|
||||||
|
break;
|
||||||
|
case PROP_TYPE_BOOL:
|
||||||
|
printf("%s: %s\n", oip->descr,
|
||||||
|
prop_bool_true(obj) ? "yes" : "no");
|
||||||
|
break;
|
||||||
|
case PROP_TYPE_ARRAY:
|
||||||
|
printf("%s ", oip->descr);
|
||||||
|
(void)xbps_callback_array_iter_in_dict(dict, oip->key,
|
||||||
|
list_strings_sep_in_array, __UNCONST(oip->sep));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "maintainer");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf("Maintainer: %s\n", prop_string_cstring_nocopy(obj));
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "architecture");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf("Architecture: %s\n", prop_string_cstring_nocopy(obj));
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "version");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf("Version: %s\n", prop_string_cstring_nocopy(obj));
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "preserve");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_BOOL)
|
|
||||||
printf("Preserve files: %s\n",
|
|
||||||
prop_bool_true(obj) ? "yes" : "no");
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "replaces");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_ARRAY) {
|
|
||||||
printf("Replaces: ");
|
|
||||||
(void)xbps_callback_array_iter_in_dict(dict, "replaces",
|
|
||||||
list_strings_sep_in_array, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "conflicts");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_ARRAY) {
|
|
||||||
printf("Conflicts: ");
|
|
||||||
(void)xbps_callback_array_iter_in_dict(dict, "conflicts",
|
|
||||||
list_strings_sep_in_array, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "conf_files");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_ARRAY) {
|
|
||||||
printf("Configuration files:\n");
|
|
||||||
sep = " ";
|
|
||||||
(void)xbps_callback_array_iter_in_dict(dict, "conf_files",
|
|
||||||
list_strings_sep_in_array, __UNCONST(sep));
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "short_desc");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf("Description: %s", prop_string_cstring_nocopy(obj));
|
|
||||||
|
|
||||||
obj = prop_dictionary_get(dict, "long_desc");
|
|
||||||
if (prop_object_type(obj) == PROP_TYPE_STRING)
|
|
||||||
printf(" %s\n", prop_string_cstring_nocopy(obj));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -266,8 +266,8 @@ show_pkg_info_from_repolist(const char *pkgname)
|
|||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
free(url);
|
free(url);
|
||||||
show_pkg_info_only_repo(pkgd);
|
show_pkg_info(pkgd, true);
|
||||||
show_pkg_info(pkg_propsd);
|
show_pkg_info(pkg_propsd, false);
|
||||||
prop_object_release(pkg_propsd);
|
prop_object_release(pkg_propsd);
|
||||||
prop_object_release(pkgd);
|
prop_object_release(pkgd);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user