$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r75018 - in website/public_html/live: . common/code development feed/history site-tools site-tools/boost_site site-tools/php site-tools/state site-tools/templates
From: dnljms_at_[hidden]
Date: 2011-10-17 16:50:00
Author: danieljames
Date: 2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
New Revision: 75018
URL: http://svn.boost.org/trac/boost/changeset/75018
Log:
Website: Merge from beta to live.
Added:
   website/public_html/live/common/code/boost_filter_qbk.php
      - copied unchanged from r74482, /website/public_html/beta/common/code/boost_filter_qbk.php
   website/public_html/live/feed/history/boost_1_48_0.qbk
      - copied, changed from r73165, /website/public_html/beta/feed/history/boost_1_48_0.qbk
   website/public_html/live/site-tools/boost_site/settings.py
      - copied, changed from r73165, /website/public_html/beta/site-tools/boost_site/settings.py
   website/public_html/live/site-tools/boost_site/site_tools.py
      - copied, changed from r73165, /website/public_html/beta/site-tools/boost_site/site_tools.py
   website/public_html/live/site-tools/boost_site/upgrade.py
      - copied unchanged from r74482, /website/public_html/beta/site-tools/boost_site/upgrade.py
   website/public_html/live/site-tools/refresh.py
      - copied unchanged from r73165, /website/public_html/beta/site-tools/refresh.py
   website/public_html/live/site-tools/release.py
      - copied unchanged from r74482, /website/public_html/beta/site-tools/release.py
   website/public_html/live/site-tools/state/version.txt
      - copied unchanged from r74482, /website/public_html/beta/site-tools/state/version.txt
   website/public_html/live/site-tools/update-doc-list.php
      - copied unchanged from r73165, /website/public_html/beta/site-tools/update-doc-list.php
   website/public_html/live/site-tools/update.py
      - copied unchanged from r73165, /website/public_html/beta/site-tools/update.py
Removed:
   website/public_html/live/site-tools/php/update-doc-list.php
   website/public_html/live/site-tools/site-tools.py
Properties modified: 
   website/public_html/live/   (props changed)
Text files modified: 
   website/public_html/live/common/code/boost_archive.php              |    21 ++++++++------                          
   website/public_html/live/development/website_updating.html          |     7 ++--                                    
   website/public_html/live/feed/history/boost_1_48_0.qbk              |     5 +++                                     
   website/public_html/live/site-tools/README.txt                      |    28 ++++++++++--------                      
   website/public_html/live/site-tools/boost_site/pages.py             |    30 ++++++++++++++++++--                    
   website/public_html/live/site-tools/boost_site/settings.py          |    14 +++++++--                               
   website/public_html/live/site-tools/boost_site/site_tools.py        |    58 ++++++++++++++++++++++----------------- 
   website/public_html/live/site-tools/templates/history-template.html |     2                                         
   website/public_html/live/site-tools/templates/index-src.html        |     2                                         
   website/public_html/live/site-tools/templates/news-template.html    |     2                                         
   10 files changed, 109 insertions(+), 60 deletions(-)
