expose priority

This commit is contained in:
Chris West (Faux) 2017-07-13 15:31:11 +01:00
parent 67c2146b25
commit 70812eb615
5 changed files with 46 additions and 9 deletions

View File

@ -1,4 +1,5 @@
#include <sstream>
#include <cstdint>
#include <assert.h>
@ -18,8 +19,8 @@ struct PPkgIterator {
// Owned by us.
pkgCache::PkgIterator iterator;
// Borrowed from PCache.
pkgCache *cache;
// Borrow of "static" PCache.
PCache *cache;
};
struct PVerIterator {
@ -28,6 +29,9 @@ struct PVerIterator {
// Borrowed from PCache.
pkgCache::PkgIterator *pkg;
// Borrow of "static" PCache.
PCache *cache;
};
extern "C" {
@ -46,6 +50,7 @@ extern "C" {
const char *pkg_iter_name(PPkgIterator *iterator);
const char *pkg_iter_arch(PPkgIterator *iterator);
const char *pkg_iter_current_version(PPkgIterator *iterator);
const char *pkg_iter_candidate_version(PPkgIterator *iterator);
// freed by caller
char *pkg_iter_pretty(PCache *cache, PPkgIterator *iterator);
@ -61,6 +66,7 @@ extern "C" {
const char *ver_iter_source_package(PVerIterator *iterator);
const char *ver_iter_source_version(PVerIterator *iterator);
const char *ver_iter_arch(PVerIterator *iterator);
int32_t ver_iter_priority(PVerIterator *iterator);
}
void init_config_system() {
@ -89,21 +95,21 @@ void pkg_cache_release(PCache *cache) {
PPkgIterator *pkg_cache_pkg_iter(PCache *cache) {
PPkgIterator *wrapper = new PPkgIterator();
wrapper->iterator = cache->cache->PkgBegin();
wrapper->cache = cache->cache;
wrapper->cache = cache;
return wrapper;
}
PPkgIterator *pkg_cache_find_name(PCache *cache, const char *name) {
PPkgIterator *wrapper = new PPkgIterator();
wrapper->iterator = cache->cache->FindPkg(name);
wrapper->cache = cache->cache;
wrapper->cache = cache;
return wrapper;
}
PPkgIterator *pkg_cache_find_name_arch(PCache *cache, const char *name, const char *arch) {
PPkgIterator *wrapper = new PPkgIterator();
wrapper->iterator = cache->cache->FindPkg(name, arch);
wrapper->cache = cache->cache;
wrapper->cache = cache;
return wrapper;
}
@ -116,7 +122,7 @@ void pkg_iter_next(PPkgIterator *wrapper) {
}
bool pkg_iter_end(PPkgIterator *wrapper) {
return wrapper->cache->PkgEnd() == wrapper->iterator;
return wrapper->cache->cache->PkgEnd() == wrapper->iterator;
}
const char *pkg_iter_name(PPkgIterator *wrapper) {
@ -131,6 +137,10 @@ const char *pkg_iter_current_version(PPkgIterator *wrapper) {
return wrapper->iterator.CurVersion();
}
const char *pkg_iter_candidate_version(PPkgIterator *wrapper) {
return wrapper->cache->cache_file->GetPolicy()->GetCandidateVer(wrapper->iterator).VerStr();
}
char *pkg_iter_pretty(PCache *cache, PPkgIterator *wrapper) {
assert(cache);
assert(wrapper);
@ -143,6 +153,7 @@ PVerIterator *pkg_iter_ver_iter(PPkgIterator *wrapper) {
PVerIterator *new_wrapper = new PVerIterator();
new_wrapper->iterator = wrapper->iterator.VersionList();
new_wrapper->pkg = &wrapper->iterator;
new_wrapper->cache = wrapper->cache;
return new_wrapper;
}
@ -178,3 +189,9 @@ const char *ver_iter_source_version(PVerIterator *wrapper) {
const char *ver_iter_arch(PVerIterator *wrapper) {
return wrapper->iterator.Arch();
}
int32_t ver_iter_priority(PVerIterator *wrapper) {
// The priority is a "short", which is roughly a (signed) int16_t;
// going bigger just in case
return wrapper->cache->cache_file->GetPolicy()->GetPriority(wrapper->iterator);
}

View File

@ -18,12 +18,15 @@ fn main() {
println!("{}:{}:", view.name(), view.arch());
let installed_version = view.current_version().unwrap_or("(none)".to_string());
println!(" Installed: {}", installed_version);
println!(" Candidate: XXX");
println!(" Candidate: {}", view.candidate_version().unwrap_or("(none)".to_string()));
println!(" Version table:");
for version in view.versions().map(simple::Version::from_iter) {
println!(" {} {} XXX",
println!(" {} {} {}",
if version.version == installed_version { "***" } else { " " },
version.version);
version.version,
version.priority,
);
println!(" TODO: urls");
}
} else {
println!("unrecognised package: {}", pkg);

View File

@ -37,6 +37,7 @@ extern {
pub fn pkg_iter_name(iterator: PPkgIterator) -> *const c_char;
pub fn pkg_iter_arch(iterator: PPkgIterator) -> *const c_char;
pub fn pkg_iter_current_version(iterator: PPkgIterator) -> *const c_char;
pub fn pkg_iter_candidate_version(iterator: PPkgIterator) -> *const c_char;
pub fn pkg_iter_pretty(cache: PCache, iterator: PPkgIterator) -> *mut c_char;
@ -57,6 +58,7 @@ extern {
pub fn ver_iter_source_package(iterator: PVerIterator) -> *mut c_char;
pub fn ver_iter_source_version(iterator: PVerIterator) -> *mut c_char;
pub fn ver_iter_arch(iterator: PVerIterator) -> *mut c_char;
pub fn ver_iter_priority(iterator: PVerIterator) -> i32;
}
pub fn pkg_cache_get() -> PCache {

View File

@ -138,6 +138,13 @@ impl<'c> PkgIterator<'c> {
}
}
pub fn candidate_version(&self) -> Option<String> {
assert!(!self.is_empty());
unsafe {
make_owned_ascii_string(raw::pkg_iter_candidate_version(self.ptr))
}
}
pub fn pretty_print(&self) -> String {
assert!(!self.is_empty());
unsafe {
@ -283,6 +290,12 @@ impl<'c> VerIterator<'c> {
.expect("versions always have a source_version")
}
}
pub fn priority(&self) -> i32 {
unsafe {
raw::ver_iter_priority(self.ptr)
}
}
}
unsafe fn make_owned_ascii_string(ptr: *const libc::c_char) -> Option<String> {

View File

@ -22,6 +22,7 @@ pub struct Version {
pub section: String,
pub source_package: String,
pub source_version: String,
pub priority: i32,
}
@ -33,6 +34,7 @@ impl Version {
section: iter.section(),
source_package: iter.source_package(),
source_version: iter.source_version(),
priority: iter.priority(),
}
}
}