Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package trytond for openSUSE:Factory checked in at 2025-05-12 16:48:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/trytond (Old) and /work/SRC/openSUSE:Factory/.trytond.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "trytond" Mon May 12 16:48:15 2025 rev:104 rq:1276459 version:6.0.62 Changes: -------- --- /work/SRC/openSUSE:Factory/trytond/trytond.changes 2025-03-12 20:13:57.416111650 +0100 +++ /work/SRC/openSUSE:Factory/.trytond.new.30101/trytond.changes 2025-05-12 16:51:48.992073787 +0200 @@ -1,0 +2,5 @@ +Sat May 3 10:54:59 UTC 2025 - Axel Braun <axel.br...@gmx.de> + +- Version 6.0.62 - Bugfix Release + +------------------------------------------------------------------- Old: ---- trytond-6.0.60.tar.gz New: ---- trytond-6.0.62.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ trytond.spec ++++++ --- /var/tmp/diff_new_pack.TauSGf/_old 2025-05-12 16:51:49.720104375 +0200 +++ /var/tmp/diff_new_pack.TauSGf/_new 2025-05-12 16:51:49.720104375 +0200 @@ -30,7 +30,7 @@ %endif Name: trytond -Version: %{majorver}.60 +Version: %{majorver}.62 Release: 0 Summary: An Enterprise Resource Planning (ERP) system License: GPL-3.0-or-later ++++++ trytond-6.0.60.tar.gz -> trytond-6.0.62.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/CHANGELOG new/trytond-6.0.62/CHANGELOG --- old/trytond-6.0.60/CHANGELOG 2025-03-04 22:15:51.000000000 +0100 +++ new/trytond-6.0.62/CHANGELOG 2025-05-02 22:11:01.000000000 +0200 @@ -1,4 +1,14 @@ +Version 6.0.62 - 2025-05-02 +--------------------------- +* Bug fixes (see mercurial logs for details) + + +Version 6.0.61 - 2025-04-02 +--------------------------- +* Bug fixes (see mercurial logs for details) + + Version 6.0.60 - 2025-03-04 --------------------------- * Bug fixes (see mercurial logs for details) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/PKG-INFO new/trytond-6.0.62/PKG-INFO --- old/trytond-6.0.60/PKG-INFO 2025-03-04 22:15:54.574889400 +0100 +++ new/trytond-6.0.62/PKG-INFO 2025-05-02 22:11:04.014848000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: trytond -Version: 6.0.60 +Version: 6.0.62 Summary: Tryton server Home-page: http://www.tryton.org/ Download-URL: http://downloads.tryton.org/6.0/ @@ -84,6 +84,7 @@ Dynamic: home-page Dynamic: keywords Dynamic: license +Dynamic: license-file Dynamic: platform Dynamic: project-url Dynamic: provides-extra diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/doc/topics/domain.rst new/trytond-6.0.62/doc/topics/domain.rst --- old/trytond-6.0.60/doc/topics/domain.rst 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/doc/topics/domain.rst 2025-03-29 10:07:55.000000000 +0100 @@ -40,6 +40,7 @@ .. note:: Negative operators match records for which any of the field before the last dot is empty. + Except if the operand is or contains ``None``. .. warning:: For :class:`trytond.model.fields.Reference`, an extra ending clause is diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/__init__.py new/trytond-6.0.62/trytond/__init__.py --- old/trytond-6.0.60/trytond/__init__.py 2025-02-16 11:58:15.000000000 +0100 +++ new/trytond-6.0.62/trytond/__init__.py 2025-04-03 00:39:39.000000000 +0200 @@ -7,7 +7,7 @@ from lxml import etree, objectify -__version__ = "6.0.60" +__version__ = "6.0.62" os.environ['TZ'] = 'UTC' if hasattr(time, 'tzset'): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/bus.py new/trytond-6.0.62/trytond/bus.py --- old/trytond-6.0.60/trytond/bus.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/bus.py 2025-03-29 10:07:55.000000000 +0100 @@ -180,6 +180,8 @@ for event in events: event.set() now = time.time() + # Keep connected + cursor.execute('SELECT 1') except Exception: logger.error('bus listener on "%s" crashed', database, exc_info=True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/cache.py new/trytond-6.0.62/trytond/cache.py --- old/trytond-6.0.60/trytond/cache.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/cache.py 2025-03-29 10:07:55.000000000 +0100 @@ -384,6 +384,8 @@ inst = cls._instances[name] inst._clear(dbname) cls._clean_last = datetime.now() + # Keep connected + cursor.execute('SELECT 1') except Exception: logger.error( "cache listener on '%s' crashed", dbname, exc_info=True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/ir/translation.py new/trytond-6.0.62/trytond/ir/translation.py --- old/trytond-6.0.60/trytond/ir/translation.py 2025-02-28 23:19:39.000000000 +0100 +++ new/trytond-6.0.62/trytond/ir/translation.py 2025-04-30 00:07:36.000000000 +0200 @@ -1354,8 +1354,7 @@ for translation in translations: if getattr(self, '_clean_%s' % translation.type)(translation): to_delete.append(translation.id) - elif translation.type in ('field', 'model', 'wizard_button', - 'help'): + elif translation.type in {'field', 'model', 'wizard_button'}: key = (translation.module, translation.lang, translation.type, translation.name, translation.res_id) if key in keys: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/model/fields/many2one.py new/trytond-6.0.62/trytond/model/fields/many2one.py --- old/trytond-6.0.60/trytond/model/fields/many2one.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/model/fields/many2one.py 2025-03-29 10:07:55.000000000 +0100 @@ -236,7 +236,10 @@ target_domain = [target_domain, rule_domain] _, expression = Target.search_domain( target_domain, tables=target_tables) - if operator.startswith('not') or operator == '!=': + if ((operator.startswith('not') and not ( + operator == 'not in' + and None in value)) + or (operator == '!=' and value is not None)): expression |= column == Null return expression diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/model/fields/reference.py new/trytond-6.0.62/trytond/model/fields/reference.py --- old/trytond-6.0.60/trytond/model/fields/reference.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/model/fields/reference.py 2025-03-29 10:07:55.000000000 +0100 @@ -189,7 +189,10 @@ Position(',', column) + Literal(1)), Model.id.sql_type().base).in_(query) & column.ilike(target + ',%')) - if operator.startswith('not') or operator == '!=': + if ((operator.startswith('not') and not ( + operator == 'not in' + and None in value)) + or (operator == '!=' and value is not None)): expression |= column == Null return expression diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/model/match.py new/trytond-6.0.62/trytond/model/match.py --- old/trytond-6.0.60/trytond/model/match.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/model/match.py 2025-03-29 10:07:55.000000000 +0100 @@ -11,6 +11,8 @@ and matching value as value''' for field_name, pattern_value in pattern.items(): value = getattr(self, field_name) + if value == '': + value = None if not match_none and value is None: continue field = self._fields[field_name] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/model/modelsql.py new/trytond-6.0.62/trytond/model/modelsql.py --- old/trytond-6.0.60/trytond/model/modelsql.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/model/modelsql.py 2025-03-29 10:07:56.000000000 +0100 @@ -359,6 +359,7 @@ gettext('ir.msg_required_validation_record', **cls.__names__(field_name))) for name, _, error in cls._sql_constraints: + name = cls._table + '_' + name if backend.TableHandler.convert_name(name) in str(exception): raise SQLConstraintError(gettext(error)) # Check foreign key in last because this can raise false positive diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/model/modelstorage.py new/trytond-6.0.62/trytond/model/modelstorage.py --- old/trytond-6.0.60/trytond/model/modelstorage.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/model/modelstorage.py 2025-04-30 00:14:03.000000000 +0200 @@ -990,7 +990,8 @@ to_create, to_create_translations = [], [] to_write, to_write_translations = [], [] languages = set() - while len(data): + data = data.copy() + while data: (row, _, translate) = \ process_lines(data, [], fields_def) if dispatch(to_create, to_write, row): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/tests/test_field_many2one.py new/trytond-6.0.62/trytond/tests/test_field_many2one.py --- old/trytond-6.0.60/trytond/tests/test_field_many2one.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/tests/test_field_many2one.py 2025-03-29 10:07:55.000000000 +0100 @@ -485,6 +485,21 @@ ]) self.assertListEqual(result, [record]) + result = Many2One.search([ + ('many2one.value', '!=', None), + ]) + self.assertListEqual(result, []) + + result = Many2One.search([ + ('many2one.value', 'not in', [1]), + ]) + self.assertListEqual(result, [record]) + + result = Many2One.search([ + ('many2one.value', 'not in', [1, None]), + ]) + self.assertListEqual(result, []) + @with_transaction() def test_context_attribute(self): "Test context on many2one attribute" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond/tests/test_field_reference.py new/trytond-6.0.62/trytond/tests/test_field_reference.py --- old/trytond-6.0.60/trytond/tests/test_field_reference.py 2025-01-11 02:26:34.000000000 +0100 +++ new/trytond-6.0.62/trytond/tests/test_field_reference.py 2025-03-29 10:07:55.000000000 +0100 @@ -373,6 +373,25 @@ self.assertListEqual(result, [reference]) + result = Reference.search([ + ('reference.name', '!=', None, Target.__name__), + ]) + + self.assertListEqual(result, []) + + result = Reference.search([ + ('reference.name', 'not in', ["Target"], Target.__name__), + ]) + + self.assertListEqual(result, [reference]) + + result = Reference.search([ + ('reference.name', 'not in', ["Target", None], + Target.__name__), + ]) + + self.assertListEqual(result, []) + @with_transaction() def test_write_string(self): "Test write reference string" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/trytond-6.0.60/trytond.egg-info/PKG-INFO new/trytond-6.0.62/trytond.egg-info/PKG-INFO --- old/trytond-6.0.60/trytond.egg-info/PKG-INFO 2025-03-04 22:15:53.000000000 +0100 +++ new/trytond-6.0.62/trytond.egg-info/PKG-INFO 2025-05-02 22:11:03.000000000 +0200 @@ -1,6 +1,6 @@ -Metadata-Version: 2.2 +Metadata-Version: 2.4 Name: trytond -Version: 6.0.60 +Version: 6.0.62 Summary: Tryton server Home-page: http://www.tryton.org/ Download-URL: http://downloads.tryton.org/6.0/ @@ -84,6 +84,7 @@ Dynamic: home-page Dynamic: keywords Dynamic: license +Dynamic: license-file Dynamic: platform Dynamic: project-url Dynamic: provides-extra