diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | URPM.pm | 6 | ||||
-rw-r--r-- | URPM.xs | 8 |
3 files changed, 12 insertions, 5 deletions
@@ -1,3 +1,6 @@ +- callbacks now get pkg name instead of just pkg id + thus fixing unknown package name on erases (mga#15032) + Version 5.03 - 14 November 2014 - add a missing PUTBACK in traverse_tag_find() @@ -885,13 +885,13 @@ Recognized options are: They roughly correspond to command-line options to rpm(1). -'callback_open' signature is (C<$data>, C<$cb_type>, C<$pkg_id>). It _must_ return a file handler for the asked package. +'callback_open' signature is (C<$data>, C<$cb_type>, C<$pkg_id>, C<pkg_name>). It _must_ return a file handler for the asked package. -'callback_close' signature is (C<$data>, C<$cb_type>, C<$pkg_id>). It is called just before URPM close the fd for the installed package. +'callback_close' signature is (C<$data>, C<$cb_type>, C<$pkg_id>, C<pkg_name>). It is called just before URPM close the fd for the installed package. C<$cb_type> is one of 'open' or 'close'. -Other Callbacks signature is callback(C<$data>, C<$cb_type>, C<$pkg_id>, C<$subtype>, C<$amout>, C<$total>) +Other Callbacks signature is callback(C<$data>, C<$cb_type>, C<$pkg_id>, C<$subtype>, C<$amout>, C<$total>, C<pkg_name>) C<$cb_type> is one of 'error', 'inst', 'trans' or 'uninst'. C<$subtype> can be 'start', 'progress' or 'stop'. For 'error', it can be 'cpio', 'script' or 'unpack'. @@ -1199,7 +1199,7 @@ ts_nosignature(rpmts ts) { return rpmtsSetVSFlags(ts, _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES); } -static void *rpmRunTransactions_callback(__attribute__((unused)) const void *h, +static void *rpmRunTransactions_callback(const void *arg, const rpmCallbackType what, const rpm_loff_t amount, const rpm_loff_t total, @@ -1214,6 +1214,7 @@ static void *rpmRunTransactions_callback(__attribute__((unused)) const void *h, SV *callback = NULL; char *callback_type = NULL; char *callback_subtype = NULL; + Header h = (Header) arg; if (!td) return NULL; @@ -1303,7 +1304,7 @@ static void *rpmRunTransactions_callback(__attribute__((unused)) const void *h, ENTER; SAVETMPS; PUSHMARK(SP); - EXTEND(SP, callback_subtype == NULL ? 2 : 5); + EXTEND(SP, callback_subtype == NULL ? 3 : 6); PUSHs(td->data); mPUSHs(newSVpv(callback_type, 0)); PUSHs(pkgKey != NULL ? sv_2mortal(newSViv((long)pkgKey - 1)) : &PL_sv_undef); @@ -1312,6 +1313,9 @@ static void *rpmRunTransactions_callback(__attribute__((unused)) const void *h, mPUSHs(newSViv(amount)); mPUSHs(newSViv(total)); } + // for erasures, the key provided by librpm is always 0, so let's add another parameter (fullname): + char *s = headerGetAsString(h, RPMTAG_NVR); + mPUSHs(newSVpv(s, 0)); PUTBACK; i = call_sv(callback, callback == td->callback_open ? G_SCALAR : G_DISCARD); SPAGAIN; |