Hello community,

here is the log from the commit of package ki18n for openSUSE:Factory checked 
in at 2014-02-27 00:01:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ki18n (Old)
 and      /work/SRC/openSUSE:Factory/.ki18n.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ki18n"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ki18n/ki18n.changes      2014-02-24 
11:01:09.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.ki18n.new/ki18n.changes 2014-02-27 
00:01:14.000000000 +0100
@@ -1,0 +2,7 @@
+Sun Feb 23 22:43:10 UTC 2014 - hrvoje.sen...@gmail.com
+
+- Added patches from upstream
+  * 0008-Cleanup-after-QtScript-port.patch
+  * 0009-Do-not-leak-script-interfaces-and-their-script-engin.patch
+
+-------------------------------------------------------------------

New:
----
  0008-Cleanup-after-QtScript-port.patch
  0009-Do-not-leak-script-interfaces-and-their-script-engin.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ki18n.spec ++++++
--- /var/tmp/diff_new_pack.1gxaTH/_old  2014-02-27 00:01:15.000000000 +0100
+++ /var/tmp/diff_new_pack.1gxaTH/_new  2014-02-27 00:01:15.000000000 +0100
@@ -41,6 +41,10 @@
 Patch2:         0006-Separate-ktranscript-plugin-test-into-its-own-autote.patch
 # PATCH-FIX-UPSTREAM 
0007-Ported-KTranscript-script-engine-use-from-KJS-to-QtS.patch
 Patch3:         0007-Ported-KTranscript-script-engine-use-from-KJS-to-QtS.patch
+# PATCH-FIX-UPSTREAM 0008-Cleanup-after-QtScript-port.patch
+Patch4:         0008-Cleanup-after-QtScript-port.patch
+# PATCH-FIX-UPSTREAM 
0009-Do-not-leak-script-interfaces-and-their-script-engin.patch
+Patch5:         0009-Do-not-leak-script-interfaces-and-their-script-engin.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
@@ -78,6 +82,8 @@
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
+%patch5 -p1
 
 %build
   %cmake_kf5 -d build

++++++ 0008-Cleanup-after-QtScript-port.patch ++++++
>From 463f76bc765e9fc9279a19ab29da9e1024f927f9 Mon Sep 17 00:00:00 2001
From: Kevin Krammer <kram...@kde.org>
Date: Sun, 23 Feb 2014 20:51:37 +0100
Subject: [PATCH 8/9] Cleanup after QtScript port

Update framework tier.
Remove unused enum.
Remove no longer applicable search for KJS.
Consistent block braces for if statements.

REVIEW: 115979
---
 KF5I18nConfig.cmake.in |   2 -
 ki18n.yaml             |   2 +-
 src/ktranscript.cpp    | 105 +++++++++++++++++++++----------------------------
 3 files changed, 46 insertions(+), 63 deletions(-)

diff --git a/KF5I18nConfig.cmake.in b/KF5I18nConfig.cmake.in
index 7225bf5..64dc500 100644
--- a/KF5I18nConfig.cmake.in
+++ b/KF5I18nConfig.cmake.in
@@ -2,8 +2,6 @@
 
 set(KI18N_MODULE_DIR "${PACKAGE_PREFIX_DIR}/@CMAKECONFIG_INSTALL_DIR@")
 
-find_dependency(KF5JS "@KF5_VERSION@")
-
 include("${CMAKE_CURRENT_LIST_DIR}/KF5I18nTargets.cmake")
 include("${CMAKE_CURRENT_LIST_DIR}/KF5I18NMacros.cmake")
 
diff --git a/ki18n.yaml b/ki18n.yaml
index 9b601d5..c54f87b 100644
--- a/ki18n.yaml
+++ b/ki18n.yaml
@@ -1 +1 @@
-tier: 2
+tier: 1
diff --git a/src/ktranscript.cpp b/src/ktranscript.cpp
index 4cdae75..1ce0d1a 100644
--- a/src/ktranscript.cpp
+++ b/src/ktranscript.cpp
@@ -122,35 +122,6 @@ public:
     Q_INVOKABLE QScriptValue getConfBool(const QScriptValue &key, const 
QScriptValue &dval = QScriptValue::NullValue);
     Q_INVOKABLE QScriptValue getConfNumber(const QScriptValue &key, const 
QScriptValue &dval = QScriptValue::NullValue);
 
