﻿__group__	ticket	summary	component	milestone	type	severity	created	_description_	_changetime	_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	cf. TracDev/Proposals/Jinja/TracInterfaceCustomization	2023-09-23T22:47:00+02:00	Christian Boos
jomae	5390	Zip Archive: aliases, symlinks	version control/browser	next-major-releases	defect	normal	2007-05-30T04:13:24+02:00	"Downloading source from the Trac Browsers ""Zip Archive"" generates Mac aliases or symlinks as files instead of links."	2022-05-19T14:00:43+02:00	anonymous
jomae	13332	Use pytidylib for HTML5 validation with jinjachecker	general	1.6.1	enhancement	normal	2020-12-19T04:06:40+01:00	Discussed in comment:30:ticket:11988.	2023-02-27T00:53:42+01:00	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	"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
}}}"	2023-07-14T11:42:33+02:00	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	"[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)
}}}"	2023-02-23T22:38:38+01:00	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	[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+.	2022-09-11T00:59:20+02:00	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	"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)

}}}"	2023-05-31T19:23:26+02:00	Jun Omae
rjollos	12930	Spambayes dependency conflicts with dnspython	plugin/spamfilter	plugin - spam-filter	defect	normal	2017-10-14T04:33:30+02: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."	2019-12-26T09:56:32+01:00	Ryan J Ollos
rjollos	13275	Improve option documentation	general	1.6.1	task	normal	2020-04-25T04:11:04+02: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"	2023-02-23T22:31:25+01:00	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	Spam entries could have a submit that adds the offending IP address to the [wiki:BadIP] page.	2020-04-29T19:51:10+02:00	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	[[Image(Screen Shot 2020-05-05 at 10.49.06.jpg)]]	2020-05-06T01:37:52+02:00	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	"First mentioned in comment:18:ticket:11269.

This warning describes a configuration problem and we shouldn't display it to a non-admin user."	2020-12-29T09:45:39+01:00	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	"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%)]]"	2020-12-29T09:45:39+01:00	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	"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."	2023-02-23T22:31:25+01:00	anonymous
rjollos	13406	Replace jQuery UI Timepicker	web frontend	1.6.1	enhancement	normal	2021-05-27T22:38:42+02: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.	2023-02-23T22:31:25+01:00	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	"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`"	2023-02-05T04:48:10+01:00	Ryan J Ollos
rjollos	13613	Remove code for creating Windows installers	general	1.6.1	enhancement	normal	2023-09-23T22:59:55+02:00	Remove code in Makefile and elsewhere for creating the Windows installers.	2023-09-23T22:59:55+02:00	Ryan J Ollos
