﻿__group__	ticket	summary	component	milestone	type	severity	created	_changetime	_description	_reporter
cboos	12681	Restore the t.e.o specific customization after the switch to Jinja2	project	1.6.1	defect	normal	2017-02-08T10:55:04+01:00	2023-09-23T22:47:00+02:00	cf. TracDev/Proposals/Jinja/TracInterfaceCustomization	Christian Boos
jomae	5390	Zip Archive: aliases, symlinks	version control/browser	next-major-releases	defect	normal	2007-05-30T04:13:24+02:00	2022-05-19T14:00:43+02:00	"Downloading source from the Trac Browsers ""Zip Archive"" generates Mac aliases or symlinks as files instead of links."	anonymous
jomae	13332	Use pytidylib for HTML5 validation with jinjachecker	general	1.6.1	enhancement	normal	2020-12-19T04:06:40+01:00	2023-02-27T00:53:42+01:00	Discussed in comment:30:ticket:11988.	Ryan J Ollos
jomae	13456	distutils is deprecated and will be removed in Python 3.12	general	1.6.1	defect	normal	2022-01-04T01:58:05+01:00	2023-07-14T11:42:33+02:00	"https://docs.python.org/3/whatsnew/3.10.html#distutils-deprecated

{{{
$ git grep -w distutils mirror/trunk
mirror/trunk:.travis.yml:      print_sitelib='from distutils.sysconfig import get_python_lib; print(get_python_lib())'
mirror/trunk:trac/dist.py:`distutils.command.build` and `setuptools.command.install_lib` classes
mirror/trunk:trac/dist.py:from distutils import log as distlog
mirror/trunk:trac/dist.py:from distutils.cmd import Command
mirror/trunk:trac/dist.py:from distutils.command.build import build as _build
mirror/trunk:trac/dist.py:from distutils.errors import DistutilsOptionError
}}}"	Jun Omae
jomae	13482	6 failures in unit-test with Babel 2.10.1	i18n	1.6.1	defect	normal	2022-04-24T01:10:16+02:00	2023-02-23T22:38:38+01:00	"[https://github.com/python-babel/babel/releases/tag/v2.10.1 Babel 2.10.1] has been released recently, which upgraded [https://github.com/python-babel/babel/blob/v2.10.1/CHANGES.rst#version-2100 CLDR 41] from [https://github.com/python-babel/babel/blob/v2.10.1/CHANGES.rst#version-291 CLDR 37].

----

