Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kf6-ktexttemplate for
openSUSE:Factory checked in at 2026-09-11 18:00:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-ktexttemplate (Old)
and /work/SRC/openSUSE:Factory/.kf6-ktexttemplate.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-ktexttemplate"
Fri Sep 11 18:00:31 2026 rev:31 rq:1376721 version:6.30.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-ktexttemplate/kf6-ktexttemplate.changes
2026-08-17 17:00:38.117514029 +0200
+++
/work/SRC/openSUSE:Factory/.kf6-ktexttemplate.new.1265/kf6-ktexttemplate.changes
2026-09-11 18:03:05.773259381 +0200
@@ -1,0 +2,14 @@
+Tue Sep 8 09:22:33 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.30.0
+ * New feature release
+ * For more details please see:
+ * https://kde.org/announcements/frameworks/6/6.30.0
+- Changes since 6.29.0:
+ * Update dependency version to 6.30.0
+ * No longer explicitly include CMakeParseArguments
+ * Make date/time filter locale-aware
+ * Make Context accessible to filters
+ * Update version to 6.30.0
+
+-------------------------------------------------------------------
Old:
----
ktexttemplate-6.29.0.tar.xz
ktexttemplate-6.29.0.tar.xz.sig
New:
----
ktexttemplate-6.30.0.tar.xz
ktexttemplate-6.30.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kf6-ktexttemplate.spec ++++++
--- /var/tmp/diff_new_pack.h0jiAI/_old 2026-09-11 18:03:06.828303502 +0200
+++ /var/tmp/diff_new_pack.h0jiAI/_new 2026-09-11 18:03:06.832303670 +0200
@@ -19,11 +19,11 @@
%define qt6_version 6.9.0
%define rname ktexttemplate
-# Full KF6 version (e.g. 6.29.0)
+# Full KF6 version (e.g. 6.30.0)
%{!?_kf6_version: %global _kf6_version %{version}}
%bcond_without released
Name: kf6-ktexttemplate
-Version: 6.29.0
+Version: 6.30.0
Release: 0
Summary: String template library
License: LGPL-2.1-or-later
++++++ ktexttemplate-6.29.0.tar.xz -> ktexttemplate-6.30.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/CMakeLists.txt
new/ktexttemplate-6.30.0/CMakeLists.txt
--- old/ktexttemplate-6.29.0/CMakeLists.txt 2026-08-07 22:42:58.000000000
+0200
+++ new/ktexttemplate-6.30.0/CMakeLists.txt 2026-09-04 13:41:08.000000000
+0200
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.29)
-set(KF_VERSION "6.29.0") # handled by release scripts
+set(KF_VERSION "6.30.0") # handled by release scripts
project(KTextTemplate VERSION ${KF_VERSION})
include(FeatureSummary)
-find_package(ECM 6.29.0 CONFIG)
+find_package(ECM 6.30.0 CONFIG)
set_package_properties(ECM PROPERTIES
TYPE REQUIRED
DESCRIPTION "Extra CMake Modules."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/autotests/testfilters.cpp
new/ktexttemplate-6.30.0/autotests/testfilters.cpp
--- old/ktexttemplate-6.29.0/autotests/testfilters.cpp 2026-08-07
22:42:58.000000000 +0200
+++ new/ktexttemplate-6.30.0/autotests/testfilters.cpp 2026-09-04
13:41:08.000000000 +0200
@@ -18,9 +18,12 @@
#include "context.h"
#include "engine.h"
#include "ktexttemplate_paths.h"
+#include "qtlocalizer.h"
#include "template.h"
#include <util.h>
+using namespace Qt::Literals;
+
using Dict = QHash<QString, QVariant>;
Q_DECLARE_METATYPE(KTextTemplate::Error)
@@ -90,6 +93,8 @@
QStringLiteral(KTEXTTEMPLATE_PLUGIN_PATH),
appDirPath + QStringLiteral("/tests/") // For testtags.qs
});
+
+ m_engine->addDefaultLibrary(u"ktexttemplate_i18ntags"_s); // for
with_locale for testing date/time filters
}
void TestFilters::cleanupTestCase()
@@ -107,6 +112,7 @@
auto t = m_engine->newTemplate(input,
QLatin1String(QTest::currentDataTag()));
Context context(dict);
+ context.setLocalizer(QSharedPointer<AbstractLocalizer>(new
QtLocalizer(QLocale(QLocale::English, QLocale::UnitedStates))));
auto result = t->render(&context);
@@ -332,11 +338,29 @@
dict.insert(QStringLiteral("d"), d);
QTest::newRow("date01") << "{{ d|date:\"MM\" }}" << dict <<
QStringLiteral("01") << NoError;
- QTest::newRow("date02") << QStringLiteral("{{ d|date }}") << dict <<
d.toString(QStringLiteral("MMM. d, yyyy")) << NoError;
+ QTest::newRow("date02") << QStringLiteral("{{ d|date }}") << dict <<
QLocale(u"en_US"_s).toString(d.date(), QLocale::LongFormat) << NoError;
+ QTest::newRow("date03") << "{{ d|date:\"MMMM\" }}" << dict << u"January"_s
<< NoError;
+ QTest::newRow("date04") << "{{ d|date:\"SHORT_DATE_FORMAT\" }}" << dict <<
u"1/1/08"_s << NoError;
+ QTest::newRow("date05") << "{{ d|date:\"SHORT_DATETIME_FORMAT\" }}" <<
dict << u"1/1/08 12:00\u202fAM"_s << NoError;
dict.clear();
dict.insert(QStringLiteral("d"), QStringLiteral("fail_string"));
- QTest::newRow("date03") << "{{ d|date:\"MM\" }}" << dict << QString() <<
NoError;
+ QTest::newRow("date06") << "{{ d|date:\"MM\" }}" << dict << QString() <<
NoError;
+
+ dict.clear();
+ dict.insert(u"d"_s, QDate{2026, 7, 14});
+ QTest::newRow("date07") << u"{% with_locale \"de_DE\" %}{{
d|date:\"SHORT_DATE_FORMAT\" }}{% endwith_locale %}"_s << dict << u"14.07.26"_s
<< NoError;
+ QTest::newRow("date08") << u"{% with_locale \"de_DE\" %}{{ d|date }}{%
endwith_locale %}"_s << dict << u"Dienstag, 14. Juli 2026"_s << NoError;
+ QTest::newRow("date09") << u"{% with_locale \"de_DE\" %}{{
d|date:\"DATE_FORMAT\" }}{% endwith_locale %}"_s << dict << u"Dienstag, 14.
Juli 2026"_s
+ << NoError;
+ QTest::newRow("date10") << u"{% with_locale \"de_DE\" %}{{ d|date:\"MMMM\"
}}{% endwith_locale %}"_s << dict << u"Juli"_s << NoError;
+
+ dict.clear();
+ dict.insert(u"t"_s, QTime{13, 24, 56});
+ QTest::newRow("time01") << u"{{ t|time }}"_s << dict << u"1:24\u202fPM"_s
<< NoError;
+ QTest::newRow("time02") << u"{{ t|time:\"H'h'mm\" }}"_s << dict <<
u"13h24"_s << NoError;
+ QTest::newRow("time03") << u"{% with_locale \"de_DE\" %}{{ t|time }}{%
endwith_locale %}"_s << dict << u"13:24"_s << NoError;
+ QTest::newRow("time04") << u"{% with_locale \"de_DE\" %}{{
t|time:\"TIME_FORMAT\" }}{% endwith_locale %}"_s << dict << u"13:24"_s <<
NoError;
}
void TestFilters::testStringFilters_data()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ktexttemplate-6.29.0/cmake/modules/KF6TextTemplateMacros.cmake
new/ktexttemplate-6.30.0/cmake/modules/KF6TextTemplateMacros.cmake
--- old/ktexttemplate-6.29.0/cmake/modules/KF6TextTemplateMacros.cmake
2026-08-07 22:42:58.000000000 +0200
+++ new/ktexttemplate-6.30.0/cmake/modules/KF6TextTemplateMacros.cmake
2026-09-04 13:41:08.000000000 +0200
@@ -1,6 +1,3 @@
-
-include(CMakeParseArguments)
-
macro(ktexttemplate_adjust_plugin_name pluginname)
set_target_properties(${pluginname}
PROPERTIES PREFIX ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/defaultfilters/datetime.cpp
new/ktexttemplate-6.30.0/src/defaultfilters/datetime.cpp
--- old/ktexttemplate-6.29.0/src/defaultfilters/datetime.cpp 2026-08-07
22:42:58.000000000 +0200
+++ new/ktexttemplate-6.30.0/src/defaultfilters/datetime.cpp 2026-09-04
13:41:08.000000000 +0200
@@ -13,6 +13,8 @@
#include <QDateTime>
+using namespace Qt::Literals;
+
QVariant timeSince(const QDateTime &early, const QDateTime &late)
{
Q_ASSERT(early.isValid());
@@ -81,12 +83,26 @@
d = QDateTime::fromString(getSafeString(input), Qt::ISODateWithMs);
}
- auto argString = getSafeString(argument);
+ const QString argString = getSafeString(argument);
- if (!argString.get().isEmpty())
- return d.toString(argString);
+ // locale-specific format constants as defined in
https://docs.djangoproject.com/en/6.0/ref/templates/builtins/#date
+ if (argString.isEmpty() || argString == "DATE_FORMAT"_L1) {
+ return context()->localizer()->localizeDate(d.date(),
QLocale::LongFormat);
+ }
+ if (argString == "SHORT_DATE_FORMAT"_L1) {
+ return context()->localizer()->localizeDate(d.date(),
QLocale::ShortFormat);
+ }
+ if (argString == "DATETIME_FORMAT"_L1) {
+ return context()->localizer()->localizeDateTime(d,
QLocale::LongFormat);
+ }
+ if (argString == "SHORT_DATETIME_FORMAT"_L1) {
+ return context()->localizer()->localizeDateTime(d,
QLocale::ShortFormat);
+ }
- return d.toString(QStringLiteral("MMM. d, yyyy"));
+ // custom format
+ Q_ASSERT(!argString.isEmpty());
+ QLocale l(context()->localizer()->currentLocale());
+ return l.toString(d, argString);
}
QVariant TimeFilter::doFilter(const QVariant &input, const QVariant &argument,
bool autoescape) const
@@ -103,8 +119,15 @@
d = QDateTime::fromString(getSafeString(input), Qt::ISODateWithMs);
}
- auto argString = getSafeString(argument);
- return d.toString(argString);
+ const QString argString = getSafeString(argument);
+
+ if (argString.isEmpty() || argString == "TIME_FORMAT"_L1) {
+ return context()->localizer()->localizeTime(d.time(),
QLocale::ShortFormat);
+ }
+
+ Q_ASSERT(!argString.isEmpty());
+ QLocale l(context()->localizer()->currentLocale());
+ return l.toString(d.time(), argString);
}
QVariant TimeSinceFilter::doFilter(const QVariant &input, const QVariant
&argument, bool autoescape) const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/lib/engine_p.h
new/ktexttemplate-6.30.0/src/lib/engine_p.h
--- old/ktexttemplate-6.29.0/src/lib/engine_p.h 2026-08-07 22:42:59.000000000
+0200
+++ new/ktexttemplate-6.30.0/src/lib/engine_p.h 2026-09-04 13:41:08.000000000
+0200
@@ -36,6 +36,9 @@
void setFilters(const QHash<QString, Filter *> &filters)
{
+ for (const auto filter : filters) {
+ filter->forgottenBaseCtorRemoveInKF7();
+ }
m_filters = filters;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/lib/filter.cpp
new/ktexttemplate-6.30.0/src/lib/filter.cpp
--- old/ktexttemplate-6.29.0/src/lib/filter.cpp 2026-08-07 22:42:59.000000000
+0200
+++ new/ktexttemplate-6.30.0/src/lib/filter.cpp 2026-09-04 13:41:08.000000000
+0200
@@ -11,29 +11,50 @@
using namespace KTextTemplate;
-Filter::~Filter() = default;
+class KTextTemplate::FilterPrivate
+{
+public:
+ OutputStream *m_stream = nullptr;
+ Context *m_context = nullptr;
+};
+
+Filter::Filter() = default;
+Filter::~Filter()
+{
+ delete d_ptr;
+}
+
+void Filter::forgottenBaseCtorRemoveInKF7()
+{
+ d_ptr = nullptr;
+}
void Filter::setStream(KTextTemplate::OutputStream *stream)
{
- m_stream = stream;
+ if (!d_ptr) {
+ d_ptr = new FilterPrivate;
+ }
+ d_ptr->m_stream = stream;
}
SafeString Filter::escape(const QString &input) const
{
- return m_stream->escape(input);
+ return d_ptr->m_stream->escape(input);
}
SafeString Filter::escape(const SafeString &input) const
{
- if (input.isSafe())
- return {m_stream->escape(input), SafeString::IsSafe};
- return m_stream->escape(input);
+ if (input.isSafe()) {
+ return {d_ptr->m_stream->escape(input), SafeString::IsSafe};
+ }
+ return d_ptr->m_stream->escape(input);
}
SafeString Filter::conditionalEscape(const SafeString &input) const
{
- if (!input.isSafe())
- return m_stream->escape(input);
+ if (!input.isSafe()) {
+ return d_ptr->m_stream->escape(input);
+ }
return input;
}
@@ -41,3 +62,16 @@
{
return false;
}
+
+Context *Filter::context() const
+{
+ return d_ptr ? d_ptr->m_context : nullptr;
+}
+
+void Filter::setContext(KTextTemplate::Context *context)
+{
+ if (!d_ptr) {
+ d_ptr = new FilterPrivate;
+ }
+ d_ptr->m_context = context;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/lib/filter.h
new/ktexttemplate-6.30.0/src/lib/filter.h
--- old/ktexttemplate-6.29.0/src/lib/filter.h 2026-08-07 22:42:59.000000000
+0200
+++ new/ktexttemplate-6.30.0/src/lib/filter.h 2026-09-04 13:41:08.000000000
+0200
@@ -12,6 +12,7 @@
#ifndef KTEXTTEMPLATE_FILTER_H
#define KTEXTTEMPLATE_FILTER_H
+#include "context.h"
#include "ktexttemplate_export.h"
#include "outputstream.h"
#include "safestring.h"
@@ -23,6 +24,10 @@
namespace KTextTemplate
{
+class FilterExpression;
+class FilterPrivate;
+class ScriptableLibraryContainer;
+
/*!
\class KTextTemplate::Filter
\inheaderfile KTextTemplate/Filter
@@ -46,6 +51,7 @@
class KTEXTTEMPLATE_EXPORT Filter
{
public:
+ explicit Filter();
virtual ~Filter();
/*!
@@ -58,35 +64,56 @@
Escapes and returns \a input. The OutputStream::escape method is used to
escape \a input.
*/
- SafeString escape(const QString &input) const;
+ [[nodiscard]] SafeString escape(const QString &input) const;
/*!
Escapes and returns \a input. The OutputStream::escape method is used to
escape \a input.
*/
- SafeString escape(const SafeString &input) const;
+ [[nodiscard]] SafeString escape(const SafeString &input) const;
/*!
Escapes \a input if not already safe from further escaping and returns
it.
The OutputStream::escape method is used to escape \a input.
*/
- SafeString conditionalEscape(const SafeString &input) const;
+ [[nodiscard]] SafeString conditionalEscape(const SafeString &input) const;
+ // TODO KF7: pass context as an argument to doFilter, rather than holding
it temporarily as a member
/*!
Reimplement to filter \a input given \a argument.
\a autoescape determines whether the autoescape feature is currently on
or
off. Most filters will not use this.
*/
- virtual QVariant doFilter(const QVariant &input, const QVariant &argument
= {}, bool autoescape = {}) const = 0;
+ [[nodiscard]] virtual QVariant doFilter(const QVariant &input, const
QVariant &argument = {}, bool autoescape = {}) const = 0;
/*!
Reimplement to return whether this filter is safe.
*/
- virtual bool isSafe() const;
+ [[nodiscard]] virtual bool isSafe() const;
+
+ /*!
+ The context in which the filter is evaluated.
+ \warning Calling this is only valid from within doFilter itself!
+ */
+ [[nodiscard]] Context *context() const;
private:
- OutputStream *m_stream;
+ Q_DISABLE_COPY(Filter)
+ // TODO KF7 remove this
+ // this is needed as prior to KF 6.29 what became d below was uninitialized
+ // and the default ctor was inline, ie. older external subclasses would
leave us
+ // with an uninitialized member variable here
+ friend class ParserPrivate;
+ friend class ScriptableLibraryContainer;
+ KTEXTTEMPLATE_NO_EXPORT void forgottenBaseCtorRemoveInKF7();
+
+ // TODO KF7 remove this if Context becomes an argument to doFilter
+ friend class FilterExpression;
+ KTEXTTEMPLATE_NO_EXPORT void setContext(Context *context);
+
+ // can become a std::unique_ptr in KF7, but not before due to the above
issue
+ FilterPrivate *d_ptr = nullptr;
};
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/lib/filterexpression.cpp
new/ktexttemplate-6.30.0/src/lib/filterexpression.cpp
--- old/ktexttemplate-6.29.0/src/lib/filterexpression.cpp 2026-08-07
22:42:59.000000000 +0200
+++ new/ktexttemplate-6.30.0/src/lib/filterexpression.cpp 2026-09-04
13:41:08.000000000 +0200
@@ -203,7 +203,9 @@
const auto varString = getSafeString(var);
+ filter->setContext(c);
var = filter->doFilter(var, arg, c->autoEscape());
+ filter->setContext(nullptr);
if (var.userType() == qMetaTypeId<KTextTemplate::SafeString>() ||
var.userType() == qMetaTypeId<QString>()) {
if (filter->isSafe() && varString.isSafe()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ktexttemplate-6.29.0/src/lib/parser.cpp
new/ktexttemplate-6.30.0/src/lib/parser.cpp
--- old/ktexttemplate-6.29.0/src/lib/parser.cpp 2026-08-07 22:42:59.000000000
+0200
+++ new/ktexttemplate-6.30.0/src/lib/parser.cpp 2026-09-04 13:41:08.000000000
+0200
@@ -65,10 +65,11 @@
nodeIt.value()->setEngine(engine);
m_nodeFactories.insert(nodeIt.key(), nodeIt.value());
}
- auto filters = library->filters();
- for (auto filterIt = filters.begin(), filterEnd = filters.end(); filterIt
!= filterEnd; ++filterIt) {
- auto f = QSharedPointer<Filter>(filterIt.value());
- m_filters.insert(filterIt.key(), f);
+ const auto filters = library->filters();
+ for (const auto filterIt : filters.asKeyValueRange()) {
+ filterIt.second->forgottenBaseCtorRemoveInKF7();
+ auto f = QSharedPointer<Filter>(filterIt.second);
+ m_filters.insert(filterIt.first, f);
}
}
++++++ ktexttemplate-6.29.0.tar.xz.sig -> ktexttemplate-6.30.0.tar.xz.sig ++++++
---
/work/SRC/openSUSE:Factory/kf6-ktexttemplate/ktexttemplate-6.29.0.tar.xz.sig
2026-08-17 17:00:38.273519541 +0200
+++
/work/SRC/openSUSE:Factory/.kf6-ktexttemplate.new.1265/ktexttemplate-6.30.0.tar.xz.sig
2026-09-11 18:03:06.156275399 +0200
@@ -1,7 +1,7 @@
-----BEGIN PGP SIGNATURE-----
-iHUEABYKAB0WIQSQqWisqEU3zCe5nq8sjfWHptSqwQUCanZDVAAKCRAsjfWHptSq
-wdKWAQD5YxeGlAa4lpx2i3+adc/q2GBMY/17VGDwQqHdjIEEFQEAnBI2rfMuoPC0
-LaWhFU/ruYs13kXpcADFsj0JyopiIAg=
-=SLQz
+iHUEABYKAB0WIQSQqWisqEU3zCe5nq8sjfWHptSqwQUCapquVAAKCRAsjfWHptSq
+wf2AAP4rT93TyIBLGe1Nsa+l3xp/rh4SSaAitZ2m/o2GG6KMYwEAwnh0IvWh/ffm
+u7LljdLQQH912M/mWxPDl45O/bXubQk=
+=dCcK
-----END PGP SIGNATURE-----