Bug 1661: Improve build speed with better caching strategy
Changed the way that the cache is located, so the same code can run on any build machine without any configuration.
Made work around for Bug 419 the only option, as we're not using the alternative anyway, and I don't want to commit completely untested code!
Changed caching algorithm, to improve build times.
<?xml version="1.0" encoding="ascii"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>fileutils</title>
<link rel="stylesheet" href="epydoc.css" type="text/css" />
<script type="text/javascript" src="epydoc.js"></script>
</head>
<body bgcolor="white" text="black" link="blue" vlink="#204080"
alink="#204080">
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
bgcolor="#a0c0ff" cellspacing="0">
<tr valign="middle">
<!-- Tree link -->
<th> <a
href="module-tree.html">Trees</a> </th>
<!-- Index link -->
<th> <a
href="identifier-index.html">Indices</a> </th>
<!-- Help link -->
<th> <a
href="help.html">Help</a> </th>
<th class="navbar" width="100%"></th>
</tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="100%">
<span class="breadcrumbs">
Module fileutils
</span>
</td>
<td>
<table cellpadding="0" cellspacing="0">
<!-- hide/show private -->
<tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
onclick="toggle_private();">hide private</a>]</span></td></tr>
<tr><td align="right"><span class="options"
>[<a href="frames.html" target="_top">frames</a
>] | <a href="fileutils-module.html"
target="_top">no frames</a>]</span></td></tr>
</table>
</td>
</tr>
</table>
<!-- ==================== MODULE DESCRIPTION ==================== -->
<h1 class="epydoc">Module fileutils</h1><span class="codelink"><a href="fileutils-pysrc.html">source code</a></span><br /><br />
<dl class="rst-docutils">
<dt>File manipulation related functionalities:</dt>
<dd><ul class="rst-first rst-last rst-simple">
<li>Filescanner</li>
<li>rmtree (fixed version)</li>
<li>move (fixed version)</li>
</ul>
</dd>
</dl><br /><br />
<!-- ==================== CLASSES ==================== -->
<a name="section-Classes"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Classes</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Classes"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="fileutils.AbstractScanner-class.html" class="summary-name">AbstractScanner</a><br />
This class implements all the required infrastructure for filescanning.
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="fileutils.FileScanner-class.html" class="summary-name">FileScanner</a><br />
Scans the filesystem for files that match the selection paths.
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="fileutils.LockFailedException-class.html" class="summary-name">LockFailedException</a>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="fileutils.Lock-class.html" class="summary-name">Lock</a>
</td>
</tr>
</table>
<!-- ==================== FUNCTIONS ==================== -->
<a name="section-Functions"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Functions</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Functions"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="fileutils-module.html#move" class="summary-sig-name">move</a>(<span class="summary-sig-arg">src</span>,
<span class="summary-sig-arg">dst</span>)</span><br />
Recursively move a file or directory to another location.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#move">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="fileutils-module.html#rmtree" class="summary-sig-name">rmtree</a>(<span class="summary-sig-arg">rootdir</span>)</span><br />
Catch shutil.rmtree failures on Windows when files are read-only.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#rmtree">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="destinsrc"></a><span class="summary-sig-name">destinsrc</span>(<span class="summary-sig-arg">src</span>,
<span class="summary-sig-arg">dst</span>)</span><br />
Fixed version of destinscr, that doesn't match dst with same root name.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#destinsrc">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="which"></a><span class="summary-sig-name">which</span>(<span class="summary-sig-arg">executable</span>)</span><br />
Search for executable in the PATH.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#which">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="fileutils-module.html#read_policy_content" class="summary-sig-name">read_policy_content</a>(<span class="summary-sig-arg">filename</span>)</span><br />
Read the policy number from the policy file.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#read_policy_content">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="load_policy_content"></a><span class="summary-sig-name">load_policy_content</span>(<span class="summary-sig-arg">filename</span>)</span><br />
Testing policy content loading.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#load_policy_content">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="fileutils-module.html#guess_encoding" class="summary-sig-name">guess_encoding</a>(<span class="summary-sig-arg">data</span>)</span><br />
Given a byte string, guess the encoding.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#guess_encoding">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="getmd5"></a><span class="summary-sig-name">getmd5</span>(<span class="summary-sig-arg">fullpath</span>,
<span class="summary-sig-arg">chunk_size</span>=<span class="summary-sig-default">2**16</span>)</span><br />
returns the md5 value</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#getmd5">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="read_symbian_policy_content"></a><span class="summary-sig-name">read_symbian_policy_content</span>(<span class="summary-sig-arg">filename</span>)</span><br />
Read the policy category from the policy file.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#read_symbian_policy_content">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="get_next_free_drive"></a><span class="summary-sig-name">get_next_free_drive</span>()</span><br />
Return the first free drive found else it raise an exception.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#get_next_free_drive">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="subst"></a><span class="summary-sig-name">subst</span>(<span class="summary-sig-arg">drive</span>,
<span class="summary-sig-arg">path</span>)</span><br />
Substing path as a drive.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#subst">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="unsubst"></a><span class="summary-sig-name">unsubst</span>(<span class="summary-sig-arg">drive</span>)</span><br />
Unsubsting the drive.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#unsubst">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="mount"></a><span class="summary-sig-name">mount</span>(<span class="summary-sig-arg">drive</span>,
<span class="summary-sig-arg">unc</span>,
<span class="summary-sig-arg">username</span>=<span class="summary-sig-default">None</span>,
<span class="summary-sig-arg">password</span>=<span class="summary-sig-default">None</span>,
<span class="summary-sig-arg">persistent</span>=<span class="summary-sig-default">False</span>)</span><br />
Windows helper function to map a network drive.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#mount">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="umount"></a><span class="summary-sig-name">umount</span>(<span class="summary-sig-arg">drive</span>)</span><br />
Windows helper function to map a network drive.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#umount">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="rmdir"></a><span class="summary-sig-name">rmdir</span>(<span class="summary-sig-arg">path</span>)</span></td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#rmdir">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a name="remove"></a><span class="summary-sig-name">remove</span>(<span class="summary-sig-arg">path</span>)</span></td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#remove">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td><span class="summary-sig"><a href="fileutils-module.html#touch" class="summary-sig-name">touch</a>(<span class="summary-sig-arg">srcdir</span>)</span><br />
Recursively touches all the files in the source path mentioned.</td>
<td align="right" valign="top">
<span class="codelink"><a href="fileutils-pysrc.html#touch">source code</a></span>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- ==================== VARIABLES ==================== -->
<a name="section-Variables"></a>
<table class="summary" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Variables</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-Variables"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger('fileutils')">logging.getLogger('fileutils')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a name="LOGGER_LOCK"></a><span class="summary-name">LOGGER_LOCK</span> = <code title="logging.getLogger('fileutils.lock')">logging.getLogger('fileutils.lock')</code>
</td>
</tr>
<tr>
<td width="15%" align="right" valign="top" class="summary">
<span class="summary-type"> </span>
</td><td class="summary">
<a href="fileutils-module.html#ENCODING_MATRIX" class="summary-name">ENCODING_MATRIX</a> = <code title="{codecs.BOM_UTF8: 'utf_8', codecs.BOM_UTF16: 'utf_16', codecs.BOM_UTF1\
6_BE: 'utf_16_be', codecs.BOM_UTF16_LE: 'utf_16_le',}">{codecs.BOM_UTF8: 'utf_8', codecs.BOM_UTF16:<code class="variable-ellipsis">...</code></code>
</td>
</tr>
</table>
<!-- ==================== FUNCTION DETAILS ==================== -->
<a name="section-FunctionDetails"></a>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Function Details</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-FunctionDetails"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
</table>
<a name="move"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">move</span>(<span class="sig-arg">src</span>,
<span class="sig-arg">dst</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="fileutils-pysrc.html#move">source code</a></span>
</td>
</table>
<p>Recursively move a file or directory to another location.</p>
<p>If the destination is on our current filesystem, then simply use
rename. Otherwise, copy src to the dst and then remove src.
A lot more could be done here... A look at a mv.c shows a lot of
the issues this implementation glosses over.</p>
<dl class="fields">
</dl>
</td></tr></table>
</div>
<a name="rmtree"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">rmtree</span>(<span class="sig-arg">rootdir</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="fileutils-pysrc.html#rmtree">source code</a></span>
</td>
</table>
Catch shutil.rmtree failures on Windows when files are read-only. Thanks Google!
<dl class="fields">
</dl>
</td></tr></table>
</div>
<a name="read_policy_content"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">read_policy_content</span>(<span class="sig-arg">filename</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="fileutils-pysrc.html#read_policy_content">source code</a></span>
</td>
</table>
Read the policy number from the policy file.
strict allows to activate the new policy scanning.
<dl class="fields">
</dl>
</td></tr></table>
</div>
<a name="guess_encoding"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">guess_encoding</span>(<span class="sig-arg">data</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="fileutils-pysrc.html#guess_encoding">source code</a></span>
</td>
</table>
<p>Given a byte string, guess the encoding.</p>
<p>First it tries for UTF8/UTF16 BOM.</p>
<p>Next it tries the standard 'UTF8', 'ISO-8859-1', and 'cp1252' encodings,
Plus several gathered from locale information.</p>
<p>The calling program <em>must</em> first call locale.setlocale(locale.LC_ALL, '')</p>
<p>If successful it returns (decoded_unicode, successful_encoding)
If unsuccessful it raises a <tt class="rst-docutils literal"><span class="pre">UnicodeError</span></tt>.</p>
<p>This was taken from <a class="rst-reference external" href="http://www.voidspace.org.uk/python/articles/guessing_encoding.shtml" target="_top">http://www.voidspace.org.uk/python/articles/guessing_encoding.shtml</a></p>
<dl class="fields">
</dl>
</td></tr></table>
</div>
<a name="touch"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">touch</span>(<span class="sig-arg">srcdir</span>)</span>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="fileutils-pysrc.html#touch">source code</a></span>
</td>
</table>
Recursively touches all the files in the source path mentioned.
It does not touch the directories.
<dl class="fields">
</dl>
</td></tr></table>
</div>
<br />
<!-- ==================== VARIABLES DETAILS ==================== -->
<a name="section-VariablesDetails"></a>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="table-header">
<td colspan="2" class="table-header">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td align="left"><span class="table-header">Variables Details</span></td>
<td align="right" valign="top"
><span class="options">[<a href="#section-VariablesDetails"
class="privatelink" onclick="toggle_private();"
>hide private</a>]</span></td>
</tr>
</table>
</td>
</tr>
</table>
<a name="ENCODING_MATRIX"></a>
<div>
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<h3 class="epydoc">ENCODING_MATRIX</h3>
<dl class="fields">
</dl>
<dl class="fields">
<dt>Value:</dt>
<dd><table><tr><td><pre class="variable">
{codecs.BOM_UTF8: 'utf_8', codecs.BOM_UTF16: 'utf_16', codecs.BOM_UTF1<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
6_BE: 'utf_16_be', codecs.BOM_UTF16_LE: 'utf_16_le',}
</pre></td></tr></table>
</dd>
</dl>
</td></tr></table>
</div>
<br />
<!-- ==================== NAVIGATION BAR ==================== -->
<table class="navbar" border="0" width="100%" cellpadding="0"
bgcolor="#a0c0ff" cellspacing="0">
<tr valign="middle">
<!-- Tree link -->
<th> <a
href="module-tree.html">Trees</a> </th>
<!-- Index link -->
<th> <a
href="identifier-index.html">Indices</a> </th>
<!-- Help link -->
<th> <a
href="help.html">Help</a> </th>
<th class="navbar" width="100%"></th>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
<tr>
<td align="left" class="footer">
Generated by Epydoc 3.0beta1 on Wed Sep 09 13:44:16 2009
</td>
<td align="right" class="footer">
<a href="http://epydoc.sourceforge.net">http://epydoc.sourceforge.net</a>
</td>
</tr>
</table>
<script type="text/javascript">
<!--
// Private objects are initially displayed (because if
// javascript is turned off then we want them to be
// visible); but by default, we want to hide them. So hide
// them unless we have a cookie that says to show them.
checkCookie()
// -->
</script>
</body>
</html>