From: Mike Bayer Date: Tue, 17 Sep 2013 20:03:15 +0000 (-0500) Subject: render "backports"/ "forward ports" automatically, only write out X-Git-Tag: rel_0_8_3~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b3041668610cb56200184bd2a52ad6d27ecf936;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git render "backports"/ "forward ports" automatically, only write out changelog once Conflicts: doc/build/changelog/changelog_09.rst --- diff --git a/doc/build/builder/changelog.py b/doc/build/builder/changelog.py index 41a403ad09..f96fd559e6 100644 --- a/doc/build/builder/changelog.py +++ b/doc/build/builder/changelog.py @@ -31,11 +31,13 @@ class EnvDirective(object): def env(self): return self.state.document.settings.env + @classmethod + def changes(cls, env): + return env.temp_data['ChangeLogDirective_changes'] + class ChangeLogDirective(EnvDirective, Directive): has_content = True - type_ = "change" - default_section = 'misc' def _organize_by_section(self, changes): @@ -45,6 +47,8 @@ class ChangeLogDirective(EnvDirective, Directive): bysection = collections.defaultdict(list) all_sections = set() for rec in changes: + if self.version not in rec['versions']: + continue inner_tag = rec['tags'].intersection(self.inner_tag_sort) if inner_tag: inner_tag = inner_tag.pop() @@ -68,26 +72,29 @@ class ChangeLogDirective(EnvDirective, Directive): bysection[(self.default_section, inner_tag)].append(rec) return bysection, all_sections - @classmethod - def changes(cls, env): - return env.temp_data['ChangeLogDirective_%s_changes' % cls.type_] - def _setup_run(self): self.sections = self.env.config.changelog_sections self.inner_tag_sort = self.env.config.changelog_inner_tag_sort + [""] - self.env.temp_data['ChangeLogDirective_%s_changes' % self.type_] = [] + if 'ChangeLogDirective_changes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_changes'] = [] self._parsed_content = _parse_content(self.content) + self.version = version = self._parsed_content.get('version', '') + self.env.temp_data['ChangeLogDirective_version'] = version + p = nodes.paragraph('', '',) self.state.nested_parse(self.content[1:], 0, p) def run(self): self._setup_run() + + if 'ChangeLogDirective_includes' in self.env.temp_data: + return [] + changes = self.changes(self.env) output = [] - self.version = version = self._parsed_content.get('version', '') - id_prefix = "%s-%s" % (self.type_, version) + id_prefix = "change-%s" % (self.version, ) topsection = self._run_top(id_prefix) output.append(topsection) @@ -161,7 +168,7 @@ class ChangeLogDirective(EnvDirective, Directive): text = _text_rawsource_from_node(para) to_hash = "%s %s" % (self.version, text[0:100]) - targetid = "%s-%s" % (self.type_, + targetid = "change-%s" % ( md5.md5(to_hash.encode('ascii', 'ignore') ).hexdigest()) targetnode = nodes.target('', '', ids=[targetid]) @@ -173,6 +180,16 @@ class ChangeLogDirective(EnvDirective, Directive): ) para.append(permalink) + if len(rec['versions']) > 1: + + backported_changes = rec['sorted_versions'][rec['sorted_versions'].index(self.version) + 1:] + if backported_changes: + backported = nodes.paragraph('') + backported.append(nodes.Text("This change is also ", "")) + backported.append(nodes.strong("", "backported")) + backported.append(nodes.Text(" to: %s" % ", ".join(backported_changes), "")) + para.append(backported) + insert_ticket = nodes.paragraph('') para.append(insert_ticket) @@ -187,7 +204,7 @@ class ChangeLogDirective(EnvDirective, Directive): if i > 0: insert_ticket.append(nodes.Text(", ", ", ")) else: - insert_ticket.append(nodes.Text(" ", " ")) + insert_ticket.append(nodes.Text("References: """)) i += 1 if render is not None: refuri = render % refname @@ -218,33 +235,69 @@ class ChangeLogDirective(EnvDirective, Directive): ) ) +class ChangeLogImportDirective(EnvDirective, Directive): + has_content = True + + def _setup_run(self): + if 'ChangeLogDirective_changes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_changes'] = [] + + def run(self): + self._setup_run() + + # tell ChangeLogDirective we're here, also prevent + # nested .. include calls + if 'ChangeLogDirective_includes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_includes'] = True + p = nodes.paragraph('', '',) + self.state.nested_parse(self.content, 0, p) + del self.env.temp_data['ChangeLogDirective_includes'] + + return [] class ChangeDirective(EnvDirective, Directive): has_content = True - type_ = "change" - parent_cls = ChangeLogDirective - def run(self): content = _parse_content(self.content) p = nodes.paragraph('', '',) sorted_tags = _comma_list(content.get('tags', '')) + declared_version = self.env.temp_data['ChangeLogDirective_version'] + versions = set(_comma_list(content.get("versions", ""))).difference(['']).\ + union([declared_version]) + + # if we don't refer to any other versions and we're in an include, + # skip + if len(versions) == 1 and 'ChangeLogDirective_includes' in self.env.temp_data: + return [] + + def int_ver(ver): + out = [] + for dig in ver.split("."): + try: + out.append(int(dig)) + except ValueError: + out.append(0) + return tuple(out) + rec = { 'tags': set(sorted_tags).difference(['']), 'tickets': set(_comma_list(content.get('tickets', ''))).difference(['']), 'pullreq': set(_comma_list(content.get('pullreq', ''))).difference(['']), 'changeset': set(_comma_list(content.get('changeset', ''))).difference(['']), 'node': p, - 'type': self.type_, + 'type': "change", "title": content.get("title", None), - 'sorted_tags': sorted_tags + 'sorted_tags': sorted_tags, + "versions": versions, + "sorted_versions": list(reversed(sorted(versions, key=int_ver))) } if "declarative" in rec['tags']: rec['tags'].add("orm") self.state.nested_parse(content['text'], 0, p) - self.parent_cls.changes(self.env).append(rec) + ChangeLogDirective.changes(self.env).append(rec) return [] @@ -279,6 +332,7 @@ def make_ticket_link(name, rawtext, text, lineno, inliner, def setup(app): app.add_directive('changelog', ChangeLogDirective) app.add_directive('change', ChangeDirective) + app.add_directive('changelog_imports', ChangeLogImportDirective) app.add_config_value("changelog_sections", [], 'env') app.add_config_value("changelog_inner_tag_sort", [], 'env') app.add_config_value("changelog_render_ticket", diff --git a/doc/build/changelog/changelog_07.rst b/doc/build/changelog/changelog_07.rst index be1dd98913..3a46580db5 100644 --- a/doc/build/changelog/changelog_07.rst +++ b/doc/build/changelog/changelog_07.rst @@ -9,6 +9,7 @@ .. change:: :tags: bug, orm :tickets: 2807 + :versions: 0.8.3, 0.9.0 Fixed bug where list instrumentation would fail to represent a setslice of ``[0:0]`` correctly, which in particular could occur @@ -19,6 +20,7 @@ .. change:: :tags: bug, sql :tickets: 2801 + :versions: 0.8.3, 0.9.0 Fixed regression dating back to 0.7.9 whereby the name of a CTE might not be properly quoted if it was referred to in multiple FROM clauses. @@ -26,6 +28,7 @@ .. change:: :tags: mysql, bug :tickets: 2791 + :versions: 0.8.3, 0.9.0 Updates to MySQL reserved words for versions 5.5, 5.6, courtesy Hanno Schlichting. @@ -33,6 +36,7 @@ .. change:: :tags: sql, bug, cte :tickets: 2783 + :versions: 0.8.3, 0.9.0 Fixed bug in common table expression system where if the CTE were used only as an ``alias()`` construct, it would not render using the @@ -41,13 +45,15 @@ .. change:: :tags: bug, sql :tickets: 2784 + :versions: 0.8.3, 0.9.0 Fixed bug in :class:`.CheckConstraint` DDL where the "quote" flag from a :class:`.Column` object would not be propagated. .. change:: - :tags: bug, orm - :tickets: 2699 + :tags: bug, orm + :tickets: 2699 + :versions: 0.8.1 Fixed bug when a query of the form: ``query(SubClass).options(subqueryload(Baseclass.attrname))``, @@ -62,6 +68,7 @@ .. change:: :tags: bug, orm :tickets: 2689 + :versions: 0.8.1 Fixed bug in unit of work whereby a joined-inheritance subclass could insert the row for the "sub" table @@ -71,6 +78,7 @@ .. change:: :tags: feature, postgresql :tickets: 2676 + :versions: 0.8.0 Added support for Postgresql's traditional SUBSTRING function syntax, renders as "SUBSTRING(x FROM y FOR z)" @@ -170,6 +178,7 @@ .. change:: :tags: sqlite, bug :tickets: 2568 + :versions: 0.8.0b2 More adjustment to this SQLite related issue which was released in 0.7.9, to intercept legacy SQLite quoting characters when reflecting @@ -180,6 +189,7 @@ .. change:: :tags: sql, bug :tickets: 2631 + :versions: 0.8.0b2 Fixed bug where using server_onupdate= without passing the "for_update=True" flag would apply the default diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index cfdd26ad59..6b48e1151d 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -3,12 +3,17 @@ 0.8 Changelog ============== +.. changelog_imports:: + + .. include:: changelog_07.rst + .. changelog:: :version: 0.8.3 .. change:: :tags: bug, orm :tickets: 2818 + :versions: 0.9.0 Fixed bug where :meth:`.Query.exists` failed to work correctly without any WHERE criterion. Courtesy Vladimir Magamedov. @@ -16,6 +21,7 @@ .. change:: :tags: bug, sql :tickets: 2811 + :versions: 0.9.0 Fixed bug where using the ``column_reflect`` event to change the ``.key`` of the incoming :class:`.Column` would prevent primary key constraints, @@ -23,6 +29,7 @@ .. change:: :tags: feature + :versions: 0.9.0 Added a new flag ``system=True`` to :class:`.Column`, which marks the column as a "system" column which is automatically made present @@ -33,16 +40,6 @@ compilation rule which allows skipping of columns, by producing a rule that returns ``None``. - .. change:: - :tags: bug, orm - :tickets: 2807 - - Fixed bug where list instrumentation would fail to represent a - setslice of ``[0:0]`` correctly, which in particular could occur - when using ``insert(0, item)`` with the association proxy. Due - to some quirk in Python collections, the issue was much more likely - with Python 3 rather than 2. Also in 0.7.11. - .. change:: :tags: bug, orm :tickets: 2779 @@ -56,22 +53,16 @@ .. change:: :tags: bug, orm :tickets: 2794 + :versions: 0.9.0 Fixed a potential issue in an ordered sequence implementation used by the ORM to iterate mapper hierarchies; under the Jython interpreter this implementation wasn't ordered, even though cPython and Pypy maintained ordering. - .. change:: - :tags: bug, sql - :tickets: 2801 - - Fixed regression dating back to 0.7.9 whereby the name of a CTE might - not be properly quoted if it was referred to in multiple FROM clauses. - Also in 0.7.11. - .. change:: :tags: bug, examples + :versions: 0.9.0 Added "autoincrement=False" to the history table created in the versioning example, as this table shouldn't have autoinc on it @@ -79,28 +70,15 @@ .. change:: :tags: bug, sql + :versions: 0.9.0 The :meth:`.Operators.notin_` operator added in 0.8 now properly produces the negation of the expression "IN" returns when used against an empty collection. - .. change:: - :tags: mysql, bug - :tickets: 2791 - - Updates to MySQL reserved words for versions 5.5, 5.6, courtesy - Hanno Schlichting. Also in 0.7.11. - - .. change:: - :tags: sql, bug, cte - :tickets: 2783 - - Fixed bug in common table expression system where if the CTE were - used only as an ``alias()`` construct, it would not render using the - WITH keyword. Also in 0.7.11. - .. change:: :tags: feature, examples + :versions: 0.9.0 Improved the examples in ``examples/generic_associations``, including that ``discriminator_on_association.py`` makes use of single table @@ -113,6 +91,7 @@ .. change:: :tags: feature, orm, declarative + :versions: 0.9.0 Added a convenience class decorator :func:`.as_declarative`, is a wrapper for :func:`.declarative_base` which allows an existing base @@ -121,21 +100,16 @@ .. change:: :tags: bug, orm :tickets: 2786 + :versions: 0.9.0 Fixed bug in ORM-level event registration where the "raw" or "propagate" flags could potentially be mis-configured in some "unmapped base class" configurations. - .. change:: - :tags: bug, sql - :tickets: 2784 - - Fixed bug in :class:`.CheckConstraint` DDL where the "quote" flag from a - :class:`.Column` object would not be propagated. Also in 0.7.11. - .. change:: :tags: bug, orm :tickets: 2778 + :versions: 0.9.0 A performance fix related to the usage of the :func:`.defer` option when loading mapped entities. The function overhead of applying @@ -151,6 +125,7 @@ .. change:: :tags: bug, sqlite :tickets: 2781 + :versions: 0.9.0 The newly added SQLite DATETIME arguments storage_format and regexp apparently were not fully implemented correctly; while the @@ -160,6 +135,7 @@ .. change:: :tags: bug, sql, postgresql :tickets: 2780 + :versions: 0.9.0 Fixed bug where the expression system relied upon the ``str()`` form of a some expressions when referring to the ``.c`` collection @@ -174,6 +150,7 @@ .. change:: :tags: bug, engine, oracle :tickets: 2776 + :versions: 0.9.0 Dialect.initialize() is not called a second time if an :class:`.Engine` is recreated, due to a disconnect error. This fixes a particular @@ -190,6 +167,7 @@ .. change:: :tags: feature, sql + :versions: 0.9.0 The :func:`.update`, :func:`.insert`, and :func:`.delete` constructs will now interpret ORM entities as target tables clauses to be operated upon, @@ -206,6 +184,7 @@ .. change:: :tags: bug, orm :tickets: 2773 + :versions: 0.9.0 Fixed bug whereby attribute history functions would fail when an object we moved from "persistent" to "pending" @@ -215,6 +194,7 @@ .. change:: :tags: bug, engine, pool :tickets: 2772 + :versions: 0.9.0 Fixed bug where :class:`.QueuePool` would lose the correct checked out count if an existing pooled connection failed to reconnect @@ -227,6 +207,7 @@ .. change:: :tags: bug, mysql :tickets: 2768 + :versions: 0.9.0 Fixed bug when using multi-table UPDATE where a supplemental table is a SELECT with its own bound parameters, where the positioning @@ -236,6 +217,7 @@ .. change:: :tags: bug, sqlite :tickets: 2764 + :versions: 0.9.0 Added :class:`.BIGINT` to the list of type names that can be reflected by the SQLite dialect; courtesy Russell Stuart. @@ -243,6 +225,7 @@ .. change:: :tags: feature, orm, declarative :tickets: 2761 + :versions: 0.9.0 ORM descriptors such as hybrid properties can now be referenced by name in a string argument used with ``order_by``, @@ -252,15 +235,17 @@ .. change:: :tags: feature, firebird :tickets: 2763 + :versions: 0.9.0 Added new flag ``retaining=True`` to the kinterbasdb and fdb dialects. This controls the value of the ``retaining`` flag sent to the ``commit()`` and ``rollback()`` methods of the DBAPI connection. - Due to historical concerns, this flag defaults to ``True``, however - in 0.9 this flag will be defaulted to ``False``. + Due to historical concerns, this flag defaults to ``True`` in 0.8.2, + however in 0.9.0 this flag defaults to ``False``. .. change:: :tags: requirements + :versions: 0.9.0 The Python `mock `_ library is now required in order to run the unit test suite. While part @@ -271,6 +256,7 @@ .. change:: :tags: bug, orm :tickets: 2750 + :versions: 0.9.0 A warning is emitted when trying to flush an object of an inherited class where the polymorphic discriminator has been assigned @@ -279,6 +265,7 @@ .. change:: :tags: bug, postgresql :tickets: 2740 + :versions: 0.9.0 The behavior of :func:`.extract` has been simplified on the Postgresql dialect to no longer inject a hardcoded ``::timestamp`` @@ -291,6 +278,7 @@ .. change:: :tags: bug, firebird :tickets: 2757 + :versions: 0.9.0 Type lookup when reflecting the Firebird types LONG and INT64 has been fixed so that LONG is treated as INTEGER, @@ -301,6 +289,7 @@ .. change:: :tags: bug, postgresql :tickets: 2766 + :versions: 0.9.0 Fixed bug in HSTORE type where keys/values that contained backslashed quotes would not be escaped correctly when @@ -310,6 +299,7 @@ .. change:: :tags: bug, postgresql :tickets: 2767 + :versions: 0.9.0 Fixed bug where the order of columns in a multi-column Postgresql index would be reflected in the wrong order. @@ -318,6 +308,7 @@ .. change:: :tags: bug, sql :tickets: 2746, 2668 + :versions: 0.9.0 Multiple fixes to the correlation behavior of :class:`.Select` constructs, first introduced in 0.8.0: @@ -352,6 +343,7 @@ .. change:: :tags: bug, ext + :versions: 0.9.0 Fixed bug whereby if a composite type were set up with a function instead of a class, the mutable extension @@ -372,6 +364,7 @@ .. change:: :tags: feature, postgresql + :versions: 0.9.0 Support for Postgresql 9.2 range types has been added. Currently, no type translation is provided, so works @@ -380,6 +373,7 @@ .. change:: :tags: bug, examples + :versions: 0.9.0 Fixed an issue with the "versioning" recipe whereby a many-to-one reference could produce a meaningless version for the target, @@ -389,6 +383,7 @@ .. change:: :tags: feature, postgresql :tickets: 2072 + :versions: 0.9.0 Added support for "AUTOCOMMIT" isolation when using the psycopg2 DBAPI. The keyword is available via the ``isolation_level`` @@ -397,6 +392,7 @@ .. change:: :tags: bug, orm :tickets: 2759 + :versions: 0.9.0 Fixed bug in polymorphic SQL generation where multiple joined-inheritance entities against the same base class joined to each other as well @@ -406,6 +402,7 @@ .. change:: :tags: bug, engine :pullreq: 6 + :versions: 0.9.0 Fixed bug where the ``reset_on_return`` argument to various :class:`.Pool` implementations would not be propagated when the pool was regenerated. @@ -414,6 +411,7 @@ .. change:: :tags: bug, orm :tickets: 2754 + :versions: 0.9.0 Fixed bug where sending a composite attribute into :meth:`.Query.order_by` would produce a parenthesized expression not accepted by some databases. @@ -421,6 +419,7 @@ .. change:: :tags: bug, orm :tickets: 2755 + :versions: 0.9.0 Fixed the interaction between composite attributes and the :func:`.aliased` function. Previously, composite attributes @@ -430,6 +429,7 @@ .. change:: :tags: bug, mysql :tickets: 2715 + :versions: 0.9.0 Added another conditional to the ``mysql+gaerdbms`` dialect to detect so-called "development" mode, where we should use the @@ -438,6 +438,7 @@ .. change:: :tags: feature, mysql :tickets: 2704 + :versions: 0.9.0 The ``mysql_length`` parameter used with :class:`.Index` can now be passed as a dictionary of column names/lengths, for use @@ -447,6 +448,7 @@ .. change:: :tags: bug, mssql :tickets: 2747 + :versions: 0.9.0 When querying the information schema on SQL Server 2000, removed a CAST call that was added in 0.8.1 to help with driver issues, @@ -456,6 +458,7 @@ .. change:: :tags: bug, mysql :tickets: 2721 + :versions: 0.9.0 The ``deferrable`` keyword argument on :class:`.ForeignKey` and :class:`.ForeignKeyConstraint` will not render the ``DEFERRABLE`` keyword @@ -467,6 +470,7 @@ .. change:: :tags: bug, ext, orm :tickets: 2730 + :versions: 0.9.0 Fixed bug where :class:`.MutableDict` didn't report a change event when ``clear()`` was called. @@ -474,6 +478,7 @@ .. change:: :tags: bug, sql :tickets: 2738 + :versions: 0.9.0 Fixed bug whereby joining a select() of a table "A" with multiple foreign key paths to a table "B", to that table "B", would fail @@ -484,6 +489,7 @@ .. change:: :tags: bug, sql, reflection :tickets: 2728 + :versions: 0.9.0 Fixed bug whereby using :meth:`.MetaData.reflect` across a remote schema as well as a local schema could produce wrong results @@ -492,6 +498,7 @@ .. change:: :tags: bug, sql :tickets: 2726 + :versions: 0.9.0 Removed the "not implemented" ``__iter__()`` call from the base :class:`.ColumnOperators` class, while this was introduced @@ -831,30 +838,6 @@ regarding the current class no matter when it's called (obviously assuming the state of the superclass). - .. change:: - :tags: bug, orm - :tickets: 2699 - - Fixed bug when a query of the form: - ``query(SubClass).options(subqueryload(Baseclass.attrname))``, - where ``SubClass`` is a joined inh of ``BaseClass``, - would fail to apply the ``JOIN`` inside the subquery - on the attribute load, producing a cartesian product. - The populated results still tended to be correct as additional - rows are just ignored, so this issue may be present as a - performance degradation in applications that are - otherwise working correctly. Also in 0.7.11. - - .. change:: - :tags: bug, orm - :tickets: 2689 - - Fixed bug in unit of work whereby a joined-inheritance - subclass could insert the row for the "sub" table - before the parent table, if the two tables had no - ForeignKey constraints set up between them. - Also in 0.7.11. - .. change:: :tags: bug, mssql :pullreq: 47 @@ -909,15 +892,6 @@ * :ref:`correlation_context_specific` - .. change:: - :tags: feature, postgresql - :tickets: 2676 - - Added support for Postgresql's traditional SUBSTRING - function syntax, renders as "SUBSTRING(x FROM y FOR z)" - when regular ``func.substring()`` is used. - Also in 0.7.11. Courtesy Gunnlaugur Þór Briem. - .. change:: :tags: feature, orm :tickets: 2675 @@ -1304,16 +1278,6 @@ :version: 0.8.0b2 :released: December 14, 2012 - .. change:: - :tags: sqlite, bug - :tickets: 2568 - - More adjustment to this SQLite related issue which was released in - 0.7.9, to intercept legacy SQLite quoting characters when reflecting - foreign keys. In addition to intercepting double quotes, other - quoting characters such as brackets, backticks, and single quotes - are now also intercepted. Also in 0.7.10. - .. change:: :tags: orm, bug :tickets: 2635 @@ -1383,19 +1347,6 @@ to the :class:`.KeyedTuple` class to provide some degree of compatibility with the Python standard library ``collections.namedtuple()``. - .. change:: - :tags: sql, bug - :tickets: 2631 - - Fixed bug where using server_onupdate= - without passing the "for_update=True" flag would apply the default - object to the server_default, blowing away whatever was there. - The explicit for_update=True argument shouldn't be needed with this usage - (especially since the documentation shows an example without it being - used) so it is now arranged internally using a copy of the given default - object, if the flag isn't set to what corresponds to that argument. - Also in 0.7.10. - .. change:: :tags: sql, bug :tickets: 2610