aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2008-10-14 17:43:30 +0000
committerPascal Rigaux <pixel@mandriva.com>2008-10-14 17:43:30 +0000
commit2fe080bfdbf9bdce1e4afabc21484401d1e41bbe (patch)
treea4420e393012b44468b0d4b26486dca1adca7ca5
parent75957d7ccec6b7f3b13528ef59671b8c234e35f5 (diff)
downloadperl-URPM-2fe080bfdbf9bdce1e4afabc21484401d1e41bbe.tar
perl-URPM-2fe080bfdbf9bdce1e4afabc21484401d1e41bbe.tar.gz
perl-URPM-2fe080bfdbf9bdce1e4afabc21484401d1e41bbe.tar.bz2
perl-URPM-2fe080bfdbf9bdce1e4afabc21484401d1e41bbe.tar.xz
perl-URPM-2fe080bfdbf9bdce1e4afabc21484401d1e41bbe.zip
- $trans->run can now return both the translated errors, and some parsable
errors (useful for example to detect diskspace issues) (backported from trunk)
-rw-r--r--NEWS3
-rw-r--r--URPM.xs13
2 files changed, 11 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 550665b..3d35468 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,6 @@
+- $trans->run can now return both the translated errors, and some parsable
+ errors (useful for example to detect diskspace issues)
+
Version 3.18 - 7 July 2008, by Pascal "Pixel" Rigaux
- revert change introduced in 3.16 (it breaks too much, eg
diff --git a/URPM.xs b/URPM.xs
index d6bc566..40a3d6f 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -723,7 +723,7 @@ return_files(Header header, int filter_mode) {
}
void
-return_problems(rpmps ps, int translate_message) {
+return_problems(rpmps ps, int translate_message, int raw_message) {
dSP;
if (ps && rpmpsNumProblems(ps) > 0) {
#ifdef RPM_ORG
@@ -745,7 +745,8 @@ return_problems(rpmps ps, int translate_message) {
if (rpm_codeset_is_utf8) SvUTF8_on(sv);
XPUSHs(sv_2mortal(sv));
_free(buf);
- } else {
+ }
+ if (raw_message) {
const char *pkgNEVR = rpmProblemGetPkgNEVR(p) ? rpmProblemGetPkgNEVR(p) : "";
const char *altNEVR = rpmProblemGetAltNEVR(p) ? rpmProblemGetAltNEVR(p) : "";
const char *s = rpmProblemGetStr(p) ? rpmProblemGetStr(p) : "";
@@ -3165,7 +3166,7 @@ Trans_check(trans, ...)
} else if (gimme == G_ARRAY) {
/* now translation is handled by rpmlib, but only for version 4.2 and above */
PUTBACK;
- return_problems(ps, 1);
+ return_problems(ps, 1, 0);
SPAGAIN;
}
} else if (gimme == G_SCALAR) {
@@ -3248,7 +3249,7 @@ Trans_run(trans, data, ...)
struct s_TransactionData td = { NULL, NULL, NULL, NULL, NULL, 100000, data };
rpmtransFlags transFlags = RPMTRANS_FLAG_NONE;
int probFilter = 0;
- int translate_message = 0;
+ int translate_message = 0, raw_message = 0;
int i;
PPCODE:
for (i = 2 ; i < items - 1 ; i += 2) {
@@ -3279,6 +3280,8 @@ Trans_run(trans, data, ...)
if (SvIV(ST(i+1))) probFilter |= RPMPROB_FILTER_OLDPACKAGE;
} else if (len == 11 && !memcmp(s, "replacepkgs", 11)) {
if (SvIV(ST(i+1))) probFilter |= RPMPROB_FILTER_REPLACEPKG;
+ } else if (len == 11 && !memcmp(s, "raw_message", 11)) {
+ raw_message = 1;
} else if (len == 9 && !memcmp(s, "repackage", 9)) {
if (SvIV(ST(i+1))) transFlags |= RPMTRANS_FLAG_REPACKAGE;
} else if (len == 6 && !memcmp(s, "justdb", 6)) {
@@ -3314,7 +3317,7 @@ Trans_run(trans, data, ...)
if (rpmtsRun(trans->ts, NULL, probFilter) > 0) {
rpmps ps = rpmtsProblems(trans->ts);
PUTBACK;
- return_problems(ps, translate_message);
+ return_problems(ps, translate_message, raw_message || !translate_message);
SPAGAIN;
ps = rpmpsFree(ps);
}