.. Licensed under the Apache License, Version 2.0 (the "License"); you may not
.. use this file except in compliance with the License. You may obtain a copy of
.. the License at
..
..   http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
.. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
.. License for the specific language governing permissions and limitations under
.. the License.

.. _release/1.3.x:

============
1.3.x Branch
============

.. contents::
    :depth: 1
    :local:

.. warning::
    :ref:`release/1.3.x` is affected by the issue described in
    :ref:`cve/2014-2668`. Upgrading to a more recent release is strongly
    recommended.

.. _release/1.3.x/upgrade:

Upgrade Notes
=============

You can upgrade your existing CouchDB 1.0.x installation to 1.3.0
without any specific steps or migration. When you run CouchDB, the
existing data and index files will be opened and used as normal.

The first time you run a compaction routine on your database within 1.3.0,
the data structure and indexes will be updated to the new version of the
CouchDB database format that can only be read by CouchDB 1.3.0 and later.
This step is not reversible. Once the data files have been updated and
migrated to the new version the data files will no longer work with a
CouchDB 1.0.x release.

.. warning::
    If you want to retain support for opening the data files in
    CouchDB 1.0.x you must back up your data files before performing the
    upgrade and compaction process.

.. _release/1.3.1:

Version 1.3.1
=============

Replicator
----------

* :issue:`1788`: Tolerate missing source and target fields in _replicator docs.
  :commit:`869f42e2`

Log System
----------

* :issue:`1794`: Fix bug in WARN level logging from 1.3.0.
* Don't log about missing .compact files. :commit:`06f1a8dc`

View Server
-----------

* :issue:`1792`: Fix the -S option to couchjs to increase memory limits.
  :commit:`cfaa66cd`

Miscellaneous
-------------

* :issue:`1784`: Improvements to test suite and VPATH build system.
  :commit:`01afaa4f`
* Improve documentation: better structure, improve language, less duplication.

.. _release/1.3.0:

Version 1.3.0
=============

Database core
-------------

* :issue:`1512`: Validate bind address before assignment. :commit:`09ead8a0`
* Restore ``max_document_size`` protection. :commit:`bf1eb135`

Documentation
-------------

* :issue:`1523`: Import CouchBase documentation and convert them into
  `Sphinx docs <http://sphinx.pocoo.org/>`_

Futon
-----

* :issue:`509`: Added view request duration to Futon. :commit:`2d2c7d1e`
* :issue:`627`: Support all timezones. :commit:`b1a049bb`
* :issue:`1383`: Futon view editor won't allow you to save original view after
  saving a revision. :commit:`ce48342`
* :issue:`1470`: Futon raises pop-up on attempt to navigate to missed/deleted
  document. :commit:`5da40eef`
* :issue:`1473`, :issue:`1472`: Disable buttons for actions that the user
  doesn't have permissions to. :commit:`7156254d`

HTTP Interface
--------------

* :issue:`431`: Introduce experimental :ref:`CORS support <cors>`.
  :commit:`b90e4021`
* :issue:`764`, :issue:`514`, :issue:`430`: Fix sending HTTP headers from
  ``_list`` function, :commit:`2a74f88375`
* :issue:`887`: Fix ``bytes`` and ``offset`` parameters semantic for `_log`
  resource (`explanation`_)
  :commit:`ad700014`
* :issue:`986`: Added Server-Sent Events protocol to db changes API.
  See http://www.w3.org/TR/eventsource/ for details. :commit:`093d2aa6`
* :issue:`1026`: Database names are encoded with respect of special characters
  in the rewriter now. :commit:`272d6415`
* :issue:`1097`: Allow `OPTIONS` request to shows and lists functions.
  :commit:`9f53704a`
* :issue:`1210`: Files starting with underscore can be attached and updated now.
  :commit:`05858792`
* :issue:`1277`: Better query parameter support and code clarity:
  :commit:`7e3c69ba`

  * Responses to documents created/modified via form data `POST` to /db/doc or
    copied with `COPY` should now include `Location` header.
  * Form data POST to /db/doc now includes an `ETag` response header.
  * ``?batch=ok`` is now supported for `COPY` and `POST` /db/doc updates.
  * ``?new_edits=false`` is now supported for more operations.

* :issue:`1285`: Allow configuration of vendor and modules version in CouchDB
  welcome message. :commit:`3c24a94d`
* :issue:`1321`: Variables in rewrite rules breaks OAuth authentication.
  :commit:`c307ba95`
* :issue:`1337`: Use MD5 for attachment ETag header value. :commit:`6d912c9f`
* :issue:`1381`: Add jquery.couch support for Windows 8 Metro apps.
  :commit:`dfc5d37c`
* :issue:`1441`: Limit recursion depth in the URL rewriter.
  Defaults to a maximum of 100 invocations but is configurable.
  :commit:`d076976c`