-    enum {
-        Load,
-        Setcall,
-        Hascall,
-        Acall,
-        SetcallForall,
-        Fallback,
-        Nsubs,
-        Subs,
-        Vals,
-        Msgctxt,
-        Dynctxt,
-        Msgid,
-        Msgkey,
-        Msgstrf,
-        Dbgputs,
-        Warnputs,
-        LocaleCountry,
-        NormKey,
-        LoadProps,
-        GetProp,
-        SetProp,
-        ToUpperFirst,
-        ToLowerFirst,
-        GetConfString,
-        GetConfBool,
-        GetConfNumber
-    };
-
     // Helper methods to interface functions.
     QScriptValue load(const QScriptValueList &fnames);
     QString loadProps_text(const QString &fpath);
@@ -354,8 +325,8 @@ QScriptValue variantToJsValue(const QVariant &val)
     QVariant::Type vtype = val.type();
     if (vtype == QVariant::String) {
         return QScriptValue(val.toString());
-    } else if (vtype == QVariant::Double \
-               || vtype == QVariant::Int || vtype == QVariant::UInt \
+    } else if (vtype == QVariant::Double
+               || vtype == QVariant::Int || vtype == QVariant::UInt
                || vtype == QVariant::LongLong || vtype == QVariant::ULongLong) 
{
         return QScriptValue(val.toDouble());
     } else {
@@ -429,9 +400,9 @@ TsConfig readConfig(const QString &fname)
 // throw or log error, depending on context availability
 static QScriptValue throwError(QScriptContext *context, QScriptContext::Error 
errorCode, const QString &message)
 {
-    if (context)
+    if (context) {
         return context->throwError(errorCode, message);
-
+    }
 
     qCritical() << "Script error" << errorCode << ":" << message;
     return QScriptValue::UndefinedValue;
@@ -609,32 +580,32 @@ QString KTranscriptImp::eval(const QList<QVariant> &argv,
         val = func.call(gobj, arglist);
     }
 
-    if (fallback)
+    if (fallback) {
         // Fallback to ordinary translation requested.
-    {
+
         // Possibly clear exception state.
         if (engine->hasUncaughtException()) {
             engine->clearExceptions();
         }
 
         return QString();
-    } else if (!engine->hasUncaughtException())
+    } else if (!engine->hasUncaughtException()) {
         // Evaluation successful.
-    {
-        if (val.isString())
+
+        if (val.isString()) {
             // Good to go.
-        {
+
             return val.toString();
-        } else
+        } else {
             // Accept only strings.
-        {
+
             QString strval = val.toString();
             error = QString::fromLatin1("Non-string return value: 
%1").arg(strval);
             return QString();
         }
-    } else
+    } else {
         // Exception raised.
-    {
+
         error = expt2str(engine);
 
         engine->clearExceptions();
@@ -733,7 +704,7 @@ void KTranscriptImp::setupInterpreter(const QString &lang)
 }
 
 Scriptface::Scriptface(QScriptEngine *scriptEngine_, const TsConfigGroup 
&config_, QObject *parent)
-    : QObject(parent), scriptEngine(scriptEngine_), fallbackRequest(NULL), 
config(config_)
+    : QObject(parent), scriptEngine(scriptEngine_), fallbackRequest(0), 
config(config_)
 {}
 
 Scriptface::~Scriptface()
@@ -765,15 +736,18 @@ QScriptValue Scriptface::load()
 
 QScriptValue Scriptface::setcall(const QScriptValue &name, const QScriptValue 
&func, const QScriptValue &fval)
 {
-    if (!name.isString())
+    if (!name.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcall: expected string as first argument");
-    if (!func.isFunction())
+    }
+    if (!func.isFunction()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcall: expected function as second 
argument");
-    if (!(fval.isObject() || fval.isNull()))
+    }
+    if (!(fval.isObject() || fval.isNull())) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcall: expected object or null as third 
argument");
+    }
 
     QString qname = name.toString();
     funcs[qname] = func;
@@ -792,9 +766,10 @@ QScriptValue Scriptface::setcall(const QScriptValue &name, 
const QScriptValue &f
 
 QScriptValue Scriptface::hascall(const QScriptValue &name)
 {
-    if (!name.isString())
+    if (!name.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"hascall: expected string as first argument");
+    }
 
     QString qname = name.toString();
     return QScriptValue(funcs.contains(qname));
@@ -844,15 +819,18 @@ QScriptValue Scriptface::acall()
 
 QScriptValue Scriptface::setcallForall(const QScriptValue &name, const 
QScriptValue &func, const QScriptValue &fval)
 {
-    if (!name.isString())
+    if (!name.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcallForall: expected string as first 
argument");
-    if (!func.isFunction())
+    }
+    if (!func.isFunction()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcallForall: expected function as second 
argument");
-    if (!(fval.isObject() || fval.isNull()))
+    }
+    if (!(fval.isObject() || fval.isNull())) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"setcallForall: expected object or null as 
third argument");
+    }
 
     QString qname = name.toString();
     funcs[qname] = func;
@@ -874,7 +852,7 @@ QScriptValue Scriptface::setcallForall(const QScriptValue 
&name, const QScriptVa
 
 QScriptValue Scriptface::fallback()
 {
-    if (fallbackRequest != NULL) {
+    if (fallbackRequest) {
         *fallbackRequest = true;
     }
     return QScriptValue::UndefinedValue;
@@ -887,28 +865,32 @@ QScriptValue Scriptface::nsubs()
 
 QScriptValue Scriptface::subs(const QScriptValue &index)
 {
-    if (!index.isNumber())
+    if (!index.isNumber()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"subs: expected number as first argument");
+    }
 
     int i = qRound(index.toNumber());
-    if (i < 0 || i >= subList->size())
+    if (i < 0 || i >= subList->size()) {
         return throwError(context(), QScriptContext::RangeError,
                           SPREF"subs: index out of range");
+    }
 
     return QScriptValue(subList->at(i));
 }
 
 QScriptValue Scriptface::vals(const QScriptValue &index)
 {
-    if (!index.isNumber())
+    if (!index.isNumber()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"vals: expected number as first argument");
+    }
 
     int i = qRound(index.toNumber());
-    if (i < 0 || i >= valList->size())
+    if (i < 0 || i >= valList->size()) {
         return throwError(context(), QScriptContext::RangeError,
                           SPREF"vals: index out of range");
+    }
 
     return variantToJsValue(valList->at(i));
 }
@@ -920,9 +902,10 @@ QScriptValue Scriptface::msgctxt()
 
 QScriptValue Scriptface::dynctxt(const QScriptValue &key)
 {
-    if (!key.isString())
+    if (!key.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"dynctxt: expected string as first argument");
+    }
 
     QString qkey = key.toString();
     if (dyncontext->contains(qkey)) {
@@ -948,9 +931,10 @@ QScriptValue Scriptface::msgstrf()
 
 QScriptValue Scriptface::dbgputs(const QScriptValue &str)
 {
-    if (!str.isString())
+    if (!str.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"dbgputs: expected string as first argument");
+    }
 
     QString qstr = str.toString();
 
@@ -961,9 +945,10 @@ QScriptValue Scriptface::dbgputs(const QScriptValue &str)
 
 QScriptValue Scriptface::warnputs(const QScriptValue &str)
 {
-    if (!str.isString())
+    if (!str.isString()) {
         return throwError(context(), QScriptContext::TypeError,
                           SPREF"warnputs: expected string as first argument");
+    }
 
     QString qstr = str.toString();
 
@@ -1680,7 +1665,7 @@ QHash<QByteArray, QByteArray> 
Scriptface::resolveUnparsedProps(const QByteArray
     QFile *file = ref.first;
     quint64 offset = ref.second;
     QHash<QByteArray, QByteArray> props;
-    if (file != NULL && file->seek(offset)) {
+    if (file && file->seek(offset)) {
         QByteArray fstr = file->read(4 + 4);
         qlonglong pos = 0;
         quint32 numpkeys = bin_read_int(fstr, fstr.size(), pos);
-- 
1.8.5.2

++++++ 0009-Do-not-leak-script-interfaces-and-their-script-engin.patch ++++++
>From b0a60d0feb2dcac7af5f921be830bc4d9b9d3d18 Mon Sep 17 00:00:00 2001
From: Kevin Krammer <kram...@kde.org>
Date: Sun, 23 Feb 2014 22:44:56 +0100
Subject: [PATCH 9/9] Do not leak script interfaces and their script engines

Create the script engine as a QObject child of the interface and
delete all interfaces in KTranscriptImp's destructor.

REVIEW: 115983
---
 src/ktranscript.cpp | 42 ++++++++++++++++++------------------------
 1 file changed, 18 insertions(+), 24 deletions(-)

diff --git a/src/ktranscript.cpp b/src/ktranscript.cpp
index 1ce0d1a..44c8b63 100644
--- a/src/ktranscript.cpp
+++ b/src/ktranscript.cpp
@@ -89,7 +89,7 @@ class Scriptface : public QObject, public QScriptable
 {
     Q_OBJECT
 public:
-    explicit Scriptface(QScriptEngine *scriptEngine_, const TsConfigGroup 
&config, QObject *parent = 0);
+    explicit Scriptface(const TsConfigGroup &config, QObject *parent = 0);
     ~Scriptface();
 
     // Interface functions.
@@ -131,9 +131,8 @@ public:
 
     void put(const QString &propertyName, const QScriptValue &value);
 
-    // Link to its interpreter.
-    // FIXME: Probably accessible without the explicit link.
-    QScriptEngine *scriptEngine;
+    // Link to its script engine
+    QScriptEngine *const scriptEngine;
 
     // Current message data.
     const QString *msgcontext;
@@ -475,10 +474,7 @@ KTranscriptImp::KTranscriptImp()
 
 KTranscriptImp::~KTranscriptImp()
 {
-    // FIXME: vallgrind shows an afwul lot of "invalid read" in WTF:: stuff
-    // when deref is called... Are we leaking somewhere?
-    //foreach (Scriptface *sface, m_sface.values())
-    //    sface->jsi->deref();
+    qDeleteAll(m_sface);
 }
 
 QString KTranscriptImp::eval(const QList<QVariant> &argv,
@@ -680,33 +676,31 @@ void KTranscriptImp::loadModules(const QList<QStringList> 
&mods,
 #define SFNAME "Ts"
 void KTranscriptImp::setupInterpreter(const QString &lang)
 {
-    // Create new interpreter.
-    QScriptEngine *engine = new QScriptEngine;
-
-    // Add scripting interface into the interpreter.
+    // Add scripting interface
+    // Creates its own script engine and registers with it
     // NOTE: Config may not contain an entry for the language, in which case
     // it is automatically constructed as an empty hash. This is intended.
-    Scriptface *sface = new Scriptface(engine, config[lang], engine);
+    Scriptface *sface = new Scriptface(config[lang]);
+
+    // Store scriptface
+    m_sface[lang] = sface;
+
+    //dbgout("=====> Created interpreter for '%1'", lang);
+}
 
+Scriptface::Scriptface(const TsConfigGroup &config_, QObject *parent)
+    : QObject(parent), scriptEngine(new QScriptEngine(this)), 
fallbackRequest(0), config(config_)
+{
     QScriptEngine::QObjectWrapOptions wrapOptions;
     wrapOptions |= QScriptEngine::ExcludeSuperClassContents;
     wrapOptions |= QScriptEngine::ExcludeDeleteLater;
     wrapOptions |= QScriptEngine::ExcludeChildObjects;
     wrapOptions |= QScriptEngine::ExcludeSlots;
 
-    QScriptValue object = engine->newQObject(sface, 
QScriptEngine::QtOwnership, wrapOptions);
-    engine->globalObject().setProperty(SFNAME, object);
-
-    // Store scriptface
-    m_sface[lang] = sface;
-
-    //dbgout("=====> Created interpreter for '%1'", lang);
+    QScriptValue object = scriptEngine->newQObject(this, 
QScriptEngine::QtOwnership, wrapOptions);
+    scriptEngine->globalObject().setProperty(SFNAME, object);
 }
 
-Scriptface::Scriptface(QScriptEngine *scriptEngine_, const TsConfigGroup 
&config_, QObject *parent)
-    : QObject(parent), scriptEngine(scriptEngine_), fallbackRequest(0), 
config(config_)
-{}
-
 Scriptface::~Scriptface()
 {
     qDeleteAll(loadedPmapHandles);
-- 
1.8.5.2

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to