From: Michael Schroeder Date: Mon, 10 Sep 2018 08:34:45 +0000 (+0200) Subject: Split away repodata_load X-Git-Tag: 0.7.0~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54e3121fa90b708bb723a4555c5d52c90903995a;p=thirdparty%2Flibsolv.git Split away repodata_load This can be used to force loading of a stub repodata. --- diff --git a/src/repodata.c b/src/repodata.c index 4ab5d188..e14038bb 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -518,17 +518,36 @@ get_data(Repodata *data, Repokey *key, unsigned char **dpp, int advance) return 0; } -static int -load_repodata(Repodata *data) +void +repodata_load(Repodata *data) { + if (data->state != REPODATA_STUB) + return; if (data->loadcallback) + data->loadcallback(data); + else + data->state = REPODATA_ERROR; +} + +static int +maybe_load_repodata_stub(Repodata *data, Id keyname) +{ + if (data->state != REPODATA_STUB) { - data->loadcallback(data); - if (data->state == REPODATA_AVAILABLE) - return 1; + data->state = REPODATA_ERROR; + return 0; } - data->state = REPODATA_ERROR; - return 0; + if (keyname) + { + int i; + for (i = 1; i < data->nkeys; i++) + if (keyname == data->keys[i].name) + break; + if (i == data->nkeys) + return 0; + } + repodata_load(data); + return data->state == REPODATA_AVAILABLE ? 1 : 0; } static inline int @@ -536,28 +555,11 @@ maybe_load_repodata(Repodata *data, Id keyname) { if (keyname && !repodata_precheck_keyname(data, keyname)) return 0; /* do not bother... */ - switch(data->state) - { - case REPODATA_STUB: - if (keyname) - { - int i; - for (i = 1; i < data->nkeys; i++) - if (keyname == data->keys[i].name) - break; - if (i == data->nkeys) - return 0; - } - return load_repodata(data); - case REPODATA_ERROR: - return 0; - case REPODATA_AVAILABLE: - case REPODATA_LOADING: - return 1; - default: - data->state = REPODATA_ERROR; - return 0; - } + if (data->state == REPODATA_AVAILABLE || data->state == REPODATA_LOADING) + return 1; + if (data->state == REPODATA_ERROR) + return 0; + return maybe_load_repodata_stub(data, keyname); } static inline unsigned char * diff --git a/src/repodata.h b/src/repodata.h index 7208e950..2e02f66d 100644 --- a/src/repodata.h +++ b/src/repodata.h @@ -144,6 +144,7 @@ void repodata_freedata(Repodata *data); void repodata_free(Repodata *data); void repodata_empty(Repodata *data, int localpool); +void repodata_load(Repodata *data); /* * key management functions