docs: Prepare version 0.2.0 release notes
Change-Id: I80a660fe23bb1bf2bfc35265b68e287df8921fe5
diff --git a/docs/RELEASE-NOTES.rst b/docs/RELEASE-NOTES.rst
index a08af27..e0af4c5 100644
--- a/docs/RELEASE-NOTES.rst
+++ b/docs/RELEASE-NOTES.rst
@@ -1,6 +1,101 @@
Release Notes
=============
+NLSR version 0.2.0 (changes since version 0.1.0)
+++++++++++++++++++++++++++++++++++++++++++++++++
+
+Release date: April 30, 2015
+
+**Build**:
+
+- The code now requires C++11. The minimum supported gcc version is 4.6, as earlier versions do not have proper support for C++11 features. (:issue:`1930`)
+
+- Require OpenSSL (:issue:`2375`)
+
+**New features**:
+
+- Add nlsrc command-line tool (:issue:`1834`)
+
+- Advertise/Withdraw name prefixes at runtime (:issue:`1834`)
+
+- Assign zero cost to hyperbolic direct neighbors (:issue:`1975`)
+
+- Only hyperbolic costs are adjusted before registering (:issue:`1974`)
+
+- Add ability to specify different logging levels (:issue:`1935`)
+
+- Add LSDB dataset publishers (:issue:`2280`)
+
+- Add LSDB dataset tlv abstractions (:issue:`2280`)
+
+- Allow zero cost neighbors for hyperbolic routing table calculation (:issue:`1982`)
+
+- Faces are now created with canonical Face URI (:issue:`1911`)
+
+- Add configurable router event intervals (:issue:`2071`)
+
+- Add router-dead-interval configuration setting (:issue:`1878`)
+
+- Add log formatting specified by log4cxx configuration file (:issue:`1950`)
+
+- Face URIs in configuration file are checked for validity on load (:issue:`2070`)
+
+- Configuration variables with default values are now optional (:issue:`1949`)
+
+- Recalculate routing table after face destroy event (:issue:`2635`)
+
+- Add Travis-CI build script
+
+**Code changes**:
+
+- Change adjacency status from uint32_t to enum (:issue:`1946`)
+
+- Remove scheduler from NLSR class (:issue:`1981`)
+
+- Change hyperbolic cost adjustment factor from 100 to 1000 (:issue:`1974`)
+
+- Remove use of outdated namespace ``ndn::Tlv`` (:issue:`2079`)
+
+- Remove use of deprecated ``ndn::nfd::Controller(Face&)`` constructor (:issue:`2133`)
+
+- Routing update publishing is abstracted to SyncLogicHandler (:issue:`2289`)
+
+- Make ConfParameter variable types consistent with min and max values (:issue:`2084`)
+
+- Replace LSA string literals with constants (:issue:`2310`)
+
+- Subscribe to FaceMonitor notifications using connect (:issue:`2350`)
+
+- Log exceptions thrown in event loop
+
+- Change ``ndn::ptr_lib::shared_ptr`` to ``std::shared_ptr`` (:issue:`2110`)
+
+- Avoid deprecated ``ndn::Name::set`` method (:issue:`2505`)
+
+- Update waf to version 1.8.8-dev
+
+- Add sorting tiebreaker to NexthopList (:issue:`2715`)
+
+- Update Jenkins-CI build scripts
+
+**Bug fixes**:
+
+- Fix python3 build error (:issue:`1956`)
+
+- Fix typos in nlsr.conf security section (:issue:`1985`)
+
+- Stop SyncLogicHandler from fetching a router’s own LSAs (:issue:`2005`)
+
+- Fix Name LSA comparison which could cause incorrect advertised names to be removed (:issue:`2029`)
+
+- Fix issue where more faces than max-faces-per-prefix could be applied to a prefix (:issue:`2018`)
+
+- Stop LSDB from retrieving and out of date LSA when a new one is detected (:issue:`1987`)
+
+- Correct mistakes in documentation
+
+- Correct bitmask used to copy Name LSA sequence number (:issue:`2323`)
+
NLSR version 0.1.0 (initial release)
++++++++++++++++++++++++++++++++++++
diff --git a/docs/conf.py b/docs/conf.py
index 7314c6d..a02e3c8 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -18,7 +18,7 @@
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
+sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
@@ -30,6 +30,7 @@
# ones.
extensions = [
'sphinx.ext.todo',
+ 'redmine_issue',
]
def addExtensionIfExists(extension):
@@ -249,3 +250,5 @@
if os.getenv('GOOGLE_ANALYTICS', None):
googleanalytics_id = os.environ['GOOGLE_ANALYTICS']
googleanalytics_enabled = True
+
+redmine_project_url = "http://redmine.named-data.net/"
diff --git a/docs/redmine_issue.py b/docs/redmine_issue.py
new file mode 100644
index 0000000..e80c036
--- /dev/null
+++ b/docs/redmine_issue.py
@@ -0,0 +1,70 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+# Based on http://doughellmann.com/2010/05/09/defining-custom-roles-in-sphinx.html
+
+"""Integration of Sphinx with Redmine.
+"""
+
+from docutils import nodes, utils
+from docutils.parsers.rst.roles import set_classes
+
+def redmine_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+ """Link to a Redmine issue.
+
+ Returns 2 part tuple containing list of nodes to insert into the
+ document and a list of system messages. Both are allowed to be
+ empty.
+
+ :param name: The role name used in the document.
+ :param rawtext: The entire markup snippet, with role.
+ :param text: The text marked with the role.
+ :param lineno: The line number where rawtext appears in the input.
+ :param inliner: The inliner instance that called us.
+ :param options: Directive options for customization.
+ :param content: The directive content for customization.
+ """
+ try:
+ issue_num = int(text)
+ if issue_num <= 0:
+ raise ValueError
+ except ValueError:
+ msg = inliner.reporter.error(
+ 'Redmine issue number must be a number greater than or equal to 1; '
+ '"%s" is invalid.' % text, line=lineno)
+ prb = inliner.problematic(rawtext, rawtext, msg)
+ return [prb], [msg]
+ app = inliner.document.settings.env.app
+ node = make_link_node(rawtext, app, 'issues', str(issue_num), options)
+ return [node], []
+
+def make_link_node(rawtext, app, type, slug, options):
+ """Create a link to a Redmine resource.
+
+ :param rawtext: Text being replaced with link node.
+ :param app: Sphinx application context
+ :param type: Link type (issue, changeset, etc.)
+ :param slug: ID of the thing to link to
+ :param options: Options dictionary passed to role func.
+ """
+ #
+ try:
+ base = app.config.redmine_project_url
+ if not base:
+ raise AttributeError
+ except AttributeError, err:
+ raise ValueError('redmine_project_url configuration value is not set (%s)' % str(err))
+ #
+ slash = '/' if base[-1] != '/' else ''
+ ref = base + slash + type + '/' + slug + '/'
+ set_classes(options)
+ node = nodes.reference(rawtext, 'Issue #' + utils.unescape(slug), refuri=ref,
+ **options)
+ return node
+
+def setup(app):
+ """Install the plugin.
+
+ :param app: Sphinx application context.
+ """
+ app.add_role('issue', redmine_role)
+ app.add_config_value('redmine_project_url', None, 'env')
+ return
\ No newline at end of file
diff --git a/wscript b/wscript
index 0dbf533..c4a2d5c 100644
--- a/wscript
+++ b/wscript
@@ -20,7 +20,7 @@
NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
"""
-VERSION = '0.1.0'
+VERSION = '0.2.0'
APPNAME = "nlsr"
BUGREPORT = "http://redmine.named-data.net/projects/nlsr"
URL = "http://named-data.net/doc/NLSR/"