? boost-182686.patch
Index: boost.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/boost/boost.admin.inc,v
retrieving revision 1.1.2.1.2.3.2.25
diff -u -p -r1.1.2.1.2.3.2.25 boost.admin.inc
--- boost.admin.inc	9 Jun 2009 08:44:57 -0000	1.1.2.1.2.3.2.25
+++ boost.admin.inc	9 Jun 2009 09:01:51 -0000
@@ -114,6 +114,12 @@ function boost_admin_settings($form = ar
     '#maxlength'     => 255,
     '#description'   => t('If you are synchronizing the generated static cache files to an external server through some means such as SFTP or rsync, you can enter a shell command to be executed following a successful cron-triggered cache update. Note that this is an advanced setting that should normally be left blank.'),
   );*/
+  $form['advanced']['boost_cache_xml'] = array(
+    '#type'          => 'checkbox',
+    '#title'         => t('Cache .xml & /feed'),
+    '#default_value' => BOOST_CACHE_XML,
+    '#description'   => t('Boost will cache .xml and /feed urls as xml data.'),
+  );
   $form['advanced']['boost_only_ascii_path'] = array(
     '#type'          => 'checkbox',
     '#title'         => t('Only allow ASCII characters in path'),
@@ -246,20 +252,22 @@ function boost_admin_themes_submit($form
 
 /**
  * Generate htaccess code.
- * 
+ *
  * http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html
  * @param $server_name
  *   %{SERVER_NAME} [OR] %{HTTP_HOST} [OR] www.example.com
  * @param $document_root
  *   %{DOCUMENT_ROOT} [OR] getcwd() [OR] path to webroot from ~/
  * @param $cache_dir
- *   cache
+ *   cache dir
  * @param $gzip_dir
- *   gz
+ *   gz dir
  * @param $html
  *   html document file extention
+ * @param $xml
+ *   xml document file extention
  */
-function boost_admin_generate_htaccess($server_name = '%{SERVER_NAME}', $document_root = '%{DOCUMENT_ROOT}', $cache_dir = 'cache', $gzip_dir = 'gz', $html = '.html') {
+function boost_admin_generate_htaccess($server_name = '%{SERVER_NAME}', $document_root = '%{DOCUMENT_ROOT}', $cache_dir = 'cache', $gzip_dir = 'gz', $html = '.html', $xml = '.xml') {
 Global $base_path;
 $drupal_subdir = rtrim($base_path, '/');
 $document_root = str_replace("\\", '/', $document_root);
@@ -275,26 +283,35 @@ $document_root = str_replace($drupal_sub
   </FilesMatch>
   <IfModule mod_mime.c>
     AddCharset utf-8 $html
+    AddCharset utf-8 $xml
   </IfModule>
   <FilesMatch "($html.gz)$">
     AddEncoding x-gzip .gz
     ForceType text/html
   </FilesMatch>
+  <FilesMatch "($xml.gz)$">
+    AddEncoding x-gzip .gz
+    ForceType text/xml
+  </FilesMatch>
 
   # Skip boost IF not get request OR uri has wrong dir OR cookie is set
   RewriteCond %{REQUEST_METHOD} !^GET$ [OR]
   RewriteCond %{REQUEST_URI} (^$drupal_subdir(admin|cache|misc|modules|sites|system|themes))|(/(feed|comment/reply|user|user/(login|password|register))$) [OR]
   RewriteCond %{HTTP_COOKIE} DRUPAL_UID
-  RewriteRule .* - [S=2]
+  RewriteRule .* - [S=4]
 
   # GZIP
   RewriteCond %{HTTP:Accept-encoding} gzip
   RewriteCond $document_root$drupal_subdir/$cache_dir/$gzip_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$html.gz -s
   RewriteRule .* $cache_dir/$gzip_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$html.gz [L]
+  RewriteCond $document_root$drupal_subdir/$cache_dir/$gzip_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$xml.gz -s
+  RewriteRule .* $cache_dir/$gzip_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$xml.gz [L,T=text/xml]
 
   # NORMAL
   RewriteCond $document_root$drupal_subdir/$cache_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$html -s
   RewriteRule .* $cache_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$html [L]
+  RewriteCond $document_root$drupal_subdir/$cache_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$xml -s
+  RewriteRule .* $cache_dir/$server_name%{REQUEST_URI}_%{QUERY_STRING}$xml [L,T=text/xml]
   ### BOOST END ###
 ETO;
 
Index: boost.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/boost/boost.module,v
retrieving revision 1.3.2.2.2.5.2.50
diff -u -p -r1.3.2.2.2.5.2.50 boost.module
--- boost.module	9 Jun 2009 08:00:22 -0000	1.3.2.2.2.5.2.50
+++ boost.module	9 Jun 2009 09:01:51 -0000
@@ -15,6 +15,7 @@ define('BOOST_ROOT_CACHE_PATH',      'ca
 define('BOOST_MULTISITE_SINGLE_DB',  variable_get('boost_multisite_single_db', FALSE));
 define('BOOST_FILE_PATH',            BOOST_MULTISITE_SINGLE_DB ? boost_cache_directory(NULL, FALSE) : variable_get('boost_file_path', boost_cache_directory(NULL, FALSE)));
 define('BOOST_FILE_EXTENSION',       variable_get('boost_file_extension', '.html'));
+define('BOOST_XML_EXTENSION',        variable_get('boost_xml_extension', '.xml'));
 define('BOOST_MAX_PATH_DEPTH',       10);
 define('BOOST_CACHEABILITY_OPTION',  variable_get('boost_cacheability_option', 0));
 define('BOOST_CACHEABILITY_PAGES',   variable_get('boost_cacheability_pages', ''));
@@ -29,6 +30,7 @@ define('BOOST_CLEAR_CACHE_OFFLINE',  var
 define('BOOST_HALT_ON_ERRORS',       variable_get('boost_halt_on_errors', FALSE));
 define('BOOST_ROOT_FILE',            variable_get('boost_root_file', '.boost'));
 define('BOOST_FLUSH_DIR',            variable_get('boost_flush_dir', TRUE));
+define('BOOST_CACHE_XML',            variable_get('boost_cache_xml', TRUE));
 
 // This cookie is set for all authenticated users, so that they can be
 // excluded from caching (or in the future get a user-specific cached page):
@@ -401,6 +403,9 @@ function _boost_ob_handler($buffer) {
     if (_boost_get_content_type() == 'text/html') {
       boost_cache_set($GLOBALS['_boost_path'], $buffer);
     }
+    else if (_boost_get_content_type() == ('application/rss' || 'text/xml' || 'application/rss+xml')) {
+      boost_cache_set($GLOBALS['_boost_path'], $buffer, BOOST_XML_EXTENSION);
+    }
   }
 
   // Allow the page request to finish up normally
@@ -460,12 +465,13 @@ function boost_is_cacheable($path) {
   if (   $normal_path == 'user'
       || preg_match('!^user/(login|register|password)!', $normal_path)
       || preg_match('!^admin!', $normal_path)
-      || preg_match('!/feed$!', $normal_path)
-      || preg_match('!\.xml$!', $normal_path)
       || preg_match('!comment/reply$!', $normal_path)
     ) {
     return FALSE;
   }
+  if (!BOOST_CACHE_XML && (preg_match('!/feed$!', $normal_path) || preg_match('!\.xml$!', $normal_path))) {
+    return FALSE;
+  }
 
   // Match the user's cacheability settings against the path
   if (BOOST_CACHEABILITY_OPTION == 2) {
@@ -565,8 +571,9 @@ function boost_cache_expire_derivative($
  * matching a wildcard.
  */
 function boost_cache_expire($path, $wildcard = FALSE) {
-  $filenames = array();
-  $filenames = glob(boost_file_path($path, FALSE, FALSE) . (($wildcard) ? '*' : '') . BOOST_FILE_EXTENSION, GLOB_NOSORT);
+  $tempA = glob(boost_file_path($path, FALSE, NULL) . (($wildcard) ? '*' : '') . BOOST_FILE_EXTENSION, GLOB_NOSORT);
+  $tempB = glob(boost_file_path($path, FALSE, NULL) . (($wildcard) ? '*' : '') . BOOST_XML_EXTENSION, GLOB_NOSORT);
+  $filenames = array_filter($tempA + $tempB);
   if (empty($filenames)) {
     return FALSE;
   }
@@ -598,7 +605,7 @@ function boost_cache_get($path) {
 /**
  * Replaces the cached contents of the specified page, if stale.
  */
-function boost_cache_set($path, $data = '') {
+function boost_cache_set($path, $data = '', $extension = BOOST_FILE_EXTENSION) {
   // Append the Boost footer with the relevant timestamps
   $time = time();
   $cached_at = date('Y-m-d H:i:s', $time);
@@ -619,7 +626,7 @@ function boost_cache_set($path, $data = 
   db_set_active();
 
   // Create or update the static files as needed
-  if (($filename = boost_file_path($path))) {
+  if (($filename = boost_file_path($path, TRUE, $extension))) {
     boost_cache_write($filename, $data);
     if (BOOST_GZIP) {
       boost_cache_write(str_replace(BOOST_FILE_PATH, BOOST_GZIP_FILE_PATH, $filename). '.gz', gzencode($data,9));
@@ -686,7 +693,7 @@ function boost_cache_directory($host = N
  * $extension
  *   add extension to end of filename
  */
-function boost_file_path($path, $query = TRUE, $extension = TRUE) {
+function boost_file_path($path, $query = TRUE, $extension = BOOST_FILE_EXTENSION) {
   //handling of url variables
   if ($GLOBALS['_boost_query'] != '_') {
     if ($query) {
@@ -714,7 +721,7 @@ function boost_file_path($path, $query =
     }
   }
 
-  return implode('/', array(BOOST_FILE_PATH, $path . (($extension) ? BOOST_FILE_EXTENSION : '')));
+  return implode('/', array(BOOST_FILE_PATH, $path . (is_null($extension) ? '' : $extension)));
 }
 
 /**