{{{
======================================================================
FAIL: test_i18n_datetime_hint (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1250, in test_i18n_datetime_hint
    self.assertIn(datefmt.get_datetime_format_hint(fr),
AssertionError: 'd MMM y, HH:mm:ss' not found in ('d MMM yyyy HH:mm:ss', 'd MMM y HH:mm:ss', ""d MMM y 'à' HH:mm:ss"")

======================================================================
FAIL: test_i18n_format_datetime (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1175, in test_i18n_format_datetime
    self.assertIn(datefmt.format_datetime(t, tzinfo=tz, locale=fr),
AssertionError: '28 août 2010, 13:45:56' not found in ('28 août 2010 13:45:56', '28 août 2010 à 13:45:56')

======================================================================
FAIL: test_i18n_format_time (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1233, in test_i18n_format_time
    self.assertIn(datefmt.format_time(t, tzinfo=tz, locale=zh_CN),
AssertionError: '13:45:56' not found in ('下午01:45:56', '下午1:45:56')

======================================================================
FAIL: test_i18n_parse_date_datetime (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1367, in test_i18n_parse_date_datetime
    self.assertEqual(expected,
AssertionError: datet[16 chars]0, 8, 28, 13, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) != datet[16 chars]0, 8, 28, 1, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>)

======================================================================
FAIL: test_i18n_parse_date_datetime_meridiem (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1398, in test_i18n_parse_date_datetime_meridiem
    self.assertEqual(expected_am,
AssertionError: datet[16 chars]1, 2, 22, 0, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) != datet[16 chars]1, 2, 22, 12, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>)

======================================================================
FAIL: test_i18n_parse_date_roundtrip (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/jun66j5/src/tracdev/git/trac/util/tests/datefmt.py"", line 1454, in test_i18n_parse_date_roundtrip
    self.assertEqual(tz_t, actual,
AssertionError: datet[16 chars]0, 8, 28, 13, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) != datet[16 chars]0, 8, 28, 1, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) : datetime.datetime(2010, 8, 28, 13, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) != datetime.datetime(2010, 8, 28, 1, 45, 56, tzinfo=<FixedOffset ""GMT +2:00"" 2:00:00>) ('2010年8月28日 B1:45:56' Locale('zh', territory='TW', script='Hant'))

----------------------------------------------------------------------
Ran 2762 tests in 41.802s

FAILED (failures=6, skipped=5)
}}}"	Jun Omae
jomae	13493	Make compatible with Python 3, Mercurial 6.2+ and Trac 1.5.3+	plugin/mercurial		defect	normal	2022-08-31T09:08:17+02:00	2022-09-11T00:59:20+02:00	[https://www.mercurial-scm.org/wiki/Release6.2 Mercurial 6.2] has been released on 2022-07-11. The release supports only Python 3.6+ but mercurial plugin doesn't support Python 3 neither Trac 1.5.3+.	Jun Omae
jomae	13607	sqlite3.version_info is deprecated since Python 3.12 and will be removed in Python 3.14	database backend	1.6.1	defect	normal	2023-05-31T10:34:48+02:00	2023-05-31T19:23:26+02:00	"https://docs.python.org/3.12/library/sqlite3.html#sqlite3.version_info

After the following patch, it will retrieve `pysqlite3.version_info` only when `pysqlite3` is used.

{{{#!diff
diff --git a/contrib/make_status.py b/contrib/make_status.py
index 65278624a..ab4962a8d 100755
--- a/contrib/make_status.py
+++ b/contrib/make_status.py
@@ -51,8 +51,7 @@ PACKAGES = [
     (""Jinja2"",            'jinja2.__version__'),
     (""multipart"",         'multipart.__version__'),
     (""Babel"",             'babel.__version__'),
-    (""sqlite3"",           ('sqlite3.version',
-                           'sqlite3.sqlite_version')),
+    (""sqlite3"",           'sqlite3.sqlite_version'),
     (""PySqlite3"",         ('__main__._pysqlite3_version()',
                            'pysqlite3.dbapi2.sqlite_version')),
     (""PyMySQL"",           'pymysql.__version__'),
diff --git a/trac/db/sqlite_backend.py b/trac/db/sqlite_backend.py
index dc0bf4ca9..8f38af387 100644
--- a/trac/db/sqlite_backend.py
+++ b/trac/db/sqlite_backend.py
@@ -37,13 +37,13 @@ try:
     import pysqlite3.dbapi2 as sqlite
 except ImportError:
     import sqlite3 as sqlite
+    pysqlite3_version = None
+else:
+    pysqlite3_version = get_pkginfo(sqlite).get('version', '%d.%d.%s' %
+                                                           sqlite.version_info)

 sqlite_version = sqlite.sqlite_version_info
 sqlite_version_string = sqlite.sqlite_version
-pysqlite_version = sqlite.version_info
-pysqlite_version_string = get_pkginfo(sqlite).get('version',
-                                                  '%d.%d.%s'
-                                                  % pysqlite_version)
 min_sqlite_version = (3, 0, 0)


@@ -273,7 +273,8 @@ class SQLiteConnector(Component):

     def get_system_info(self):
         yield 'SQLite', sqlite_version_string
-        yield 'pysqlite', pysqlite_version_string
+        if pysqlite3_version:
+            yield 'pysqlite3', pysqlite3_version

     @lazy
     def _extensions(self):
diff --git a/trac/tests/env.py b/trac/tests/env.py
index e0f949949..80a700208 100644
--- a/trac/tests/env.py
+++ b/trac/tests/env.py
@@ -520,8 +520,6 @@ class SystemInfoTestCase(unittest.TestCase):
             self.assertEqual(info_before, info_after)
             self.assertRegex(get_info(info_before, 'SQLite'),
                              r'^\d+(\.\d+)+$')
-            self.assertRegex(get_info(info_before, 'pysqlite'),
-                             r'^\d+(\.\d+)+$')
         else:
             self.fail(""Unknown value for dburi %s"" % self.env.dburi)

}}}"	Jun Omae
rjollos	12930	Spambayes dependency conflicts with dnspython	plugin/spamfilter	plugin - spam-filter	defect	normal	2017-10-14T04:33:30+02:00	2019-12-26T09:56:32+01:00	"{{{#!sh
$ pip install dnspython
Collecting dnspython
  Using cached dnspython-1.15.0-py2.py3-none-any.whl
Installing collected packages: dnspython
Successfully installed dnspython-1.15.0
$ python -c ""import dns""
$ pip install spambayes
Collecting spambayes
Collecting lockfile>=0.2 (from spambayes)
  Using cached lockfile-0.12.2-py2.py3-none-any.whl
Collecting pydns>=2.0 (from spambayes)
Installing collected packages: lockfile, pydns, spambayes
Successfully installed lockfile-0.12.2 pydns-2.3.6 spambayes-1.1b2
$ python -c ""import dns""
Traceback (most recent call last):
  File ""<string>"", line 1, in <module>
  File ""/Users/rjollos/Documents/Workspace/trac-dev/pve-spamfilter/lib/python2.7/site-packages/dns/__init__.py"", line 14, in <module>
    import Type,Opcode,Status,Class
ImportError: No module named Opcode
}}}

I edited SpamFilter@129 before determining that `pydns` is required by `spambayes`, so the suggestion of uninstall `pydns` is not the right solution.

Oddly, I have these same package versions installed in a virtualenv hosting trac-hacks.org and don't see the conflict for that case."	Ryan J Ollos
rjollos	13275	Improve option documentation	general	1.6.1	task	normal	2020-04-25T04:11:04+02:00	2023-02-23T22:31:25+01:00	"For 1.5.x there are a few tasks we could do on the option doc strings:
* Review and improve
* Ensure special values are documented. Example, what does the value `0` mean for [TracIni#changeset-max_diff_files-option changeset.max_diff_files]?
* Remove //(since ...)// for versions < 1.1"	Ryan J Ollos
rjollos	13276	Submit IP address to BadIP page	plugin/spamfilter	plugin - spam-filter	enhancement	normal	2020-04-29T19:51:10+02:00	2020-04-29T19:51:10+02:00	Spam entries could have a submit that adds the offending IP address to the [wiki:BadIP] page.	Ryan J Ollos
rjollos	13286	Add select all checkbox to Spam Filtering multiselect users page	plugin/spamfilter	plugin - spam-filter	enhancement	normal	2020-05-06T01:37:52+02:00	2020-05-06T01:37:52+02:00	[[Image(Screen Shot 2020-05-05 at 10.49.06.jpg)]]	Ryan J Ollos
rjollos	13301	"Remove ""Can't synchronize"" warnings or only show if user has TRAC_ADMIN"	version control	next-dev-1.7.x	enhancement	normal	2020-05-20T08:02:15+02:00	2020-12-29T09:45:39+01:00	"First mentioned in comment:18:ticket:11269.

This warning describes a configuration problem and we shouldn't display it to a non-admin user."	Ryan J Ollos
rjollos	13302	Display plugin enable/disable message near anchor	admin/web	next-dev-1.7.x	enhancement	normal	2020-05-20T08:08:07+02:00	2020-12-29T09:45:39+01:00	"See comment:1:ticket:11269.

On submit the page refreshes and scrolls to the anchor (e.g. `/admin/general/plugin#no21`). The message is displayed at the top of the page, but is not visible.

[[Image(Screen Shot 2020-05-19 at 23.07.28.jpg,100%)]]

[[Image(Screen Shot 2020-05-19 at 23.06.33.jpg,100%)]]"	Ryan J Ollos
rjollos	13311	Toolbar button to quote text as a discussion citation	general	1.6.1	enhancement	normal	2020-06-04T15:53:40+02:00	2023-02-23T22:31:25+01:00	"All Trac text input fields (like this ticket description field) have a little toolbar with buttons to make text bold or italic, insert a heading, a link, a code block, a horizontal rule, a new paragraph, a line break or an image.

It would be useful to have an additional button to quote the currently selected text as [WikiFormatting#DiscussionCitations DiscussionCitations] by adding `>` before each selected line."	anonymous
rjollos	13406	Replace jQuery UI Timepicker	web frontend	1.6.1	enhancement	normal	2021-05-27T22:38:42+02:00	2023-02-23T22:31:25+01:00	The [https://trentrichardson.com/examples/timepicker/ Timepicker add-on] is deprecated (see JavaScript). Since we are doing a major release, we should replace it with an equivalent that is maintained.	Ryan J Ollos
rjollos	13480	Incorrect cache invalidation for  BadIP and BadContent	plugin/spamfilter	plugin - spam-filter	defect	normal	2022-04-19T01:46:02+02:00	2023-02-05T04:48:10+01:00	"In a multiprocess environment the cache is not refreshed for other processes. Jun has suggested:

> We should use `patterns` method with `@cache` decorator and call `del self.patterns` when changing the wiki page.

The changes need to be implemented in:
* `IPRegexFilterStrategy`: `tracspamfilter/filters/ip_regex.py`
* `RegexFilterStrategy`: `tracspamfilter/filters/regex.py`"	Ryan J Ollos
rjollos	13613	Remove code for creating Windows installers	general	1.6.1	enhancement	normal	2023-09-23T22:59:55+02:00	2023-09-23T22:59:55+02:00	Remove code in Makefile and elsewhere for creating the Windows installers.	Ryan J Ollos
