You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by rj...@apache.org on 2014/02/13 06:08:08 UTC
svn commit: r1567849 [3/17] - in /bloodhound/vendor/trac: 1.0-stable/
current/ current/contrib/ current/contrib/cgi-bin/
current/contrib/workflow/ current/doc/ current/doc/utils/
current/sample-plugins/ current/sample-plugins/permissions/ current/sampl...
Modified: bloodhound/vendor/trac/current/trac/config.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/config.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/config.py (original)
+++ bloodhound/vendor/trac/current/trac/config.py Thu Feb 13 05:08:02 2014
@@ -18,12 +18,13 @@ from ConfigParser import ConfigParser
from copy import deepcopy
import os.path
+from genshi.builder import tag
from trac.admin import AdminCommandError, IAdminCommandProvider
from trac.core import *
from trac.util import AtomicFile, as_bool
-from trac.util.compat import cleandoc
+from trac.util.compat import cleandoc, wait_for_file_mtime_change
from trac.util.text import printout, to_unicode, CRLF
-from trac.util.translation import _, N_
+from trac.util.translation import _, N_, tag_
__all__ = ['Configuration', 'ConfigSection', 'Option', 'BoolOption',
'IntOption', 'FloatOption', 'ListOption', 'ChoiceOption',
@@ -43,6 +44,12 @@ class ConfigurationError(TracError):
"""Exception raised when a value in the configuration file is not valid."""
title = N_('Configuration Error')
+ def __init__(self, message=None, title=None, show_traceback=False):
+ if message is None:
+ message = _("Look in the Trac log for more information.")
+ super(ConfigurationError, self).__init__(message, title,
+ show_traceback)
+
class Configuration(object):
"""Thin layer over `ConfigParser` from the Python standard library.
@@ -234,10 +241,12 @@ class Configuration(object):
# At this point, all the strings in `sections` are UTF-8 encoded `str`
try:
+ wait_for_file_mtime_change(self.filename)
with AtomicFile(self.filename, 'w') as fileobj:
fileobj.write('# -*- coding: utf-8 -*-\n\n')
- for section, options in sections:
- fileobj.write('[%s]\n' % section)
+ for section_str, options in sections:
+ fileobj.write('[%s]\n' % section_str)
+ section = to_unicode(section_str)
for key_str, val_str in options:
if to_unicode(key_str) in self[section].overridden:
fileobj.write('# %s = <inherited>\n' % key_str)
@@ -287,7 +296,8 @@ class Configuration(object):
def touch(self):
if self.filename and os.path.isfile(self.filename) \
- and os.access(self.filename, os.W_OK):
+ and os.access(self.filename, os.W_OK):
+ wait_for_file_mtime_change(self.filename)
os.utime(self.filename, None)
def set_defaults(self, compmgr=None):
@@ -296,14 +306,15 @@ class Configuration(object):
Values already set in the configuration are not overridden.
"""
- for section, default_options in self.defaults(compmgr).items():
- for name, value in default_options.items():
- if not self.parser.has_option(_to_utf8(section),
- _to_utf8(name)):
- if any(parent[section].contains(name, defaults=False)
- for parent in self.parents):
- value = None
- self.set(section, name, value)
+ for (section, name), option in Option.get_registry(compmgr).items():
+ if not self.parser.has_option(_to_utf8(section), _to_utf8(name)):
+ value = option.default
+ if any(parent[section].contains(name, defaults=False)
+ for parent in self.parents):
+ value = None
+ if value is not None:
+ value = option.dumps(value)
+ self.set(section, name, value)
class Section(object):
@@ -325,7 +336,7 @@ class Section(object):
for parent in self.config.parents:
if parent[self.name].contains(key, defaults=False):
return True
- return defaults and Option.registry.has_key((self.name, key))
+ return defaults and (self.name, key) in Option.registry
__contains__ = contains
@@ -567,7 +578,9 @@ class Option(object):
"""Descriptor for configuration options."""
registry = {}
- accessor = Section.get
+
+ def accessor(self, section, name, default):
+ return section.get(name, default)
@staticmethod
def get_registry(compmgr=None):
@@ -606,26 +619,44 @@ class Option(object):
return value
def __set__(self, instance, value):
- raise AttributeError, 'can\'t set attribute'
+ raise AttributeError(_("Setting attribute is not allowed."))
def __repr__(self):
return '<%s [%s] "%s">' % (self.__class__.__name__, self.section,
self.name)
+ def dumps(self, value):
+ """Return the value as a string to write to a trac.ini file"""
+ if value is None:
+ return ''
+ if value is True:
+ return 'enabled'
+ if value is False:
+ return 'disabled'
+ if isinstance(value, unicode):
+ return value
+ return to_unicode(value)
+
class BoolOption(Option):
"""Descriptor for boolean configuration options."""
- accessor = Section.getbool
+
+ def accessor(self, section, name, default):
+ return section.getbool(name, default)
class IntOption(Option):
"""Descriptor for integer configuration options."""
- accessor = Section.getint
+
+ def accessor(self, section, name, default):
+ return section.getint(name, default)
class FloatOption(Option):
"""Descriptor for float configuration options."""
- accessor = Section.getfloat
+
+ def accessor(self, section, name, default):
+ return section.getfloat(name, default)
class ListOption(Option):
@@ -642,6 +673,11 @@ class ListOption(Option):
def accessor(self, section, name, default):
return section.getlist(name, default, self.sep, self.keep_empty)
+ def dumps(self, value):
+ if isinstance(value, (list, tuple)):
+ return self.sep.join(Option.dumps(self, v) or '' for v in value)
+ return Option.dumps(self, value)
+
class ChoiceOption(Option):
"""Descriptor for configuration options providing a choice among a list
@@ -673,10 +709,15 @@ class PathOption(Option):
Relative paths are resolved to absolute paths using the directory
containing the configuration file as the reference.
"""
- accessor = Section.getpath
+
+ def accessor(self, section, name, default):
+ return section.getpath(name, default)
class ExtensionOption(Option):
+ """Name of a component implementing `interface`. Raises a
+ `ConfigurationError` if the component cannot be found in the list of
+ active components implementing the interface."""
def __init__(self, section, name, interface, default=None, doc='',
doc_domain='tracini'):
@@ -690,11 +731,14 @@ class ExtensionOption(Option):
for impl in self.xtnpt.extensions(instance):
if impl.__class__.__name__ == value:
return impl
- raise AttributeError('Cannot find an implementation of the "%s" '
- 'interface named "%s". Please update the option '
- '%s.%s in trac.ini.'
- % (self.xtnpt.interface.__name__, value,
- self.section, self.name))
+ raise ConfigurationError(
+ tag_("Cannot find an implementation of the %(interface)s "
+ "interface named %(implementation)s. Please check "
+ "that the Component is enabled or update the option "
+ "%(option)s in trac.ini.",
+ interface=tag.tt(self.xtnpt.interface.__name__),
+ implementation=tag.tt(value),
+ option=tag.tt("[%s] %s" % (self.section, self.name))))
class OrderedExtensionsOption(ListOption):
@@ -716,9 +760,23 @@ class OrderedExtensionsOption(ListOption
return self
order = ListOption.__get__(self, instance, owner)
components = []
+ implementing_classes = []
for impl in self.xtnpt.extensions(instance):
+ implementing_classes.append(impl.__class__.__name__)
if self.include_missing or impl.__class__.__name__ in order:
components.append(impl)
+ not_found = sorted(set(order) - set(implementing_classes))
+ if not_found:
+ raise ConfigurationError(
+ tag_("Cannot find implementation(s) of the %(interface)s "
+ "interface named %(implementation)s. Please check "
+ "that the Component is enabled or update the option "
+ "%(option)s in trac.ini.",
+ interface=tag.tt(self.xtnpt.interface.__name__),
+ implementation=tag(
+ (', ' if idx != 0 else None, tag.tt(impl))
+ for idx, impl in enumerate(not_found)),
+ option=tag.tt("[%s] %s" % (self.section, self.name))))
def compare(x, y):
x, y = x.__class__.__name__, y.__class__.__name__
Modified: bloodhound/vendor/trac/current/trac/core.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/core.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/core.py (original)
+++ bloodhound/vendor/trac/current/trac/core.py Thu Feb 13 05:08:02 2014
@@ -125,6 +125,8 @@ class ComponentMeta(type):
return self
# The normal case where the component is not also the component manager
+ assert len(args) >= 1 and isinstance(args[0], ComponentManager), \
+ "First argument must be a ComponentManager instance"
compmgr = args[0]
self = compmgr.components.get(cls)
# Note that this check is racy, we intentionally don't use a
@@ -188,11 +190,14 @@ class ComponentManager(object):
"""Activate the component instance for the given class, or
return the existing instance if the component has already been
activated.
+
+ Note that `ComponentManager` components can't be activated
+ that way.
"""
if not self.is_enabled(cls):
return None
component = self.components.get(cls)
- if not component:
+ if not component and not issubclass(cls, ComponentManager):
if cls not in ComponentMeta._components:
raise TracError('Component "%s" not registered' % cls.__name__)
try:
Modified: bloodhound/vendor/trac/current/trac/db/__init__.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/__init__.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/__init__.py (original)
+++ bloodhound/vendor/trac/current/trac/db/__init__.py Thu Feb 13 05:08:02 2014
@@ -1,2 +1,15 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2005-2013 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
+
from trac.db.api import *
from trac.db.schema import *
Modified: bloodhound/vendor/trac/current/trac/db/api.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/api.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/api.py (original)
+++ bloodhound/vendor/trac/current/trac/db/api.py Thu Feb 13 05:08:02 2014
@@ -253,7 +253,7 @@ class DatabaseManager(Component):
def get_connection(self, readonly=False):
"""Get a database connection from the pool.
- If `readonly` is `True`, the returned connection will purposedly
+ If `readonly` is `True`, the returned connection will purposely
lack the `rollback` and `commit` methods.
"""
if not self._cnx_pool:
Modified: bloodhound/vendor/trac/current/trac/db/mysql_backend.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/mysql_backend.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/mysql_backend.py (original)
+++ bloodhound/vendor/trac/current/trac/db/mysql_backend.py Thu Feb 13 05:08:02 2014
@@ -14,14 +14,19 @@
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://trac.edgewall.org/log/.
-import os, re, types
+import os
+import re
+import sys
+import types
from genshi.core import Markup
from trac.core import *
from trac.config import Option
-from trac.db.api import IDatabaseConnector, _parse_db_str
+from trac.db.api import DatabaseManager, IDatabaseConnector, _parse_db_str, \
+ get_column_names
from trac.db.util import ConnectionWrapper, IterableCursor
+from trac.env import IEnvironmentSetupParticipant
from trac.util import as_int, get_pkginfo
from trac.util.compat import close_fds
from trac.util.text import exception_to_unicode, to_unicode
@@ -73,7 +78,7 @@ class MySQLConnector(Component):
* `read_default_group`: Configuration group to use from the default file
* `unix_socket`: Use a Unix socket at the given path to connect
"""
- implements(IDatabaseConnector)
+ implements(IDatabaseConnector, IEnvironmentSetupParticipant)
mysqldump_path = Option('trac', 'mysqldump_path', 'mysqldump',
"""Location of mysqldump for MySQL database backups""")
@@ -109,17 +114,29 @@ class MySQLConnector(Component):
host=None, port=None, params={}):
cnx = self.get_connection(path, log, user, password, host, port,
params)
+ self._verify_variables(cnx)
+ utf8_size = self._utf8_size(cnx)
cursor = cnx.cursor()
- utf8_size = {'utf8': 3, 'utf8mb4': 4}.get(cnx.charset)
if schema is None:
from trac.db_default import schema
for table in schema:
for stmt in self.to_sql(table, utf8_size=utf8_size):
self.log.debug(stmt)
cursor.execute(stmt)
+ self._verify_table_status(cnx)
cnx.commit()
- def _collist(self, table, columns, utf8_size=3):
+ def _utf8_size(self, cnx):
+ if cnx is None:
+ connector, args = DatabaseManager(self.env).get_connector()
+ cnx = connector.get_connection(**args)
+ charset = cnx.charset
+ cnx.close()
+ else:
+ charset = cnx.charset
+ return 4 if charset == 'utf8mb4' else 3
+
+ def _collist(self, table, columns, utf8_size):
"""Take a list of columns and impose limits on each so that indexing
works properly.
@@ -148,7 +165,9 @@ class MySQLConnector(Component):
cols.append(name)
return ','.join(cols)
- def to_sql(self, table, utf8_size=3):
+ def to_sql(self, table, utf8_size=None):
+ if utf8_size is None:
+ utf8_size = self._utf8_size(None)
sql = ['CREATE TABLE %s (' % table.name]
coldefs = []
for column in table.columns:
@@ -235,6 +254,83 @@ class MySQLConnector(Component):
raise TracError(_("No destination file created"))
return dest_file
+ # IEnvironmentSetupParticipant methods
+
+ def environment_created(self):
+ pass
+
+ def environment_needs_upgrade(self, db):
+ if getattr(self, 'required', False):
+ self._verify_table_status(db)
+ self._verify_variables(db)
+ return False
+
+ def upgrade_environment(self, db):
+ pass
+
+ UNSUPPORTED_ENGINES = ('MyISAM', 'EXAMPLE', 'ARCHIVE', 'CSV', 'ISAM')
+
+ def _verify_table_status(self, db):
+ from trac.db_default import schema
+ tables = [t.name for t in schema]
+ cursor = db.cursor()
+ cursor.execute("SHOW TABLE STATUS WHERE name IN (%s)" %
+ ','.join(('%s',) * len(tables)),
+ tables)
+ cols = get_column_names(cursor)
+ rows = [dict(zip(cols, row)) for row in cursor]
+
+ engines = [row['Name'] for row in rows
+ if row['Engine'] in self.UNSUPPORTED_ENGINES]
+ if engines:
+ raise TracError(_(
+ "All tables must be created as InnoDB or NDB storage engine "
+ "to support transactions. The following tables have been "
+ "created as storage engine which doesn't support "
+ "transactions: %(tables)s", tables=', '.join(engines)))
+
+ non_utf8bin = [row['Name'] for row in rows
+ if row['Collation'] not in ('utf8_bin', 'utf8mb4_bin',
+ None)]
+ if non_utf8bin:
+ raise TracError(_("All tables must be created with utf8_bin or "
+ "utf8mb4_bin as collation. The following tables "
+ "don't have the collations: %(tables)s",
+ tables=', '.join(non_utf8bin)))
+
+ SUPPORTED_COLLATIONS = (('utf8', 'utf8_bin'), ('utf8mb4', 'utf8mb4_bin'))
+
+ def _verify_variables(self, db):
+ cursor = db.cursor()
+ cursor.execute("SHOW VARIABLES WHERE variable_name IN ("
+ "'default_storage_engine','storage_engine',"
+ "'default_tmp_storage_engine',"
+ "'character_set_database','collation_database')")
+ vars = dict((row[0].lower(), row[1]) for row in cursor)
+
+ engine = vars.get('default_storage_engine') or \
+ vars.get('storage_engine')
+ if engine in self.UNSUPPORTED_ENGINES:
+ raise TracError(_("The current storage engine is %(engine)s. "
+ "It must be InnoDB or NDB storage engine to "
+ "support transactions.", engine=engine))
+
+ tmp_engine = vars.get('default_tmp_storage_engine')
+ if tmp_engine in self.UNSUPPORTED_ENGINES:
+ raise TracError(_("The current storage engine for TEMPORARY "
+ "tables is %(engine)s. It must be InnoDB or NDB "
+ "storage engine to support transactions.",
+ engine=tmp_engine))
+
+ charset = vars['character_set_database']
+ collation = vars['collation_database']
+ if (charset, collation) not in self.SUPPORTED_COLLATIONS:
+ raise TracError(_(
+ "The charset and collation of database are '%(charset)s' and "
+ "'%(collation)s'. The database must be created with one of "
+ "%(supported)s.", charset=charset, collation=collation,
+ supported=repr(self.SUPPORTED_COLLATIONS)))
+
class MySQLConnection(ConnectionWrapper):
"""Connection wrapper for MySQL."""
@@ -251,11 +347,15 @@ class MySQLConnection(ConnectionWrapper)
port = 3306
opts = {}
for name, value in params.iteritems():
- if name in ('init_command', 'read_default_file',
- 'read_default_group', 'unix_socket'):
- opts[name] = value
+ key = name.encode('utf-8')
+ if name == 'read_default_group':
+ opts[key] = value
+ elif name == 'init_command':
+ opts[key] = value.encode('utf-8')
+ elif name in ('read_default_file', 'unix_socket'):
+ opts[key] = value.encode(sys.getfilesystemencoding())
elif name in ('compress', 'named_pipe'):
- opts[name] = as_int(value, 0)
+ opts[key] = as_int(value, 0)
else:
self.log.warning("Invalid connection string parameter '%s'",
name)
Modified: bloodhound/vendor/trac/current/trac/db/pool.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/pool.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/pool.py (original)
+++ bloodhound/vendor/trac/current/trac/db/pool.py Thu Feb 13 05:08:02 2014
@@ -26,7 +26,7 @@ from trac.util.text import exception_to_
from trac.util.translation import _
-class TimeoutError(Exception):
+class TimeoutError(TracError):
"""Exception raised by the connection pool when no connection has become
available after a given timeout."""
@@ -93,7 +93,7 @@ class ConnectionPoolBackend(object):
deferred = num == 1 and isinstance(cnx, tuple)
err = None
if deferred:
- # Potentially lenghty operations must be done without lock held
+ # Potentially lengthy operations must be done without lock held
op, cnx = cnx
try:
if op == 'ping':
@@ -214,4 +214,3 @@ class ConnectionPool(object):
def shutdown(self, tid=None):
_backend.shutdown(tid)
-
Modified: bloodhound/vendor/trac/current/trac/db/postgres_backend.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/postgres_backend.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/postgres_backend.py (original)
+++ bloodhound/vendor/trac/current/trac/db/postgres_backend.py Thu Feb 13 05:08:02 2014
@@ -260,4 +260,3 @@ class PostgreSQLConnection(ConnectionWra
def cursor(self):
return IterableCursor(self.cnx.cursor(), self.log)
-
Modified: bloodhound/vendor/trac/current/trac/db/sqlite_backend.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/sqlite_backend.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/sqlite_backend.py (original)
+++ bloodhound/vendor/trac/current/trac/db/sqlite_backend.py Thu Feb 13 05:08:02 2014
@@ -255,7 +255,8 @@ class SQLiteConnection(ConnectionWrapper
and sqlite.version_info >= (2, 5, 0)
def __init__(self, path, log=None, params={}):
- assert have_pysqlite > 0
+ if have_pysqlite == 0:
+ raise TracError(_("Cannot load Python bindings for SQLite"))
self.cnx = None
if path != ':memory:':
if not os.access(path, os.F_OK):
Modified: bloodhound/vendor/trac/current/trac/db/tests/__init__.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/__init__.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/__init__.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/__init__.py Thu Feb 13 05:08:02 2014
@@ -1,3 +1,16 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2005-2013 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
+
import unittest
from trac.db.tests import api, mysql_test, postgres_test, util
@@ -15,4 +28,3 @@ def suite():
if __name__ == '__main__':
unittest.main(defaultTest='suite')
-
Modified: bloodhound/vendor/trac/current/trac/db/tests/api.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/api.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/api.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/api.py Thu Feb 13 05:08:02 2014
@@ -1,4 +1,15 @@
# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2005-2013 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
from __future__ import with_statement
@@ -28,7 +39,8 @@ class Error(Exception):
def make_env(get_cnx):
- return Mock(components={DatabaseManager:
+ from trac.core import ComponentManager
+ return Mock(ComponentManager, components={DatabaseManager:
Mock(get_connection=get_cnx,
_transaction_local=ThreadLocal(wdb=None, rdb=None))})
@@ -344,10 +356,10 @@ class ConnectionTestCase(unittest.TestCa
def suite():
suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(ParseConnectionStringTestCase, 'test'))
- suite.addTest(unittest.makeSuite(StringsTestCase, 'test'))
- suite.addTest(unittest.makeSuite(ConnectionTestCase, 'test'))
- suite.addTest(unittest.makeSuite(WithTransactionTest, 'test'))
+ suite.addTest(unittest.makeSuite(ParseConnectionStringTestCase))
+ suite.addTest(unittest.makeSuite(StringsTestCase))
+ suite.addTest(unittest.makeSuite(ConnectionTestCase))
+ suite.addTest(unittest.makeSuite(WithTransactionTest))
return suite
Modified: bloodhound/vendor/trac/current/trac/db/tests/functional.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/functional.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/functional.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/functional.py Thu Feb 13 05:08:02 2014
@@ -1,4 +1,16 @@
-#!/usr/bin/python
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2009-2013 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
import os
from trac.tests.functional import *
@@ -18,12 +30,11 @@ class DatabaseBackupTestCase(FunctionalT
def functionalSuite(suite=None):
if not suite:
- import trac.tests.functional.testcases
- suite = trac.tests.functional.testcases.functionalSuite()
+ import trac.tests.functional
+ suite = trac.tests.functional.functionalSuite()
suite.addTest(DatabaseBackupTestCase())
return suite
if __name__ == '__main__':
unittest.main(defaultTest='functionalSuite')
-
Modified: bloodhound/vendor/trac/current/trac/db/tests/mysql_test.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/mysql_test.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/mysql_test.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/mysql_test.py Thu Feb 13 05:08:02 2014
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# Copyright (C) 2009 Edgewall Software
+# Copyright (C) 2010-2013 Edgewall Software
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
@@ -14,7 +14,9 @@
import unittest
from trac.db.mysql_backend import MySQLConnector
-from trac.test import EnvironmentStub
+from trac.db.schema import Table, Column, Index
+from trac.test import EnvironmentStub, Mock
+from trac.tests import compat
class MySQLTableAlterationSQLTest(unittest.TestCase):
@@ -50,10 +52,31 @@ class MySQLTableAlterationSQLTest(unitte
{'due': ('int', 'int')})
self.assertEqual([], list(sql))
+ def test_utf8_size(self):
+ connector = MySQLConnector(self.env)
+ self.assertEqual(3, connector._utf8_size(Mock(charset='utf8')))
+ self.assertEqual(4, connector._utf8_size(Mock(charset='utf8mb4')))
+
+ def test_to_sql(self):
+ connector = MySQLConnector(self.env)
+ tab = Table('blah', key=('col1', 'col2'))[Column('col1'),
+ Column('col2'),
+ Index(['col2'])]
+
+ sql = list(connector.to_sql(tab, utf8_size=3))
+ self.assertEqual(2, len(sql))
+ self.assertIn(' PRIMARY KEY (`col1`(166),`col2`(166))', sql[0])
+ self.assertIn(' blah_col2_idx ON blah (`col2`(255))', sql[1])
+
+ sql = list(connector.to_sql(tab, utf8_size=4))
+ self.assertEqual(2, len(sql))
+ self.assertIn(' PRIMARY KEY (`col1`(125),`col2`(125))', sql[0])
+ self.assertIn(' blah_col2_idx ON blah (`col2`(191))', sql[1])
+
def suite():
suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(MySQLTableAlterationSQLTest, 'test'))
+ suite.addTest(unittest.makeSuite(MySQLTableAlterationSQLTest))
return suite
Modified: bloodhound/vendor/trac/current/trac/db/tests/postgres_test.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/postgres_test.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/postgres_test.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/postgres_test.py Thu Feb 13 05:08:02 2014
@@ -1,4 +1,15 @@
# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2009-2013 Edgewall Software
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://trac.edgewall.org/wiki/TracLicense.
+#
+# This software consists of voluntary contributions made by many
+# individuals. For the exact contribution history, see the revision
+# history and logs, available at http://trac.edgewall.org/log/.
import re
import unittest
@@ -149,8 +160,8 @@ class PostgresTableAlterationSQLTest(uni
def suite():
suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(PostgresTableCreationSQLTest, 'test'))
- suite.addTest(unittest.makeSuite(PostgresTableAlterationSQLTest, 'test'))
+ suite.addTest(unittest.makeSuite(PostgresTableCreationSQLTest))
+ suite.addTest(unittest.makeSuite(PostgresTableAlterationSQLTest))
return suite
Modified: bloodhound/vendor/trac/current/trac/db/tests/util.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/db/tests/util.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/db/tests/util.py (original)
+++ bloodhound/vendor/trac/current/trac/db/tests/util.py Thu Feb 13 05:08:02 2014
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
-# Copyright (C) 2010 Edgewall Software
+# Copyright (C) 2010-2013 Edgewall Software
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
@@ -34,7 +34,7 @@ class SQLEscapeTestCase(unittest.TestCas
def suite():
suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(SQLEscapeTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(SQLEscapeTestCase))
return suite
if __name__ == '__main__':
Modified: bloodhound/vendor/trac/current/trac/dist.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/dist.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/dist.py (original)
+++ bloodhound/vendor/trac/current/trac/dist.py Thu Feb 13 05:08:02 2014
@@ -85,8 +85,8 @@ try:
in_def = in_translator_comments = False
comment_tag = None
- encoding = parse_encoding(fileobj) \
- or options.get('encoding', 'iso-8859-1')
+ encoding = str(parse_encoding(fileobj) or
+ options.get('encoding', 'iso-8859-1'))
kwargs_maps = _DEFAULT_KWARGS_MAPS.copy()
if 'kwargs_maps' in options:
kwargs_maps.update(options['kwargs_maps'])
Modified: bloodhound/vendor/trac/current/trac/env.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/env.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/env.py (original)
+++ bloodhound/vendor/trac/current/trac/env.py Thu Feb 13 05:08:02 2014
@@ -275,7 +275,6 @@ class Environment(Component, ComponentMa
self.path = path
self.systeminfo = []
- self._href = self._abs_href = None
if create:
self.create(options)
@@ -326,17 +325,14 @@ class Environment(Component, ComponentMa
name = name_or_class.__module__ + '.' + name_or_class.__name__
return name.lower()
- @property
+ @lazy
def _component_rules(self):
- try:
- return self._rules
- except AttributeError:
- self._rules = {}
- for name, value in self.components_section.options():
- if name.endswith('.*'):
- name = name[:-2]
- self._rules[name.lower()] = value.lower() in ('enabled', 'on')
- return self._rules
+ _rules = {}
+ for name, value in self.components_section.options():
+ if name.endswith('.*'):
+ name = name[:-2]
+ _rules[name.lower()] = value.lower() in ('enabled', 'on')
+ return _rules
def is_component_enabled(self, cls):
"""Implemented to only allow activation of components that are
@@ -373,8 +369,10 @@ class Environment(Component, ComponentMa
break
cname = cname[:idx]
- # By default, all components in the trac package are enabled
- return component_name.startswith('trac.') or None
+ # By default, all components in the trac package except
+ # trac.test are enabled
+ return component_name.startswith('trac.') and \
+ not component_name.startswith('trac.test.') or None
def enable_component(self, cls):
"""Enable a component or module."""
@@ -599,7 +597,7 @@ class Environment(Component, ComponentMa
rows = self.db_query("""
SELECT value FROM system WHERE name='%sdatabase_version'
""" % ('initial_' if initial else ''))
- return rows and int(rows[0][0])
+ return int(rows[0][0]) if rows else False
def setup_config(self):
"""Load the configuration file."""
@@ -715,24 +713,21 @@ class Environment(Component, ComponentMa
DatabaseManager(self).shutdown()
return True
- @property
+ @lazy
def href(self):
"""The application root path"""
- if not self._href:
- self._href = Href(urlsplit(self.abs_href.base)[2])
- return self._href
+ return Href(urlsplit(self.abs_href.base).path)
- @property
+ @lazy
def abs_href(self):
"""The application URL"""
- if not self._abs_href:
- if not self.base_url:
- self.log.warn("base_url option not set in configuration, "
- "generated links may be incorrect")
- self._abs_href = Href('')
- else:
- self._abs_href = Href(self.base_url)
- return self._abs_href
+ if not self.base_url:
+ self.log.warn("base_url option not set in configuration, "
+ "generated links may be incorrect")
+ _abs_href = Href('')
+ else:
+ _abs_href = Href(self.base_url)
+ return _abs_href
class EnvironmentSetup(Component):
@@ -754,7 +749,7 @@ class EnvironmentSetup(Component):
self._update_sample_config()
def environment_needs_upgrade(self, db):
- dbver = self.env.get_version(db)
+ dbver = self.env.get_version()
if dbver == db_default.db_version:
return False
elif dbver > db_default.db_version:
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/admin.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/admin.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/admin.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/admin.css Thu Feb 13 05:08:02 2014
@@ -57,14 +57,14 @@ form.addnew p.help {
}
form.addnew div.field,
form.addnew div.buttons {
- padding: 0.2em 0.5em 0.2em 0;
+ padding: 0.2em 0;
white-space: nowrap;
}
-form.addnew div.buttons input { margin: 0 0.5em 0 0; }
+form.addnew div.field { padding-right: 1em; }
+form.addnew div.buttons input { margin: 0 1em 0 0; }
form.addnew p.hint,
form.addnew span.hint {
- padding-left: 0.5em;
- padding-right: 0.5em;
+ padding-left: 0.25em;
}
form.addnew p.help { margin-top: 0.5em; }
form.addnew br { display: none; }
@@ -103,6 +103,7 @@ table.listing .num { text-align: right;
.plugin .info dd { padding: 0; margin: 0; }
.plugin .listing { width: 100%; }
.plugin .listing th.sel input { margin-right: 0.5em; vertical-align: bottom; }
+.plugin .listing td.trac-module { background: #fcfcfc; }
.plugin .listing td { background: #fff; }
.trac-heading { margin: 0; }
.trac-name { font-family: monospace; }
@@ -125,9 +126,10 @@ table.trac-pluglist td { padding-left: 1
#permlist { margin-bottom: 2em; }
#permlist label, #grouplist label {
float: left;
- min-width: 13em;
- max-width: 33%;
- padding: 0 2em 0 0;
+ width: 13em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding: 0;
white-space: nowrap;
}
fieldset tr.field th { text-align: right; }
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/browser.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/browser.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/browser.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/browser.css Thu Feb 13 05:08:02 2014
@@ -146,7 +146,7 @@ table.chglist { margin-top: 0 }
vertical-align: middle;
}
.chglist td.author { color: #888 }
-.chglist td.change span.edit {
+.chglist td.change span {
border: 1px solid #999;
float: left;
margin: .2em .5em 0 0;
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/changeset.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/changeset.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/changeset.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/changeset.css Thu Feb 13 05:08:02 2014
@@ -1,5 +1,5 @@
/* Changeset overview */
-#overview .files { padding-top: 1em }
+#overview .files { padding: 1px 0 }
#overview .files ul { margin: 0; padding: 0 }
#overview .files li { list-style-type: none }
#overview .files li .comment { display: none }
@@ -22,7 +22,6 @@
margin-bottom: 0;
margin-top: 0;
}
-#overview .files { padding: 1px 0 }
.diff ul.props {
font-size: 90%;
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/code.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/code.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/code.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/code.css Thu Feb 13 05:08:02 2014
@@ -66,6 +66,9 @@ table.code tbody th :link, table.code tb
table.code tbody th :link:hover, table.code tbody th :visited:hover {
color: #000;
}
+table.code tbody tr:hover td {
+ background: #eed;
+}
table.code td {
font: normal 11px monospace;
overflow: hidden;
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/diff.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/diff.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/diff.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/diff.css Thu Feb 13 05:08:02 2014
@@ -2,16 +2,15 @@
#prefs fieldset { margin: 1em .5em .5em; padding: .5em 1em 0 }
/* Diff/change overview */
-#overview { line-height: 130%; margin-top: 1em; padding: .5em }
+#overview { line-height: 130%; margin-top: 1em; padding: .5em .5em .5em 0 }
#overview dt.property {
+ clear: left;
+ float: left;
font-weight: bold;
- padding-right: .25em;
- position: absolute; /* relies on #content { position: relative } */
- left: 0;
text-align: right;
width: 7.75em;
}
-#overview dd { margin-left: 8em }
+#overview dd { margin-left: 8.5em }
#overview .message { padding: 1em 0 1px }
#overview dd.message p, #overview dd.message ul, #overview dd.message ol,
@@ -132,6 +131,18 @@
padding: 1px 2px;
vertical-align: top;
}
+.diff table.trac-diff tbody tr:hover td {
+ background: #eed;
+}
+.diff table.trac-diff tbody.mod tr:hover td,
+.diff table.trac-diff tbody.add tr:hover td,
+.diff table.trac-diff tbody.rem tr:hover td {
+ background: #ddc;
+}
+.diff table.trac-diff tbody.mod tr:hover td del,
+.diff table.trac-diff tbody.mod tr:hover td ins {
+ background: #bb9;
+}
.diff table.trac-diff tbody.skipped td, .diff table.trac-diff thead td {
background: #f7f7f7;
border: 1px solid #d7d7d7;
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/jquery-ui/jquery-ui.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/jquery-ui/jquery-ui.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/jquery-ui/jquery-ui.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/jquery-ui/jquery-ui.css Thu Feb 13 05:08:02 2014
@@ -47,15 +47,15 @@
*
* http://docs.jquery.com/UI/Theming/API
*
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller&ffDefault=Verdana,Arial,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Bitstream%20Vera%20Sans\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',Helvetica,sans-serif&fwDefault=normal&fsDefault=13px&cornerRadius=.3em&bgColorHeader=ffffdd&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=80&borderColorHeader=bbbbbb&fcHeader=000000&iconColorHeader=707070&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=00&borderColorContent=bbbbbb&fcContent=000000&iconColorContent=222222&bgColorDefault=ffffff&bgTextureDefault=01_flat.png&bgImgOpacityDefault=0&borderColorDefault=bbbbbb&fcDefault=b00000&iconColorDefault=b00000&bgColorHover=ffffdd&bgTextureHover=01_flat.png&bgImgOpacityHover=0&borderColorHover=505050&fcHover=505050&iconColorHover=505050&bgColorActive=303030&bgTextureActive=03_highlight_soft.png&bgImgOpacityActive=30&borderColorActive=bbbbbb&fcActive=eeeeee&iconColorActive=d7d7d7&bgColorHighlight=c
0f0c0&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=c0f0c0&fcHighlight=363636&iconColorHighlight=4b954f&bgColorError=ffddcc&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=9b081d&fcError=500000&iconColorError=9b081d&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller&ffDefault=Verdana,Arial,'Bitstream%20Vera%20Sans',Helvetica,sans-serif&fwDefault=normal&fsDefault=13px&cornerRadius=.3em&bgColorHeader=ffffdd&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=80&borderColorHeader=bbbbbb&fcHeader=000000&iconColorHeader=707070&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=00&borderColorContent=bbbbbb&fcContent=000000&iconColorContent=222222&bgColorDefault=ffffff&bgTextureDefault=01_flat.png&bgImgOpacityDefault=0&borderColorDefault=bbbbbb&fcDefault=b00000&iconColorDefault=b00000&bgColorHover=ffffdd&bgTextureHover=01_flat.png&bgImgOpacityHover=0&borderColorHover=505050&fcHover=505050&iconColorHover=505050&bgColorActive=303030&bgTextureActive=03_highlight_soft.png&bgImgOpacityActive=30&borderColorActive=bbbbbb&fcActive=eeeeee&iconColorActive=d7d7d7&bgColorHighlight=c0f0c0&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=7
5&borderColorHighlight=c0f0c0&fcHighlight=363636&iconColorHighlight=4b954f&bgColorError=ffddcc&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=9b081d&fcError=500000&iconColorError=9b081d&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/
/* Component containers
----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Bitstream Vera Sans\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',Helvetica,sans-serif; font-size: 13px; }
+.ui-widget { font-family: Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif; font-size: 13px; }
.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'Bitstream Vera Sans\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\',Helvetica,sans-serif; font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #bbbbbb; background: #ffffff url(images/ui-bg_flat_00_ffffff_40x100.png) 50% 50% repeat-x; color: #000000; }
.ui-widget-content a { color: #000000; }
.ui-widget-header { border: 1px solid #bbbbbb; background: #ffffdd url(images/ui-bg_highlight-soft_80_ffffdd_1x100.png) 50% 50% repeat-x; color: #000000; font-weight: bold; }
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/report.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/report.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/report.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/report.css Thu Feb 13 05:08:02 2014
@@ -221,6 +221,8 @@ table.tickets tbody tr.fullrow th {
text-align: center;
font-size: 85%;
}
+table.tickets tbody tr p:first-child { margin-top: 0 }
+table.tickets tbody tr p:last-child { margin-bottom: 0 }
/* Batchmod Form */
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/roadmap.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/roadmap.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/roadmap.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/roadmap.css Thu Feb 13 05:08:02 2014
@@ -55,11 +55,8 @@ p.percent {
font-style: italic;
margin: 0 0 1em 0;
}
-.milestone .description { margin-left: 1em }
-
-/* Styles for the milestone view */
-.milestone .date { color: #888; font-style: italic; margin: 0 }
.milestone .description { margin: 1em 0 2em }
+
#stats {
float: right;
margin: 0 1em 2em 2em;
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/ticket.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/ticket.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/ticket.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/ticket.css Thu Feb 13 05:08:02 2014
@@ -132,8 +132,9 @@
ul.children {
margin-top: 1.5em;
padding-left: 2em;
- list-style-image: url(../inreply.png);
}
+ul.children, ul.children ul.children { list-style-image: url(../inreply.png) }
+ul.children ul, ul.children ol { list-style-image: none }
ul.children > li.child {
padding-left: .5em;
margin-bottom: 1.5em;
@@ -155,12 +156,6 @@ ul.children > li.child {
#changelog h3, #ticketchange h3 { box-shadow: none }
}
-div.comment ul { list-style: disc }
-div.comment ul ul, div.comment ol ul { list-style: circle }
-div.comment ul ul ul, div.comment ol ul ul { list-style: square }
-div.comment ul ol ul, div.comment ol ol ul { list-style: square }
-div.comment ol { list-style: decimal }
-
/* Comment editor */
#trac-comment-editor { margin-left: 2em; margin-bottom: 1em }
#trac-comment-editor div.trac-resizable { width: 100% }
@@ -242,4 +237,4 @@ fieldset.radio legend {
}
fieldset.radio label { padding-right: 1em }
-#content.ticket .trac-nav a { margin-left: 1em; }
\ No newline at end of file
+#content.ticket .trac-nav a { margin-left: 1em; }
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/trac.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/trac.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/trac.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/trac.css Thu Feb 13 05:08:02 2014
@@ -82,6 +82,8 @@ span:target {
/* Forms */
input, textarea, select { margin: 2px }
+/* Avoid to inherit white-space of its parent element for IE 11, #11376 */
+textarea { white-space: pre-wrap }
input, select { vertical-align: middle }
input[type=button], input[type=submit], input[type=reset], button {
*overflow: visible; /* Workaround too much margin on button in IE7 */
@@ -225,6 +227,26 @@ input[type=submit].trac-delete:hover {
#metanav {
padding-top: .3em;
}
+#metanav form.trac-logout {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+#metanav form.trac-logout button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ color: #b00;
+ border-bottom: 1px dotted #bbb;
+ cursor: pointer;
+}
+#metanav form.trac-logout button::-moz-focus-inner { border: 0; padding: 0 }
+#metanav form.trac-logout button:hover { background-color: #eee; color: #555 }
+#metanav form.trac-logout button:active { position: static }
/* Main navigation bar */
#mainnav {
@@ -311,7 +333,7 @@ input[type=submit].trac-delete:hover {
text-align: center;
}
#altlinks h3 { font-size: 12px; letter-spacing: normal; margin: 0 }
-#altlinks ul { list-style: none; margin: 0; }
+#altlinks ul { list-style: none; margin: 0; padding: 0 }
#altlinks li {
border-right: 1px solid #d7d7d7;
display: inline;
@@ -473,6 +495,11 @@ a.trac-diff:after { content: "â" }
div.compact > p:first-child { margin-top: 0 }
div.compact > p:last-child { margin-bottom: 0 }
+/* Styles related to RTL support */
+.rtl { direction: rtl; }
+.rtl div.wiki-toc { float: left; }
+.rtl .wiki-toc ul ul, .wiki-toc ol ol { padding-right: 1.2em }
+
a.missing:link, a.missing:visited, a.missing, span.missing,
a.forbidden, span.forbidden { color: #998 }
a.missing:hover { color: #000 }
@@ -532,6 +559,8 @@ table.wiki th {
padding: .1em .25em;
background-color: #f7f7f7;
}
+table.wiki tbody tr.even { background-color: #fcfcfc }
+table.wiki tbody tr.odd { background-color: #f7f7f7 }
.wikitoolbar {
margin-top: 0.3em;
@@ -649,7 +678,7 @@ table.listing tbody td a:hover, table.li
table.listing tbody tr { border-top: 1px solid #ddd }
table.listing tbody tr.even { background-color: #fcfcfc }
table.listing tbody tr.odd { background-color: #f7f7f7 }
-table.listing tbody tr:hover { background: #eed !important }
+table.listing tbody tr:hover td { background: #eed !important }
table.listing tbody tr.focus { background: #ddf !important }
table.listing pre { white-space: pre-wrap }
Modified: bloodhound/vendor/trac/current/trac/htdocs/css/wiki.css
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/css/wiki.css?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/htdocs/css/wiki.css (original)
+++ bloodhound/vendor/trac/current/trac/htdocs/css/wiki.css Thu Feb 13 05:08:02 2014
@@ -118,11 +118,6 @@ div.trac-modifiedby span.trac-print { di
div.trac-modifiedby span.trac-print { display: block; }
}
-/* Styles related to RTL support */
-.rtl { direction: rtl; }
-.rtl div.wiki-toc { float: left; }
-.rtl .wiki-toc ul ul, .wiki-toc ol ol { padding-right: 1.2em }
-
/* TracIni default value */
div.tracini td.default { font-size: 90% }
div.tracini td.nodefault {
Modified: bloodhound/vendor/trac/current/trac/htdocs/js/jquery-ui-i18n.js
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/js/jquery-ui-i18n.js?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
Binary files - no diff available.
Modified: bloodhound/vendor/trac/current/trac/htdocs/js/query.js
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/js/query.js?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
Binary files - no diff available.
Modified: bloodhound/vendor/trac/current/trac/htdocs/js/threaded_comments.js
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/js/threaded_comments.js?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
Binary files - no diff available.
Modified: bloodhound/vendor/trac/current/trac/htdocs/js/trac.js
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/htdocs/js/trac.js?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
Binary files - no diff available.
Modified: bloodhound/vendor/trac/current/trac/loader.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/loader.py?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/loader.py (original)
+++ bloodhound/vendor/trac/current/trac/loader.py Thu Feb 13 05:08:02 2014
@@ -239,7 +239,7 @@ def match_plugins_to_frames(plugins, fra
pass # Metadata not found
for plugin in plugins:
- base, ext = os.path.splitext(plugin['path'])
+ base, ext = os.path.splitext(plugin['path'].replace('\\', '/'))
if ext == '.egg' and egg_frames:
find_egg_frame_index(plugin)
else:
Modified: bloodhound/vendor/trac/current/trac/locale/ca/LC_MESSAGES/messages-js.po
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/locale/ca/LC_MESSAGES/messages-js.po?rev=1567849&r1=1567848&r2=1567849&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/locale/ca/LC_MESSAGES/messages-js.po (original)
+++ bloodhound/vendor/trac/current/trac/locale/ca/LC_MESSAGES/messages-js.po Thu Feb 13 05:08:02 2014
@@ -1,21 +1,22 @@
# Catalan translation of Trac-js.
-# Copyright © 2010 Edgewall Software
+# Copyright © 2010, 2013 Edgewall Software
# This file is distributed under the same license as the Trac project.
-# Jordi Mallach <jo...@sindominio.net>, 2010.
+# Jordi Mallach <jo...@sindominio.net>, 2010, 2013.
#
msgid ""
msgstr ""
-"Project-Id-Version: Trac 0.12\n"
+"Project-Id-Version: Trac 1.0-dev\n"
"Report-Msgid-Bugs-To: trac-dev@googlegroups.com\n"
-"POT-Creation-Date: 2013-01-27 11:21+0900\n"
-"PO-Revision-Date: 2010-06-18 13:55+0200\n"
+"POT-Creation-Date: 2013-03-21 22:54+0100\n"
+"PO-Revision-Date: 2013-04-25 17:42+0200\n"
"Last-Translator: Jordi Mallach <jo...@sindominio.net>\n"
"Language-Team: Catalan <ca...@dodds.net>\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Language: ca\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.6dev-r0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"Generated-By: Babel 0.9.6\n"
#: trac/htdocs/js/blame.js:84
msgid "(no changeset information)"
@@ -72,67 +73,65 @@ msgstr "%(title)s (feu clic per a amagar
#. and showMonthAfterYear
#: trac/htdocs/js/jquery-ui-i18n.js:4
msgid "$month$year"
-msgstr ""
+msgstr "$month$year"
#. TRANSLATOR: Link that closes the datepicker
#. TRANSLATOR: Link that closes the timepicker
#: trac/htdocs/js/jquery-ui-i18n.js:7 trac/htdocs/js/jquery-ui-i18n.js:39
msgid "Done"
-msgstr ""
+msgstr "Fet"
#. TRANSLATOR: Link to the previous month in the datepicker
#: trac/htdocs/js/jquery-ui-i18n.js:9
msgid "Prev"
-msgstr ""
+msgstr "Ant"
#. TRANSLATOR: Link to the next month in the datepicker
#: trac/htdocs/js/jquery-ui-i18n.js:11
msgid "Next"
-msgstr ""
+msgstr "Seg"
#. TRANSLATOR: Link to the current day in the datepicker
#: trac/htdocs/js/jquery-ui-i18n.js:13
msgid "Today"
-msgstr ""
+msgstr "Avui"
#. TRANSLATOR: Heading for the week-of-the-year column in the datepicker
#: trac/htdocs/js/jquery-ui-i18n.js:20
msgid "Wk"
-msgstr ""
+msgstr "St"
#. TRANSLATOR: Heading of the standalone timepicker
#: trac/htdocs/js/jquery-ui-i18n.js:30
msgid "Choose Time"
-msgstr ""
+msgstr "Selecciona l'hora"
#. TRANSLATOR: Time selector label
#: trac/htdocs/js/jquery-ui-i18n.js:32
msgid "Time"
-msgstr ""
+msgstr "Hora"
#. TRANSLATOR: Time labels in the timepicker
#: trac/htdocs/js/jquery-ui-i18n.js:34
-#, fuzzy
msgid "Hour"
-msgstr "o"
+msgstr "Hora"
#: trac/htdocs/js/jquery-ui-i18n.js:34
msgid "Minute"
-msgstr ""
+msgstr "Minut"
#: trac/htdocs/js/jquery-ui-i18n.js:34
msgid "Second"
-msgstr ""
+msgstr "Segon"
#: trac/htdocs/js/jquery-ui-i18n.js:35
msgid "Time Zone"
-msgstr ""
+msgstr "Fus horari"
#. TRANSLATOR: Link to pick the current time in the timepicker
#: trac/htdocs/js/jquery-ui-i18n.js:37
-#, fuzzy
msgid "Now"
-msgstr "no"
+msgstr "Ara"
#: trac/htdocs/js/query.js:132
msgid "A filter already exists for that property"
@@ -160,20 +159,20 @@ msgstr "i"
#: trac/htdocs/js/query.js:337
msgid " remove:"
-msgstr ""
+msgstr " suprimeix:"
#: trac/htdocs/js/query.js:347
msgid " add:"
-msgstr ""
+msgstr " afegeix:"
#: trac/htdocs/js/query.js:376
#, python-format
msgid "Select ticket %(id)s for modification"
-msgstr ""
+msgstr "Seleccioneu els %(id)s de tiquets a modificars"
#: trac/htdocs/js/query.js:387
msgid "Toggle selection of all tickets shown in this group"
-msgstr ""
+msgstr "Commuta la selecció de tots els tiquets mostrats en aquest grup"
#: trac/htdocs/js/trac.js:7
msgid "Link here"
@@ -227,4 +226,3 @@ msgstr "Enllaç a aquest diff"
#, python-format
msgid "Link to #%(id)s"
msgstr "Enllaç a #%(id)s"
-