Modified: website/public_html/live/common/code/boost_archive.php
==============================================================================
--- website/public_html/live/common/code/boost_archive.php	(original)
+++ website/public_html/live/common/code/boost_archive.php	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -102,7 +102,8 @@
     // Choose filter to use
 
     $info_map = array_merge($content_map, array(
-        array('@.*@','@[.](txt|py|rst|jam|v2|bat|sh|xml|toyxml|qbk)$@i','text','text/plain'),
+        array('@.*@','@[.](txt|py|rst|jam|v2|bat|sh|xml|toyxml)$@i','text','text/plain'),
+        array('@.*@','@[.](qbk|quickbook)$@i','qbk','text/plain'),
         array('@.*@','@[.](c|h|cpp|hpp)$@i','cpp','text/plain'),
         array('@.*@','@[.]png$@i','raw','image/png'),
         array('@.*@','@[.]gif$@i','raw','image/gif'),
@@ -245,18 +246,19 @@
 
 function boost_archive_render_callbacks($content, $params) {
     $version_title =
-    	str_replace('_', ' ',
-    		preg_replace('@(?<=\d)_(?=\d)@', '.',
-    			ucwords($params['version'])));
+        str_replace('_', ' ',
+            preg_replace('@(?<=\d)_(?=\d)@', '.',
+                ucwords($params['version'])));
 
     $charset = $params['charset'] ? $params['charset'] : 'us-ascii';
     $title = $params['title'] ? "$params[title] - $version_title" : 'Boost C++ Libraries';
 
+    $head = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=${charset}\" />\n";
 
-    $head = <<<HTML
-<meta http-equiv="Content-Type" content="text/html; charset=${charset}" />
-<title>${title}</title>
-HTML;
+    if (!empty($params['noindex']))
+        $head .= "<meta name=\"robots\" content=\"noindex\">\n";
+
+    $head .= "<title>${title}</title>";
 
     return Array(
         'head' => $head,
@@ -271,6 +273,7 @@
     $title = htmlentities("Index listing for $params[key]");
 
     $params['title'] = $title;
+    $params['noindex'] = true;
     
     $content = "<h3>$title</h3>\n<ul>\n";
 
@@ -279,7 +282,7 @@
         if (substr($file, 0, 1) == '.') continue;
         if (is_dir("$dir$file")) $file .= '/';
         $file = htmlentities($file);
-        $content .= "<li><a href='$file'>$file</a></li>\n";
+        $content .= "<li><a rel='nofollow' href='$file'>$file</a></li>\n";
     }
 
     $content .= "</ul>\n";
Modified: website/public_html/live/development/website_updating.html
==============================================================================
--- website/public_html/live/development/website_updating.html	(original)
+++ website/public_html/live/development/website_updating.html	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -324,10 +324,9 @@
                 <li>Create a new file in the <tt>/feed/news</tt> directory,
                 say <tt>/feed/news/gui_review_ends.qbk</tt>.</li>
 
-                <li>In a shell, go to the <tt>/site-tools</tt> directory, and
-                run <tt>python site-tools.py update</tt>. This will generate
-                the page for the new news item, regenerate the
-                <tt>/feed/news.rss</tt> file to include it, update pages
+                <li>In a shell, go to the <tt>/site-tools/update.py</tt>.
+                This will generate the page for the new news item, regenerate
+                the <tt>/feed/news.rss</tt> file to include it, update pages
                 which link to the new item and update the file
                 <tt>/site-tools/state/feed-pages.txt</tt> which tracks the
                 current state of generated files.</li>
Copied: website/public_html/live/feed/history/boost_1_48_0.qbk (from r73165, /website/public_html/beta/feed/history/boost_1_48_0.qbk)
==============================================================================
--- /website/public_html/beta/feed/history/boost_1_48_0.qbk	(original)
+++ website/public_html/live/feed/history/boost_1_48_0.qbk	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -44,6 +44,11 @@
 
 * /TODO/
 
+[/ TODO: Check Numeric.Conversion for changes.
+* [phrase library..[@/libs/numeric/conversion/index.html Numeric.Conversion]:]
+  * Added numeric_cast_traits; see '[@/doc/libs/1_48_0/libs/numeric/conversion/doc/html/boost_numericconversion/type_requirements_and_user_defined_types_support.html#boost_numericconversion.type_requirements_and_user_defined_types_support.udts_with_numeric_cast numeric_cast_traits]' for details.
+]
+
 [/ TODO: Check Spirit for changes.
 * [phrase library..[@/libs/spirit/index.html Spirit]:]
   * Spirit Vx.x, see the
Modified: website/public_html/live/site-tools/README.txt
==============================================================================
--- website/public_html/live/site-tools/README.txt	(original)
+++ website/public_html/live/site-tools/README.txt	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -1,24 +1,26 @@
 Boost website generator
 =======================
 
-A script to generate several of the pages on the Boost website,
-including the release notes, the home page and the downlaod page,
-as well as some other data for the site.
+This site contains several scripts for maintaining the Boost website.
+Most users will just call `update.py` after updating any quickbook files.
 
-Usage: python site-tools.py [command]
+update.py
+---------
 
-Commands:
+Update the html pages and rss feeds for new or updated quickbook files.
 
-update      Update the html pages and rss feeds for new or updated
-            quickbook files.
+refresh.py
+----------
 
-refresh     Reconvert all the quickbook files and regenerate the html
-            pages. Does not update the rss feeds or add new pages.
-            Useful for when quickbook, the scripts or the templates have
-            been updated.
+Reconvert all the quickbook files and regenerate the html pages. Does
+not update the rss feeds or add new pages. Useful for when quickbook,
+the scripts or the templates have been updated.
 
-docs        Update the documentation list from doc/libraries.xml.
-            Requires php to be on the path and the site to be configured.
+update-doc-list.php
+-------------------
+
+Updates the documentation list from `doc/libraries.xml`.
+Requires php the site to be configured.
 
 ----------------------------------------------------------------------
 
Modified: website/public_html/live/site-tools/boost_site/pages.py
==============================================================================
--- website/public_html/live/site-tools/boost_site/pages.py	(original)
+++ website/public_html/live/site-tools/boost_site/pages.py	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -112,11 +112,21 @@
                     { 'page': page_data })
 
     def match_pages(self, patterns, count = None, sort = True):
+        """
+            patterns is a list of strings, containing a glob followed
+            by required flags, separated by '|'. The syntax will probably
+            change in the future.
+        """
         filtered = set()
         for pattern in patterns:
-            filtered = filtered | set(fnmatch.filter(self.pages.keys(), pattern))
+            pattern_parts = pattern.split('|')
+            matches = [x for x in
+                fnmatch.filter(self.pages.keys(), pattern_parts[0])
+                if self.pages[x].is_published(pattern_parts[1:])]
+            filtered = filtered | set(matches)
+
+        entries = [self.pages[x] for x in filtered]
 
-        entries = [self.pages[x] for x in filtered if self.pages[x].page_state != 'new']
         if sort:
             entries = sorted(entries, key = lambda x: x.last_modified, reverse=True)
         if count:
@@ -133,6 +143,11 @@
         if not attrs: attrs = { 'page_state' : 'new' }
 
         self.page_state = attrs.get('page_state', None)
+        self.flags = attrs.get('flags', '')
+        if self.flags:
+        	self.flags = set(self.flags.split(','))
+        else:
+        	self.flags = set()
         self.dir_location = attrs.get('dir_location', None)
         self.location = attrs.get('location', None)
         self.id = attrs.get('id', None)
@@ -149,6 +164,7 @@
     def state(self):
         return {
             'page_state': self.page_state,
+            'flags': ','.join(self.flags),
             'dir_location': self.dir_location,
             'location': self.location,
             'id' : self.id,
@@ -248,9 +264,17 @@
                 boost_site.util.htmlencode(self.download_item) + \
                 '">Download this release.</a></span></p>';
 
+    def is_published(self, flags):
+        if self.page_state == 'new':
+            return False
+        for flag in flags:
+            if flag not in self.flags:
+                return False
+        return True
+
 def number_suffix(x):
     x = x % 100
     if x / 10 == 1:
         return "th"
     else:
-        return ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"][x % 10]
\ No newline at end of file
+        return ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"][x % 10]
Copied: website/public_html/live/site-tools/boost_site/settings.py (from r73165, /website/public_html/beta/site-tools/boost_site/settings.py)
==============================================================================
--- /website/public_html/beta/site-tools/boost_site/settings.py	(original)
+++ website/public_html/live/site-tools/boost_site/settings.py	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -26,19 +26,27 @@
         'users/news/index.html' : 'site-tools/templates/news-template.html',
         'index.html' : 'site-tools/templates/index-src.html'
     },
+    # See boost_site.pages for matches pattern syntax.
+    #
+    # glob [ '|' flag ]
     'feeds' : {
         'feed/downloads.rss' : {
             'title': 'Boost Downloads',
-            'matches': ['feed/history/*.qbk', 'feed/downloads/*.qbk'],
+            'matches': ['feed/history/*.qbk|released', 'feed/downloads/*.qbk'],
             'count': 3
         },
         'feed/history.rss' : {
             'title': 'Boost History',
-            'matches': ['feed/history/*.qbk']
+            'matches': ['feed/history/*.qbk|released']
         },
         'feed/news.rss' : {
             'title': 'Boost News',
-            'matches': ['feed/news/*.qbk', 'feed/history/*.qbk'],
+            'matches': ['feed/news/*.qbk', 'feed/history/*.qbk|released'],
+            'count': 5
+        },
+        'feed/dev.rss' : {
+            'title': 'Boost Development',
+            'matches': ['feed/history/*.qbk'],
             'count': 5
         }
     }
Copied: website/public_html/live/site-tools/boost_site/site_tools.py (from r73165, /website/public_html/beta/site-tools/boost_site/site_tools.py)
==============================================================================
--- /website/public_html/beta/site-tools/boost_site/site_tools.py	(original)
+++ website/public_html/live/site-tools/boost_site/site_tools.py	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -12,17 +12,11 @@
 def init():
     os.chdir(os.path.join(os.path.dirname(sys.argv[0]), "../"))
 
-def load_hashes(hash_file):
-    qbk_hashes = {}
+    import boost_site.upgrade
+    boost_site.upgrade.upgrade()
 
-    file = open(hash_file)
-    try:
-        for line in file:
-            (qbk_file, qbk_hash, rss_hash) = line.strip().split(',')
-            qbk_hashes[qbk_file] = {'qbk_hash': qbk_hash, 'rss_hash': rss_hash}
-        return qbk_hashes
-    finally:
-        file.close()
+def load_pages():
+    return boost_site.pages.Pages('site-tools/state/feed-pages.txt')
 
 def refresh_quickbook():
     update_quickbook(True)
@@ -30,16 +24,10 @@
 def update_quickbook(refresh = False):
     # Now check quickbook files.
     
-    pages = boost_site.pages.Pages('site-tools/state/feed-pages.txt')
+    pages = load_pages()
 
     if not refresh:
-        for location in settings['pages']:
-            pages_data = settings['pages'][location]
-            for src_file_pattern in pages_data['src_files']:
-                for qbk_file in glob.glob(src_file_pattern):
-                    pages.add_qbk_file(qbk_file, location)
-
-        pages.save()
+        scan_for_new_quickbook_pages(pages)
     
     # Translate new and changed pages
 
@@ -61,11 +49,15 @@
     # Generate RSS feeds
 
     if not refresh:
+        old_rss_items_doc = xml.dom.minidom.parseString('''<items></items>''')
+        old_rss_items = {}
+        for feed_file in settings['feeds']:
+            old_rss_items.update(pages.load_rss(feed_file, old_rss_items_doc))
+    
         for feed_file in settings['feeds']:
             feed_data = settings['feeds'][feed_file]
             rss_feed = generate_rss_feed(feed_file, feed_data)
             rss_channel = rss_feed.getElementsByTagName('channel')[0]
-            old_rss_items = pages.load_rss(feed_file, rss_feed)
             
             feed_pages = pages.match_pages(feed_data['matches'])
             if 'count' in feed_data:
@@ -77,7 +69,9 @@
                     pages.add_rss_item(item)
                     rss_channel.appendChild(item['item'])
                 elif qbk_page.qbk_file in old_rss_items:
-                    rss_channel.appendChild(old_rss_items[qbk_page.qbk_file]['item'])
+                    rss_channel.appendChild(
+                        rss_feed.importNode(
+                            old_rss_items[qbk_page.qbk_file]['item'], True))
                 else:
                     print "Missing entry for %s" % qbk_page.qbk_file
                     
@@ -89,6 +83,16 @@
 
     pages.save()
 
+def scan_for_new_quickbook_pages(pages):
+    for location in settings['pages']:
+        pages_data = settings['pages'][location]
+        for src_file_pattern in pages_data['src_files']:
+            for qbk_file in glob.glob(src_file_pattern):
+                pages.add_qbk_file(qbk_file, location)
+
+    pages.save()
+
+
 ################################################################################
 
 def generate_rss_feed(feed_file, details):
@@ -104,7 +108,7 @@
   </channel>
 </rss>
 ''' % {
-    'title' : details['title'],
+    'title' : details['title'].encode('utf-8'),
     'link' : "http://www.boost.org/" + feed_file,
     'description' : '',
     'language' : 'en-us',
@@ -120,13 +124,16 @@
 
     item = rss_feed.createElement('item')
 
-    node = xml.dom.minidom.parseString('<title>%s</title>' % page.title_xml)
+    node = xml.dom.minidom.parseString('<title>%s</title>'
+        % page.title_xml.encode('utf-8'))
     item.appendChild(rss_feed.importNode(node.documentElement, True))
 
-    node = xml.dom.minidom.parseString('<link>%s</link>' % page_link)
+    node = xml.dom.minidom.parseString('<link>%s</link>'
+        % page_link.encode('utf-8'))
     item.appendChild(rss_feed.importNode(node.documentElement, True))
 
-    node = xml.dom.minidom.parseString('<guid>%s</guid>' % page_link)
+    node = xml.dom.minidom.parseString('<guid>%s</guid>'
+        % page_link.encode('utf-8'))
     item.appendChild(rss_feed.importNode(node.documentElement, True))
 
     # TODO: Convert date format?
@@ -136,7 +143,8 @@
 
     node = rss_feed.createElement('description')
     # Placing the description in a root element to make it well formed xml.
-    description = xml.dom.minidom.parseString('<x>%s</x>' % page.description_xml)
+    description = xml.dom.minidom.parseString(
+        '<x>%s</x>' % page.description_xml.encode('utf-8'))
     base_links(description, page_link)
     node.appendChild(rss_feed.createTextNode(
         boost_site.util.fragment_to_string(description)))
Deleted: website/public_html/live/site-tools/php/update-doc-list.php
==============================================================================
--- website/public_html/live/site-tools/php/update-doc-list.php	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
+++ (empty file)
@@ -1,8 +0,0 @@
-<?php
-
-echo "Serializing library info\n";
-
-require_once(dirname(__FILE__) . '/../../common/code/boost_libraries.php');
-
-$libs = new boost_libraries(dirname(__FILE__) . '/../../doc/libraries.xml');
-file_put_contents(dirname(__FILE__) . '/../../doc/libraries.txt', serialize($libs));
Deleted: website/public_html/live/site-tools/site-tools.py
 Modified: website/public_html/live/site-tools/templates/history-template.html
 Modified: website/public_html/live/site-tools/templates/index-src.html
 Modified: website/public_html/live/site-tools/templates/news-template.html
==============================================================================
--- website/public_html/live/site-tools/site-tools.py	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
+++ (empty file)
@@ -1,234 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2007 Rene Rivera
-# Copyright 2011 Daniel James
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-"""Usage: python site-tools.py [command]
-
-Commands:
-
-update      Update the html pages and rss feeds for new or updated
-            quickbook files.
-
-refresh     Reconvert all the quickbook files and regenerate the html
-            pages. Does not update the rss feeds or add new pages.
-            Useful for when quickbook, the scripts or the templates have
-            been updated.
-
-docs        Update the documentation list from doc/libraries.xml.
-            Requires php to be on the path and the site to be configured.
-
-"""
-
-import os, sys, subprocess, glob, re, time, xml.dom.minidom, codecs
-import boost_site.templite, boost_site.pages, boost_site.boostbook_parser, boost_site.util
-
-################################################################################
-
-settings = {
-    'downloads' : [
-        'feed/history/boost_1_47_0.qbk'
-    ],
-    'pages': {
-        'users/history/': {
-            'src_files' : ['feed/history/*.qbk'],
-            'template' : 'site-tools/templates/entry-template.html'
-        },
-        'users/news/': {
-            'src_files' : ['feed/news/*.qbk'],
-            'template' : 'site-tools/templates/entry-template.html'
-        },
-        'users/download/': {
-            'src_files' : ['feed/downloads/*.qbk'],
-            'template' : 'site-tools/templates/entry-template.html'
-        }
-    },
-    'index-pages' : {
-        'users/download/index.html' : 'site-tools/templates/download-template.html',
-        'users/history/index.html' : 'site-tools/templates/history-template.html',
-        'users/news/index.html' : 'site-tools/templates/news-template.html',
-        'index.html' : 'site-tools/templates/index-src.html'
-    },
-    'feeds' : {
-        'feed/downloads.rss' : {
-            'title': 'Boost Downloads',
-            'matches': ['feed/history/*.qbk', 'feed/downloads/*.qbk'],
-            'count': 3
-        },
-        'feed/history.rss' : {
-            'title': 'Boost History',
-            'matches': ['feed/history/*.qbk']
-        },
-        'feed/news.rss' : {
-            'title': 'Boost News',
-            'matches': ['feed/news/*.qbk', 'feed/history/*.qbk'],
-            'count': 5
-        }
-    }
-}
-
-################################################################################
-
-def main(argv):
-    os.chdir(os.path.join(os.path.dirname(sys.argv[0]), "../"))
-
-    if len(argv) != 1:
-        print __doc__
-        return
-
-    command = argv[0]
-
-    if command == 'docs':
-        return update_php_docs()
-    elif command == 'update':
-        return update_quickbook(False)
-    elif command == 'refresh':
-        return update_quickbook(True)
-    else:
-        print __doc__
-        return
-
-def update_php_docs():
-    try:
-        subprocess.check_call(['php', 'site-tools/php/update-doc-list.php'])
-    except:
-        print "PHP documentation serialization failed."
-
-def load_hashes(hash_file):
-    qbk_hashes = {}
-
-    file = open(hash_file)
-    try:
-        for line in file:
-            (qbk_file, qbk_hash, rss_hash) = line.strip().split(',')
-            qbk_hashes[qbk_file] = {'qbk_hash': qbk_hash, 'rss_hash': rss_hash}
-        return qbk_hashes
-    finally:
-        file.close()        
-
-def update_quickbook(refresh):
-    # Now check quickbook files.
-    
-    pages = boost_site.pages.Pages('site-tools/state/feed-pages.txt')
-
-    if not refresh:
-        for location in settings['pages']:
-            pages_data = settings['pages'][location]
-            for src_file_pattern in pages_data['src_files']:
-                for qbk_file in glob.glob(src_file_pattern):
-                    pages.add_qbk_file(qbk_file, location)
-
-        pages.save()
-    
-    # Translate new and changed pages
-
-    pages.convert_quickbook_pages(refresh)
-
-    # Generate 'Index' pages
-
-    index_page_variables = {
-        'pages' : pages,
-        'downloads' : pages.match_pages(settings['downloads'], sort = False)
-    }
-
-    for index_page in settings['index-pages']:
-        boost_site.templite.write_template(
-            index_page,
-            settings['index-pages'][index_page],
-            index_page_variables)
-
-    # Generate RSS feeds
-
-    if not refresh:
-        for feed_file in settings['feeds']:
-            feed_data = settings['feeds'][feed_file]
-            rss_feed = generate_rss_feed(feed_file, feed_data)
-            rss_channel = rss_feed.getElementsByTagName('channel')[0]
-            old_rss_items = pages.load_rss(feed_file, rss_feed)
-            
-            feed_pages = pages.match_pages(feed_data['matches'])
-            if 'count' in feed_data:
-                feed_pages = feed_pages[:feed_data['count']]
-            
-            for qbk_page in feed_pages:
-                if qbk_page.loaded:
-                    item = generate_rss_item(rss_feed, qbk_page.qbk_file, qbk_page)
-                    pages.add_rss_item(item)
-                    rss_channel.appendChild(item['item'])
-                elif qbk_page.qbk_file in old_rss_items:
-                    rss_channel.appendChild(old_rss_items[qbk_page.qbk_file]['item'])
-                else:
-                    print "Missing entry for %s" % qbk_page.qbk_file
-                    
-            output_file = open(feed_file, 'w')
-            try:
-                output_file.write(rss_feed.toxml('utf-8'))
-            finally:
-                output_file.close()
-
-    pages.save()
-
-################################################################################
-
-def generate_rss_feed(feed_file, details):
-    rss = xml.dom.minidom.parseString('''<?xml version="1.0" encoding="UTF-8"?>
-<rss version="2.0" xmlns:boostbook="urn:boost.org:boostbook">
-  <channel>
-    <generator>BoostBook2RSS</generator>
-    <title>%(title)s</title>
-    <link>%(link)s</link>
-    <description>%(description)s</description>
-    <language>%(language)s</language>
-    <copyright>%(copyright)s</copyright>
-  </channel>
-</rss>
-''' % {
-    'title' : details['title'],
-    'link' : "http://www.boost.org/" + feed_file,
-    'description' : '',
-    'language' : 'en-us',
-    'copyright' : 'Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)'
-    } )
-
-    return rss
-
-def generate_rss_item(rss_feed, qbk_file, page):
-    assert page.loaded
-
-    item = rss_feed.createElement('item')
-
-    title = xml.dom.minidom.parseString('<title>%s</title>' % page.title_xml)
-    item.appendChild(rss_feed.importNode(title.documentElement, True))
-
-    title = xml.dom.minidom.parseString('<link>http://www.boost.org/%s>' % page.location)
-    item.appendChild(rss_feed.importNode(title.documentElement, True))
-
-    # TODO: Convert date format?
-    node = rss_feed.createElement('pubDate')
-    node.appendChild(rss_feed.createTextNode(page.pub_date))
-    item.appendChild(node)
-    
-    node = rss_feed.createElement('boostbook:purpose')
-    node.appendChild(rss_feed.createTextNode(page.purpose_xml))
-    item.appendChild(node)
-
-    if page.download_item:
-        node = rss_feed.createElement('boostbook:downlaod')
-        node.appendChild(rss_feed.createTextNode(page.download_item))
-        item.appendChild(node)
-
-    node = rss_feed.createElement('description')
-    node.appendChild(rss_feed.createTextNode(page.description_xml))
-    item.appendChild(node)
-
-    return({
-        'item': item,
-        'quickbook': qbk_file,
-        'last_modified': page.last_modified
-    })
-
-################################################################################
-
-if __name__ == "__main__":
-    main(sys.argv[1:])
==============================================================================
--- website/public_html/live/site-tools/templates/history-template.html	(original)
+++ website/public_html/live/site-tools/templates/history-template.html	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -1,6 +1,6 @@
 ${
 title = 'Boost Version History'
-entries = pages.match_pages(['feed/history/*.qbk'])
+entries = pages.match_pages(['feed/history/*.qbk|released'])
 }$<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
==============================================================================
--- website/public_html/live/site-tools/templates/index-src.html	(original)
+++ website/public_html/live/site-tools/templates/index-src.html	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -1,6 +1,6 @@
 ${
 # TODO: This is duplicated from other places, should only be set once?
-news = pages.match_pages(['feed/news/*.qbk', 'feed/history/*.qbk'], 3)
+news = pages.match_pages(['feed/news/*.qbk', 'feed/history/*.qbk|released'], 3)
 }$<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
==============================================================================
--- website/public_html/live/site-tools/templates/news-template.html	(original)
+++ website/public_html/live/site-tools/templates/news-template.html	2011-10-17 16:49:58 EDT (Mon, 17 Oct 2011)
@@ -1,6 +1,6 @@
 ${
 title = 'Boost News'
-entries = pages.match_pages(['feed/news/*.qbk', 'feed/history/*.qbk'], 5)
+entries = pages.match_pages(['feed/news/*.qbk', 'feed/history/*.qbk|released'], 5)
 }$<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
 
$include_dir="/home/hyper-archives/boost-commit/include";
include("$include_dir/msg-footer.inc");
?>