Add symlink method to util.opener.
Differences from os.symlink:
- the symlink name is relative to the opener base directory
- if a file with that name already exists, it's removed
- if necessary, parent directories are created
- if the system (OS or filesystem) doesn't support symlinks, a
regular file is created. Its contents are the symlink target.
#header#
<title>#repo|escape#: manifest for changeset #node|short#</title>
</head>
<body>
<div class="buttons">
<a href="#url#log/#rev#{sessionvars%urlparameter}">changelog</a>
<a href="#url#shortlog/#rev#{sessionvars%urlparameter}">shortlog</a>
<a href="#url#tags{sessionvars%urlparameter}">tags</a>
<a href="#url#rev/#node|short#{sessionvars%urlparameter}">changeset</a>
#archives%archiveentry#
</div>
<h2>manifest for changeset #node|short#: #path|escape#</h2>
<table cellpadding="0" cellspacing="0">
<tr class="parity#upparity#">
<td><tt>drwxr-xr-x</tt>
<td>
<td><a href="#url#file/#node|short##up|urlescape#{sessionvars%urlparameter}">[up]</a>
</tr>
#dentries%manifestdirentry#
#fentries%manifestfileentry#
</table>
#footer#