* :issue:`1442`: No longer rewrites the `X-CouchDB-Requested-Path` during
  recursive calls to the rewriter. :commit:`56744f2f`
* :issue:`1501`: :ref:`Changes feed <changes>` now can take special parameter
  ``since=now`` to emit changes since current point of time. :commit:`3bbb2612`
* :issue:`1502`: Allow users to delete own _users doc. :commit:`f0d6f19bc8`
* :issue:`1511`: CouchDB checks `roles` field for `_users` database documents
  with more care. :commit:`41205000`
* :issue:`1537`: Include user name in show/list `ETags`. :commit:`ac320479`
* Send a 202 response for `_restart`. :commit:`b213e16f`
* Make password hashing synchronous when using the /_config/admins API.
  :commit:`08071a80`
* Add support to serve single file with CouchDB, :commit:`2774531ff2`
* Allow any 2xx code to indicate success, :commit:`0d50103cfd`
* Fix `_session` for IE7.
* Restore 400 error for empty PUT, :commit:`2057b895`
* Return ``X-Couch-Id`` header if doc is created, :commit:`98515bf0b9`
* Support auth cookies with ``:`` characters, :commit:`d9566c831d`

.. _explanation: https://git-wip-us.apache.org/repos/asf?p=couchdb.git;a=blobdiff;f=src/couchdb/couch_log.erl;h=1b05f4db2;hp=0befe7aab;hb=ad700014;hpb=7809f3ca

Log System
----------

* :issue:`1380`: Minor fixes for logrotate support.
* Improve file I/O error logging and handling, :commit:`4b6475da`
* Module Level Logging, :commit:`b58f069167`
* Log 5xx responses at error level, :commit:`e896b0b7`
* Log problems opening database at ERROR level except for auto-created
  system dbs, :commit:`41667642f7`

Replicator
----------

* :issue:`1248`: `HTTP 500` error now doesn't occurs when replicating with
  ``?doc_ids=null``. :commit:`bea76dbf`
* :issue:`1259`: Stabilize replication id, :commit:`c6252d6d7f`
* :issue:`1323`: Replicator now acts as standalone application.
  :commit:`f913ca6e`
* :issue:`1363`: Fix rarely occurred, but still race condition in changes feed
  if a quick burst of changes happens while replication is starting the
  replication can go stale. :commit:`573a7bb9`
* :issue:`1557`: Upgrade some code to use BIFs bring good improvements for
  replication.

Security
--------

* :issue:`1060`: Passwords are now hashed using the PBKDF2 algorithm with a
  configurable work factor. :commit:`7d418134`

Source Repository
-----------------

* The source repository was migrated from `SVN`_ to `Git`_.

.. _SVN: https://svn.apache.org/repos/asf/couchdb
.. _Git: https://git-wip-us.apache.org/repos/asf/couchdb.git

Storage System
--------------

* Fixed unnecessary conflict when deleting and creating a
  document in the same batch.

Test Suite
----------

* :issue:`1321`: Moved the JS test suite to the CLI.
* :issue:`1338`: Start CouchDB with ``port=0``. While CouchDB might be already
  running on the default port 5984, port number 0 let the TCP stack figure out a
  free port to run. :commit:`127cbe3`
* :issue:`1339`: Use shell trap to catch dying beam processes during test runs.
  :commit:`2921c78`
* :issue:`1389`: Improved tracebacks printed by the JS CLI tests.
* :issue:`1563`: Ensures urlPrefix is set in all ajax requests.
  :commit:`07a6af222`
* Fix race condition for test running on faster hardware.
* Improved the reliability of a number of tests.

URL Rewriter & Vhosts
---------------------

* :issue:`1026`: Database name is encoded during rewriting
  (allowing embedded /'s, etc). :commit:`272d6415`

UUID Algorithms
---------------

* :issue:`1373`: Added the utc_id algorithm :commit:`5ab712a2`

Query and View Server
---------------------

* :issue:`111`: Improve the errors reported by the JavaScript view server
  to provide a more friendly error report when something goes wrong.
  :commit:`0c619ed`
* :issue:`410`: More graceful error handling for JavaScript validate_doc_update
  functions.
* :issue:`1372`: `_stats` built-in reduce function no longer produces error for
  empty view result.
* :issue:`1444`: Fix missed_named_view error that occurs on existed design
  documents and views. :commit:`b59ac98b`
* :issue:`1445`: CouchDB tries no more to delete view file if it couldn't open
  it, even if the error is `emfile`.
* :issue:`1483`: Update handlers requires valid doc ids. :commit:`72ea7e38`
* :issue:`1491`: Clean up view tables. :commit:`c37204b7`
* Deprecate E4X support, :commit:`cdfdda2314`

Windows
-------

* :issue:`1482`: Use correct linker flag to build `snappy_nif.dll` on Windows.
  :commit:`a6eaf9f1`
* Allows building cleanly on Windows without cURL, :commit:`fb670f5712`
